Stránka 1 z 1

VBA - prenos dat bunek na ruzne listy, dalsi prazdny radek  Vyřešeno

Napsal: 15 zář 2010 08:54
od MK_Vs
Dobrý den,

v některém z minulých témat bylo popsáno jak přenést data z určitého listu - rozsahu na jiný list, vždy na následující prázdné místo.

Mám provádět několikrát denně měření různých definovaných hodnot, tyto zapisovat. Zapisováno má být na papír, což nepovažuji za vhodné a raději bych zapisoval přímo do Excelu než poté přepisovat.

V přiloženém soboru je nádled vstupních dat + vzor výstupního listu.

Jak zkopíruji vždy pouze vyplněné buňky, nebo celý rozsah B5:J5; B11:J11 atd. do cílových listů 1 - 56, tak aby bylo vkládáno vždy na následující prázdný řádek listu 1 - 56 podle číselného označení v buňkách J2; J8 ...?

Další popis je přiloženém soboru.

Děkuji.

Re: VBA - prenos dat bunek na ruzne listy, dalsi prazdny rad

Napsal: 15 zář 2010 13:18
od navstevnik
1. tlačítkem přenést jen vyplněné hodnoty z listu „Vstupní data“ do záložek s názvy podle čísel ze sloupců J a U (1; 2; .... 56).
2. Přenést vždy na následující prázdný řádek v samostatném listu. Vkládat Vložit jako - hodnoty - pouze pro vyplněné položky. Rozhodující pro přenos je aby byla vyplněna alespoň jedna buňka pro hodnotu (číslo, nebo text). Potom je možno vložit i datum, čas, prac. a poznámka (celou oblast b5:j5)
3. Smazat na listu Vstupní data bílá políčka
4. Konečná pozice na B5, Vstupní data
5. Uložit

6. GRAF definice není přesně vyřešena - spojnicový graf pro jednotlivé položky, na stejném listu, který se bude průběžně doplňovat z hodnot, které budou postupně přibývat. V grafu vložení linek maximum E3, minimum G3, střed I3. Graf č. 1 pro hodnoty z řádků D-H. Graf č. 2 pro hodnoty ze sloupců D - H. Popisky budou vždy datum sl.B a R-O nebo N sl.C.


ad 1. co sloupce AF, AQ, dalsi zalozky vlozi kdo? V I2:I3 je Leden/2010, v B11 je 15.9. ???
ad 5. Co to znamena???
ad 6. Pro kazdy radek (sloupec) pozadujes samostatny graf? nebo to ma byt skupinovy graf (pro hodnotu 1 vsechny radky,...), pak to bude graf skupinovy sloupcovy.

Re: VBA - prenos dat bunek na ruzne listy, dalsi prazdny rad

Napsal: 15 zář 2010 13:45
od MK_Vs
ad1. - J, U, AF, AQ, není nutno řešit, bude linkováno jako pevné.
- záložky vytvořím, budou rovněž pevné jako předloha
- Leden / 2010 - zde vložím období pro jaké jsou hodnoty. Může být i týden. Pro přenos nepodstatné. Rovněž linkováno pevně.
ad5. - CTRL+S
ad6. - graf je uložen v záložce 1, data vybírána v jednom pro řádek, v drujém pro sloupec. V tomto ale nemám zatím jasno. Musím zkoušet.

Re: VBA - prenos dat bunek na ruzne listy, dalsi prazdny rad

Napsal: 15 zář 2010 16:07
od navstevnik
Tady je pracovni verze procedury prenasejici data z listu Vstupni data na listy 1, 2, 3:

Kód: Vybrat vše

Option Explicit

Sub VstupToZalozka()
  Dim SWsht As Worksheet, SBlkBJRef As Range, SBlkBJ As Range, PodBlok As Range
  Dim i As Byte, j As Byte
  Dim TWsht As Worksheet, TBlk As Range, TOfsR As Long
  Dim TWshtN As String, SBlkEmpty As Range

  Set SWsht = Worksheets("Vstupni data")
  With SWsht
    Set SBlkBJRef = .Range("b5:j5")
    Set PodBlok = .Range("j2")  ' poradove cislo podbloku --> zalozka
  End With
  For i = 0 To 3  ' 4 bloky dat
    For j = 0 To 13  ' 14 podbloku v bloku
      TWshtN = PodBlok.Offset(6 * j, 11 * i).Value  ' nazev zalozky
      'Debug.Print PodBlok.Offset(6 * j, 11 * i).Address; " "; SBlkBJ.Offset(6 * j, 11 * i).Address; " "; TWshtN
      Set SBlkBJ = SBlkBJRef.Offset(6 * j, 11 * i)  ' podblok
      ' overeni neprazdnosti v bunkach Dxx:Jxx
      Set SBlkEmpty = Nothing
      On Error Resume Next
      Set SBlkEmpty = SBlkBJ.Resize(1, SBlkBJ.Columns.Count - 2).Offset(0, 2).SpecialCells(xlCellTypeConstants, xlNumbers)
      On Error GoTo 0
      If Not SBlkEmpty Is Nothing Then  ' jsou neprazdne Dxx:Jxx
        On Error Resume Next
        Set TWsht = ActiveWorkbook.Worksheets(TWshtN)  ' definovat cilovy list
        If Err.Number <> 0 Then GoTo ErrHandler1  ' neni zalozen
        'Debug.Print TWsht.Name
        With TWsht
          TOfsR = .Range(.Range("b3"), .Range("b3").End(xlDown)).Rows.Count - 2 ' ofset volneho radku na cilovem listu
          Set TBlk = .Range("b5:j5").Offset(TOfsR, 0) ' definovat cilovy radek
          'Debug.Print TBlk.Address
          TBlk.Value = SBlkBJ.Value ' prenest hodnoty
        End With
        On Error GoTo 0
      End If
Cont:
    Next j
  Next i
  Exit Sub
ErrHandler1:
  On Error GoTo 0
  GoTo Cont
End Sub

over funcnost, jsou osetreny neexistujici cilove listy.

Re: VBA - prenos dat bunek na ruzne listy, dalsi prazdny rad

Napsal: 15 zář 2010 16:18
od MK_Vs
Dobrý den, děkuji, za návrh. Funguje ve vloženém souboru, který je u tohoto tématu.

Do původního dotazu vložen soubor se všemi listy.

Re: VBA - prenos dat bunek na ruzne listy, dalsi prazdny rad

Napsal: 15 zář 2010 16:28
od navstevnik
Soubor je kde? Co je puvodni dotaz>

Re: VBA - prenos dat bunek na ruzne listy, dalsi prazdny rad

Napsal: 15 zář 2010 18:19
od MK_Vs
Nyní je už správně nahrazen u původního dotazu.

Re: VBA - prenos dat bunek na ruzne listy, dalsi prazdny rad

Napsal: 15 zář 2010 21:42
od navstevnik
Uvedena procedura mela osetren stav, kdy nebyly zalozeny vsechny listy 1 - 56.
Nize je doplnena o vyprazdneni bunek Dxx:Jxx a o ulozeni souboru:

Kód: Vybrat vše

Option Explicit

Sub VstupToZalozka()
  Dim SWsht As Worksheet, SBlkBJRef As Range, SBlkBJ As Range, PodBlok As Range
  Dim i As Byte, j As Byte
  Dim TWsht As Worksheet, TBlk As Range, TOfsR As Long
  Dim TWshtN As String, SBlkEmpty As Range

  Set SWsht = Worksheets("Vstupni data")
  With SWsht
    Set SBlkBJRef = .Range("b5:j5")
    Set PodBlok = .Range("j2")  ' poradove cislo podbloku --> zalozka
  End With
  For i = 0 To 3  ' 4 bloky dat
    For j = 0 To 13  ' 14 podbloku v bloku
      TWshtN = PodBlok.Offset(6 * j, 11 * i).Value  ' nazev zalozky
      'Debug.Print PodBlok.Offset(6 * j, 11 * i).Address; " "; SBlkBJ.Offset(6 * j, 11 * i).Address; " "; TWshtN
      Set SBlkBJ = SBlkBJRef.Offset(6 * j, 11 * i)  ' podblok
      ' overeni neprazdnosti v bunkach Dxx:Jxx
      Set SBlkEmpty = Nothing
      On Error Resume Next
      Set SBlkEmpty = SBlkBJ.Resize(1, SBlkBJ.Columns.Count - 2).Offset(0, 2).SpecialCells(xlCellTypeConstants, xlNumbers)
      On Error GoTo 0
      If Not SBlkEmpty Is Nothing Then  ' jsou neprazdne Dxx:Jxx
        On Error Resume Next
        Set TWsht = ActiveWorkbook.Worksheets(TWshtN)  ' definovat cilovy list
        If Err.Number <> 0 Then GoTo ErrHandler1  ' neni zalozen
        On Error GoTo 0
        'Debug.Print TWsht.Name
        With TWsht
          TOfsR = .Range(.Range("b3"), .Range("b3").End(xlDown)).Rows.Count - 2  ' ofset volneho radku na cilovem listu
          Set TBlk = .Range("b5:j5").Offset(TOfsR, 0)  ' definovat cilovy radek
          'Debug.Print TBlk.Address
          TBlk.Value = SBlkBJ.Value  ' prenest hodnoty
          SBlkBJ.Resize(1, SBlkBJ.Columns.Count - 2).Offset(0, 2).ClearContents  ' vyprazdnit radek Dxx:Jxx
        End With
      End If
Cont:
    Next j
  Next i
  ActiveWorkbook.Save
  Set TBlk = Nothing
  Set TWsht = Nothing
  Set PodBlok = Nothing
  Set SBlkBJ = Nothing
  Set SBlkBJRef = Nothing
  Set SWsht = Nothing
  Exit Sub
ErrHandler1:
  On Error GoTo 0
  GoTo Cont
End Sub

Tlacitko pouzij z Panely nastroju> Ovladaci prvky, nikoliv Formulare, zavolat proceduru VstupToZalozka zvladnes.
Body 1-5 z prilozeneho souboru jsou tedy splneny, bod 6 je tvoje parketa.

Re: VBA - prenos dat bunek na ruzne listy, dalsi prazdny rad

Napsal: 16 zář 2010 05:52
od MK_Vs
Dobrý den, děkuji za úpravu.

Snad ještě dotaz, pokud by bude v buňce hodnotou písmeno, přenos neproběhne. Pokud zadám „x“ nebo „o“. Lze očetřit přenos nejen čísel ale i písmen?