Kopirovani do sheetu pomoci VBA Vyřešeno

Programy pro práci v kanceláři (Word, Excel, Access…=>Office)

Moderátor: Mods_senior

LovelyTank2
nováček
Příspěvky: 10
Registrován: prosinec 11
Pohlaví: Muž
Stav:
Offline

Kopirovani do sheetu pomoci VBA  Vyřešeno

Příspěvekod LovelyTank2 » 11 dub 2012 16:45

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.

Reklama
d1amond
člen HW spec týmu
Elite Level 12
Elite Level 12
Příspěvky: 16119
Registrován: květen 08
Bydliště: České Budějovice
Pohlaví: Muž
Stav:
Offline

Re: Kopirovani do sheetu pomoci VBA

Příspěvekod d1amond » 11 dub 2012 17:40

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ý.
Nikdy neříkej, že to nejde, protože se najde někdo, kdo o tom neví a udělá to!
Chcete si nechat sestavit nový počítač?

LovelyTank2
nováček
Příspěvky: 10
Registrován: prosinec 11
Pohlaví: Muž
Stav:
Offline

Re: Kopirovani do sheetu pomoci VBA

Příspěvekod LovelyTank2 » 12 dub 2012 10:38

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

d1amond
člen HW spec týmu
Elite Level 12
Elite Level 12
Příspěvky: 16119
Registrován: květen 08
Bydliště: České Budějovice
Pohlaví: Muž
Stav:
Offline

Re: Kopirovani do sheetu pomoci VBA

Příspěvekod d1amond » 12 dub 2012 13:01

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
 
Nikdy neříkej, že to nejde, protože se najde někdo, kdo o tom neví a udělá to!
Chcete si nechat sestavit nový počítač?

LovelyTank2
nováček
Příspěvky: 10
Registrován: prosinec 11
Pohlaví: Muž
Stav:
Offline

Re: Kopirovani do sheetu pomoci VBA

Příspěvekod LovelyTank2 » 12 dub 2012 14:11

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


  • Mohlo by vás zajímat
    Odpovědi
    Zobrazení
    Poslední příspěvek
  • ComboBox v Excelu kopírování Příloha(y)
    od LukM » 19 říj 2024 14:03 » v Kancelářské balíky
    0
    2653
    od LukM Zobrazit poslední příspěvek
    19 říj 2024 14:03
  • Sledování pomocí hodinek
    od palecek » 29 srp 2024 09:47 » v Mobily, tablety a jiná přenosná zařízení
    3
    3833
    od GamerXXX Zobrazit poslední příspěvek
    02 zář 2024 12:25

Zpět na “Kancelářské balíky”

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 4 hosti