Stránka 1 z 1

Kopirovani do sheetu pomoci VBA  Vyřešeno

Napsal: 11 dub 2012 16:45
od LovelyTank2
Caute,

takze dalsi zasek. Udelal jsem si proceduru kde se mi podle jednoho sloupce se jmeny vytvari sheety:

Kód: Vybrat vše

Sub WORKSHEET_ADD()


lastrow = Worksheets("customers").Range("A1").End(xlDown).Row
For i = 1 To lastrow


Worksheets.Add().Name = Sheets("customers").Cells(i, 1).Value
next i
End sub


Ted mam dalsi sheet ("budgetary") kde mam opet jmena zakazniku ale je tam i spoustu dalsiho infa. Jak mam napsat ve VBA aby se zkontrolovalo jmeno sheetu se jmenem zakaznika a pokud bude sedet tak aby se tam i zkopirovalo to info? Problem je ze zatimco pri vytvareni sheetu nedojde k duplikatum tak v sheetu "budgetary" bude spousta zakazniku stejnych ale s jinym infem. tzn. musi se zkopirovat.

Ja v podstate vim jak na to (napadli me 2 zpusoby pres VBA a pak jeste pomoci formulek)
Jenze: Jak napsat makro kde nevim jak se jednotlive sheety budou jmenovat? Napada me jestli jde napsat neco jako If Jmeno bunky = jmeno jednoho z spreadsheetu then ...

Pak me napadlo to zahrnout primo do procedury vytvareni sheety (toho kopirovani tam si nevsimejte:)

Kód: Vybrat vše

Sub WORKSHEET_ADD()


lastrow = Worksheets("customers").Range("A1").End(xlDown).Row
For i = 1 To lastrow


Worksheets.Add().Name = Sheets("customers").Cells(i, 1).Value

jmenolistu2 = Sheets("customers").Cells(i, 1).Value

    Sheets("budgetary").Select
    ActiveSheet.Shapes.Range(Array("Picture 8")).Select
    Selection.Copy
    Sheets(jmenolistu2).Select
    Range("A2").Select
    ActiveSheet.Paste
   
    Sheets("Budgetary").Select
    Range("A1:L1").Select
    Selection.Copy
    Sheets(jmenolistu2).Select
    Range("A9").Select
    ActiveSheet.Paste
   
    Sheets("budgetary").Select
    Range("M5:S7").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets(jmenolistu2).Select
    Range("A5").Select
    ActiveSheet.Paste
   
A tady je kamen urazu:
            'Sheets("budgetary").Select
            'lastrow = Worksheets("budgetary").Range("A1").End(xlDown).Row
            'If Cells(i, 11).Value = Sheets(jmenolistu2) Then ....
... prohledej celej sheet budgetary a pokud najdes neco co ma stejnej nazev jako jmenolistu2 tak to do nej hned zkopiruj :)
Tady uz sem proste nevedel a zkousel a zkousel...
            '
   
   
Next i

End Sub


Samozrejme to nefunguje pac sem idiot :)
A opet predem dekuji za odpoved.

Re: Kopirovani do sheetu pomoci VBA

Napsal: 11 dub 2012 17:40
od d1amond
Měl bys mít definované listy jako proměnné. Lépe se s tím pracuje.

Kód: Vybrat vše

dim wsh1 as Woksheet
dim wsh2 as Woksheet

set wsh1 = ThisWorkbook.Worksheets("nazevListu")


a na ně se potom odkazovat. Např. v cyklu

Kód: Vybrat vše


If wsh1.Cells(i, 11).Value = wsh2.Name Then

'neco udelej

End If


Název listu získáš z pomocí objekt.Name (objekt je list samotný, viz set wsh1). Do proměnných ukládej maximum. Ze zápisu kódu z ukázky níže není vůbec jasné, odkud se třeba bere hodnota Cells.Value. Dal bych ji do proměnné.
Např.

Kód: Vybrat vše

dim hodnota as Variant

hodnota = wsh1.Cells(i, 11).Value
'hodnota je kdykoliv k dispozici


//kód který páchá Excel při záznamu Makro je sice tu tam dobrý, když se něco učíš. Jinak je ale těžkopádný.

Re: Kopirovani do sheetu pomoci VBA

Napsal: 12 dub 2012 10:38
od LovelyTank2
Diky moc za tipy.

Nicmene - pouzil jsem:

Kód: Vybrat vše

dim wsh1 as Worksheet
dim wsh2 as Worksheet

set wsh1 = ThisWorkbook.Worksheets("budgetary")

    If wsh1.Cells(i, 11).Value = wsh2.Name Then

    'neco udelej

    End If



a dostavam chybu: Object Variable or With block variable not set

Z toho usuzuju, ze se musi nadefinovat i wsh2. Ale jak kdyz nevim jak se ty sheety budou jmenovat / resp. pokazde budou jmena jina?


Predem dekuji
David

Re: Kopirovani do sheetu pomoci VBA

Napsal: 12 dub 2012 13:01
od d1amond
Něco ve smyslu cyklu

Kód: Vybrat vše

For Each wsh2 in ThisWorkbook 'v cyklu projde každý list
'v tomto těle uvedeš, co se má s každým listem provádět, když splní podmínku např.
    If wsh1.Cells(i, 11).Value = wsh2.Name Then

     'neco udelej

    End If
Next wsh2
 

Re: Kopirovani do sheetu pomoci VBA

Napsal: 12 dub 2012 14:11
od LovelyTank2
Cau,

diky moc za help!
Jen bych doplnil, ze

Kód: Vybrat vše

For Each wsh2 in ThisWorkbook

mi nefungovalo (dostaval jsem stejnou chybu)

Tak jsem to nahradil

Kód: Vybrat vše

For Each wsh2 In Sheets


Kazdopadne jeste jednou diky!
David