VBA - Megnyitott workbook-k bezárásának hibája

VBA - Megnyitott workbook-k bezárásának hibája
2020-02-06T13:11:10+01:00
2020-02-10T10:12:22+01:00
2022-12-06T07:45:41+01:00
Peti_Sz
Sziasztok!

Találkoztatok már olyan problémával, hogy ha több makrót futtatok egymás után, akkor nem működik a .Close parancs? Nálam az a probléma lépett fel, hogy egy külön makróba tettem a .Close parancsot, és ha csak ezt a makrót indítom el akkor bezárja a workbook-ot. Viszont ha egyszerre futtatok hármat (beleértve a bezárásost is) a makró futása után szintén megnyitja a workbook-okat. Van erre valami megoldás?

A bezárós kód:

Sheets("Szelekciós_képernyő").Select Workbooks.Open Filename:=Range("D11").Value ActiveWorkbook.Close False
Előre s köszönöm a segítséget!

Üdvözlettel,
P.
Mutasd a teljes hozzászólást!
Szia!

Rossz helyen van a bezárás:

Sub KNA1_tabla_masolasa() Dim x As Workbook, y As Workbook Dim ws1 As Worksheet, ws2 As Worksheet Set x = ThisWorkbook Workbooks.Open Filename:=Range("D10").Value Range("A2").Select Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select Selection.Copy application.WindowState = xlNormal Windows("CCC.xlsm"). _ Activate Sheets("KNA1").Select Range("C3").Select ActiveSheet.Paste ActiveWorkbook.Close End Sub
Így az eredeti fájlt -CCC- fogod bezárni, mivel az az aktív munkafüzet.
Helyette javaslom (a régi sorokat kikommenteltem, hogy lásd, mi marad ki):

Sub KNA1_tabla_masolasa() Dim x As Workbook, y As Workbook Dim ws1 As Worksheet, ws2 As Worksheet Set x = ThisWorkbook Workbooks.Open Filename:=Range("D10").Value Range("A2", Range("A2").SpecialCells(xlLastCell)).Copy Destination:=Workbooks("CCC").Sheets("KNA1").Range("C3") 'Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select 'Selection.Copy 'application.WindowState = xlNormal 'Windows("CCC.xlsm"). _ Activate 'Sheets("KNA1").Select 'Range("C3").Select 'ActiveSheet.Paste ActiveWorkbook.Close End Sub
Ebben nincs munkafüzetváltás, ezért valóban a megnyitott munkafüzet marad az aktív és azt zárjuk be a makró végén.

Üdv.
Mutasd a teljes hozzászólást!

  • Szia!

    Jó lenne látni a többi makrót is. Valószínűleg az eseménykezelés beszél vissza nálad.

    Üdv.
    Mutasd a teljes hozzászólást!
  • Szia Fferi!

    Igazad lehet. Ha nem haragszol, txt-be küldeném, kicsit hosszú. Ez csak egy részlet belőle, de így is kibukik a "hiba".

    Lehet, hogy az application.DisplayAlerts okozza? Ezt csak azért alkalmazom, hogy a felugró hibaüzenetek ne befolyásolják a programot, azaz ne állítsák meg.

    Köszönöm előre is!


    Üdv,
    P.
    Mutasd a teljes hozzászólást!
    Csatolt állomány
  • lehet hogy valami olyasmi van, hogy a program workbookja lesz az aktiv, igy azt zárod.
    ne aktiv workbookot zárjál hanem azt konkrétan mit akarsz zárni. 
    workbooks("ezt_zarom.xls").close
    Mutasd a teljes hozzászólást!
  • Szia Floppy!

    Igen, ez lenne az ésszerű. Viszont az a baj, hogy azok a táblák, amiket be kellene zárni, azok táblanevei TimeNow paranccsal folyamatosan változnak. Így nincs sajnos konkrét táblanevem.

    Üdv,
    P.
    Mutasd a teljes hozzászólást!
  • Szia!
    Kicsit még mindig nem világos számomra.
    A FBL5N_tabla_masolasa makróban a megnyitott fájlt a másolás után azonnal bezárod:

    Workbooks.Open Filename:=Range("D11").Value Range("A2").Select Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select Selection.Copy ActiveWorkbook.Close
    Ez így szerintem rendben is van. Miért kell akkor a bezárós FBL5N_JJJ() makróban újra megnyitni és bezárni ugyanezt a fájlt? 
    Legalábbis az Inditas_2_0 makróban így van egymás után.

    Tulajdonképpen mit szeretnél?

    Üdv.
    Mutasd a teljes hozzászólást!
  • Szia!
    A megnyitás után közvetlenül a megnyitott munkafüzet lesz aktív, tehát a példa makró azt fogja bezárni és nem másikat.
    Üdv.
    Mutasd a teljes hozzászólást!
  • Szia Fferi!

    Azt szeretném, hogy a megnyitott excel tábla értékeit (ami fixem mindig a A2-ből indul) másolja át egy másik táblába, majd ahonnan másolta az értékeket excelt, azt zárja be a program. És ez tök jól működik, ha csak egy makrót indítok el. De ha egyszerre az összeset, igaz bezárja, de a program futását követően megint újra megnyitja, és már nem zárja vissza.
    A FBL5N_JJJ()-t csak azért hoztam létre, hogy hátha ha újra megnyitja ugyan azt a fálj, ami már megvan és hátha akkor bezárja, de sajnos ez nem működött.

    Elnézést a tudatlanságomért, még kezdő vagyok a pályán.

    Köszönöm ismét!

    Üdv,
    P.
    Mutasd a teljes hozzászólást!
  • Szia!
    Áruld már el, hogyan lehet egyszerre az összes makrót elindítani, mert én ilyet nem tudok...
    Üdv.
    Mutasd a teljes hozzászólást!
  • Szia Fferi!

    Bocsánat, ez alatt csak azt értem, hogy az Inditas_2_0 makrót egy gombnyomás indítja el. Így (igazad van) nem egyszerre, hanem egymás után indítja el a makrókat.

    Az egyszeri elindítás alatt pedig azt értem, hogy csak kifejezetten egy makrót indítok el (pl: FBL5N)

    Üdv,
    P.
    Mutasd a teljes hozzászólást!
  • Szia!
    Akkor a bezárós makrót kihagyod belőle remélem.
    De valami még biztosan hiányzik onnan, hiszen az Entitásokat is be kellene olvasni.
    Tényleg jó lenne látni az egészet, mert a mutatott részben levők nem indokolják azt a jelenséget, amit írtál a probléma felvetésekor.
    Üdv.
    Mutasd a teljes hozzászólást!
  • Hello!

    Ha külön külön jók, akkor tényleg az lehet a gond amit korábban írtak. Azonban ilyenkor érdemes egy kis rutint írni ami a megadott ideig doevents sort hajt végre.

    Valami ilyesmi:

    Private sub várj(byval idő As integer)
    Do
        Doevents
    While időpont kisebb mint....

    End sub

    Abban a makróban ahol egymás után hivod meg a másik makrókat , közöttük  ezt kell meghívni. Pl 10 s  időtartammal.

    Ha így megy, akkor komolyabb a gond. Remélem nem ez a helyzet.
    Mutasd a teljes hozzászólást!
  • Szia  Fferi, Szia zizikus!

    Első körben küldöm akkor az éles makrót. Ebben az előző nincs benne, az csak teszt kedvéért "készítettem". Ez viszont az éles makró, ebben is jelentkezik a hiba. 

    Köszönöm a segítséget Nektek!

    Üdv,
    P.
    Mutasd a teljes hozzászólást!
    Csatolt állomány
  • Szia!
    Mennyivel jobb lett volna fals adatokkal egy munkafüzet feltöltése....
    Na mindegy, megpróbálom így is kibogarászni.

    Azt látom, hogy gyakorlatilag egyetlen megnyitott munkafüzetet sem zársz be....
    A másolós makrókban a Selection.Copy után egy ActiveWorkbook.Close False utasítás kellene. Az  application.WindowState = xlNormal sorra pedig nincs szükség szerintem.
    A CCC nevű munkafüzetből indul a makród vagy van egy külön makrós munkafüzet?
     

    Üdv.
    Mutasd a teljes hozzászólást!
  • Szia Fferi!


    Igazad van, pótoltam a makróban, és feltöltöm a kezdeti excelt a makrókkal.

    Üdv,
    P.
    Mutasd a teljes hozzászólást!
    Csatolt állomány
  • Szia!

    Rossz helyen van a bezárás:

    Sub KNA1_tabla_masolasa() Dim x As Workbook, y As Workbook Dim ws1 As Worksheet, ws2 As Worksheet Set x = ThisWorkbook Workbooks.Open Filename:=Range("D10").Value Range("A2").Select Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select Selection.Copy application.WindowState = xlNormal Windows("CCC.xlsm"). _ Activate Sheets("KNA1").Select Range("C3").Select ActiveSheet.Paste ActiveWorkbook.Close End Sub
    Így az eredeti fájlt -CCC- fogod bezárni, mivel az az aktív munkafüzet.
    Helyette javaslom (a régi sorokat kikommenteltem, hogy lásd, mi marad ki):

    Sub KNA1_tabla_masolasa() Dim x As Workbook, y As Workbook Dim ws1 As Worksheet, ws2 As Worksheet Set x = ThisWorkbook Workbooks.Open Filename:=Range("D10").Value Range("A2", Range("A2").SpecialCells(xlLastCell)).Copy Destination:=Workbooks("CCC").Sheets("KNA1").Range("C3") 'Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select 'Selection.Copy 'application.WindowState = xlNormal 'Windows("CCC.xlsm"). _ Activate 'Sheets("KNA1").Select 'Range("C3").Select 'ActiveSheet.Paste ActiveWorkbook.Close End Sub
    Ebben nincs munkafüzetváltás, ezért valóban a megnyitott munkafüzet marad az aktív és azt zárjuk be a makró végén.

    Üdv.
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd