Hirdetés

Keresés

Új hozzászólás Aktív témák

  • Fferi50

    Topikgazda

    válasz the radish #28551 üzenetére

    Szia!

    Úgy gondolom, az a probléma, hogy a meghívott makróból nem ugyanabba a helyzetbe térsz vissza, ahonnan meghívtad:

    Rows(tol & ":" & ig).copy WSM.Range("A2") Ezzel átmásolod a sorokat a forrás munkalapról a cél munkalapra
    proba
    Itt a másolandó munkafüzet innen nevű munkalapja az aktív.
    Itt viszont:
    Sub proba()
    Range("A1:E3693").Select ' még mindig a másolandó munkafüzet aktív, annak az A:E oszlopát másolod
    Selection.copy
    Windows("B.xls").Activate 'átváltasz a cél munkafüzetre
    Sheets("Munka2").Select 'abban is a Munka2 munkalapra
    Range("A1").Select 'és ide másolod be a kijelölt részeket
    ActiveSheet.Paste
    Application.CutCopyMode = False
    Range("A1").Select
    Sheets("ide").Select ' itt pedig a cél munkafüzet ide nevű munkalapját aktíválod - a cél munkafüzet marad az aktív!!! - Pedig a másolandó munkalap volt aktív, amikor a makrót meghívtad!!!
    'Azaz ide a Windows("A.xls").Activate sor kellene ezen sor helyett.
    MsgBox "Makró"
    End Sub

    Továbbá nem egészen értem, miért kell a Select - Copy - Paste és munkafüzet aktíválások sora (amiben el is vesztél szépen :) ).
    A Copy metódusnak van egy Destination paramétere, amivel megadhatod, hogy hova másolja át az adott tartományt. (Ráadásul ezt alkalmazod is a fejléc másolásánál!).
    Vagyis a másolás egy sorral megoldható:
    Range('A1:E3693").copy destination:=WSM.parent.Sheets("Munka2").range("A1")
    Magyarázat: A WSM.parent eredménye a B munkafüzet, így a másolás egyből annak Munka2 munkalapjára megy át.

    A rövidebb makród azért "tökéletes", mert abban csak egy üzenet van és nem végzel vele semmilyen egyéb - munkalap, munkafüzet megváltoztatási - feladatot.

    A leírtakból az is kiderül, ha nem kell mást csinálnia a meghívott makrónak, csak ezt a másolást, akkor nincs is rá szükség, mert az egy sort be lehet oda is szúrni a meghívás helyére.

    Bocsi, hogy egy "lerágott csontot" próbáltam meg egy kicsit kibogozni eléggé elkésve, de csak most volt időm foglalkozni vele.

    Üdv.

  • Delila_1

    veterán

    válasz the radish #28551 üzenetére

    Az Else ágba írtam be két sort, és akkor nincs szükség a külön makróra.

    Else
    ig = Application.Match(sorszam, Columns(1), 1)
    Rows(tol & ":" & ig).copy WSM.Range("A2")
    Range("A:E").copy WSM.Sheets("Munka2").Range("A1") '1
    WSI.Activate '2
    ' Masolas 'Itt indul a saját makród ****** megjegyzésbe tettem
    sorszam = sorszam + 1 'növeljük a keresendő értéket
    End If

    Hiába írtam át a makród nevét, még mindig van valami disznóság, másképp a VBE átírta volna a copy-t Copyra.

Új hozzászólás Aktív témák