Articles

A munkafüzet objektum használata az Excel VBA-ban (nyissa meg, zárja be, mentse, állítsa be)

ebben a bemutatóban kitérek arra, hogyan kell dolgozni az Excel munkafüzetekkel a VBA használatával.

az Excelben a “munkafüzet” egy olyan objektum, amely a “munkafüzetek” gyűjtemény részét képezi. A munkafüzeten belül különböző objektumok vannak, például munkalapok, diagramlapok, cellák és tartományok, diagramobjektumok, alakzatok stb.

a VBA-val sok dolgot tehet egy munkafüzet objektummal – például megnyithat egy adott munkafüzetet, mentheti és bezárhatja a munkafüzeteket, új munkafüzeteket hozhat létre, megváltoztathatja a munkafüzet tulajdonságait stb.

Tehát kezdjük el.

az összes kódot, amelyet ebben a bemutatóban említek, a Visual Basic szerkesztőbe kell helyezni. Lépjen a “hová tegye a VBA kódot” szakaszba, hogy megtudja, hogyan működik.

Ha érdekli a tanulás VBA az egyszerű módja, nézd meg az Online Excel VBA képzés.

Ez a bemutató a következőket tartalmazza:

egy munkafüzet hivatkozása a VBA

használatával különböző módon lehet hivatkozni egy munkafüzet objektumra a VBA-ban. A választott módszer attól függ, hogy mit szeretne tenni. Ebben a szakaszban kitérek a munkafüzetre való hivatkozás különböző módjaira, valamint néhány példakódra.

A Munkafüzetnevek használata

ha rendelkezik a hivatkozni kívánt munkafüzet pontos nevével, használhatja a kódot.

kezdjük egy egyszerű példával.

ha két munkafüzet van nyitva, akkor aktiválni szeretné a munkafüzetet a név-példákkal.xlsx, használhatja az alábbi kódot:

Sub ActivateWorkbook()Workbooks("Examples.xlsx").ActivateEnd Sub

vegye figyelembe, hogy a fájl nevét a kiterjesztéssel együtt kell használni, ha a fájl mentésre került. Ha még nem mentették el, akkor használhatja a nevet a fájlkiterjesztés nélkül.

Ha nem biztos benne, hogy milyen nevet kell használni, kérjen segítséget a Project Explorertől.

munkalapok objektum Excel VBA - fájlnév a project explorer

Ha aktiválni szeretne egy munkafüzetet, és ki szeretne választani egy adott cellát a munkafüzet munkalapjában, meg kell adnia a cella teljes címét (beleértve a munkafüzetet és a munkalap nevét).

Sub ActivateWorkbook()Workbooks("Examples.xlsx").Worksheets("Sheet1").ActivateRange("A1").SelectEnd Sub

a fenti kód először aktiválja Sheet1 a példákban.xlsx munkafüzet, majd kiválasztja az A1 cellát a lapon.

gyakran megjelenik egy kód, ahol a munkalapra vagy a cellára/tartományra történő hivatkozás a munkafüzetre való hivatkozás nélkül történik. Ez akkor történik, ha ugyanabban a munkafüzetben található munkalapra/tartományokra hivatkozik, amelyben a kód található, valamint az aktív munkafüzet is. Bizonyos esetekben azonban meg kell adnia a munkafüzetet, hogy megbizonyosodjon arról, hogy a kód működik-e (erről bővebben a ThisWorkbook szakaszban).

Indexszámok használatával

hivatkozhat a munkafüzetekre is az indexszámuk alapján.

például, ha három munkafüzet van nyitva, a következő kód megmutatja a három munkafüzet nevét egy üzenetmezőben (egyenként).

Sub WorkbookName()MsgBox Workbooks(1).NameMsgBox Workbooks(2).NameMsgBox Workbooks(3).NameEnd Sub

a fenti kód MsgBox – ot használ-ez egy olyan funkció, amely egy üzenetmezőt jelenít meg a megadott szöveg/értékkel (amely ebben az esetben a munkafüzet neve).

az Egyik a problémák gyakran a segítségével tárgymutató számok Munkafüzetek, hogy soha nem tudod, hogy melyik az első, munkafüzetet, melyik a második, stb. Ahhoz, hogy biztos lehessen benne, a kódot a fentiek szerint kell futtatnia, vagy valami hasonló ahhoz, hogy a nyitott munkafüzeteken keresztül körbejárja az indexszámot.

Az Excel kezeli az első megnyitott munkafüzetet, hogy az indexszám 1, A következő pedig 2 stb.

ennek a hátránynak ellenére az indexszámok használata hasznos lehet. Például, ha az összes nyitott munkafüzetet át szeretné húzni, az összes mentése, használhatja az indexszámokat. Ebben az esetben, mivel azt akarja, hogy ez megtörténjen az összes munkafüzettel, nem aggódik az egyéni indexszámok miatt.

az alábbi kód az összes nyitott munkafüzetet végigjárja, és az összes olyan munkafüzetet bezárja, amely rendelkezik ezzel a VBA kóddal.

Sub CloseWorkbooks()Dim WbCount As IntegerWbCount = Workbooks.CountFor i = WbCount To 1 Step -1If Workbooks(i).Name <> ThisWorkbook.Name ThenWorkbooks(i).CloseEnd IfNext iEnd Sub

a fenti kód megszámolja a nyitott munkafüzetek számát, majd átmegy az összes munkafüzeten az egyes hurokokhoz.

az IF feltételt használja annak ellenőrzésére, hogy a munkafüzet neve megegyezik-e a munkafüzet nevével, ahol a kódot futtatja.

Ha ez nem egyezés, akkor bezárja a munkafüzetet, majd a következőre lép.

vegye figyelembe, hogy a hurkot a WbCount-ról 1-re futtattuk -1 lépéssel. Ez úgy történik, mint minden hurok esetében, a nyitott munkafüzetek száma csökken.

eza munkafüzet részletesen a későbbi szakaszban található.

az ActiveWorkbook használata

ActiveWorkbook, ahogy a neve is sugallja, az aktív munkafüzetre utal.

az alábbi kód megmutatja az aktív munkafüzet nevét.

Sub ActiveWorkbookName()MsgBox ActiveWorkbook.NameEnd Sub

Ha a VBA-t egy másik munkafüzet aktiválásához használja, akkor a VBA ActiveWorkbook része az aktivált munkafüzetre utal.

itt van egy példa erre.

ha aktív munkafüzete van, és a következő kódot illeszti be, majd futtatja, akkor először a kódot tartalmazó munkafüzet nevét, majd a példák nevét jeleníti meg.xlsx (amelyet a kód aktivál).

Sub ActiveWorkbookName()MsgBox ActiveWorkbook.NameWorkbooks("Examples.xlsx").ActivateMsgBox ActiveWorkbook.NameEnd Sub

vegye figyelembe, hogy amikor új munkafüzetet hoz létre a VBA használatával, az újonnan létrehozott munkafüzet automatikusan aktív munkafüzetré válik.

ThisWorkbook

ThisWorkbook utal, hogy a munkafüzet, ahol a kód végrehajtása.

minden munkafüzetnek egy ThisWorkbook objektuma lenne annak részeként (látható a Project Explorerben).

Workbook Object in VBA - ThisWorkbook

‘ThisWorkbook’ képes tárolni a rendszeres makrók (hasonlóan az is, hogy mi add-in modulok), valamint az esemény eljárások. Az eseményeljárás olyan esemény, amelyet esemény alapján indítanak el-például duplán kattintva egy cellára, munkafüzet mentése vagy munkalap aktiválása.

minden olyan esemény, amelyet ebben a “ThisWorkbook” – ban ment, a teljes munkafüzetben elérhető lenne, összehasonlítva a lapszintű eseményekkel, amelyek csak az adott lapokra korlátozódnak.

például, ha duplán kattint a ThisWorkbook objektumra a Project Explorer programban, majd másolja be az alábbi kódot, akkor megmutatja a cellacímet, amikor duplán kattint a teljes munkafüzet bármelyik cellájára.

Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)MsgBox Target.AddressEnd Sub

míg a ThisWorkbook fő szerepe az eseménykezelés tárolása, használhatja azt a munkafüzetre is, ahol a kódot végrehajtják.

az alábbi kód visszaadja annak a munkafüzetnek a nevét, amelyben a kódot végrehajtják.

Sub ThisWorkbookName()MsgBox ThisWorkbook.NameEnd Sub

a ThisWorkbook (over ActiveWorkbook) használatának előnye, hogy minden esetben ugyanarra a munkafüzetre utal (amely tartalmazza a kódot). Tehát, ha VBA kódot használ egy új munkafüzet hozzáadásához, az ActiveWorkbook megváltozik, de eza munkafüzet továbbra is utal a kódra.

új munkafüzet objektum létrehozása

a következő kód új munkafüzetet hoz létre.

Sub CreateNewWorkbook()Workbooks.AddEnd Sub

új munkafüzet hozzáadásakor aktív munkafüzetré válik.

a következő kód új munkafüzetet ad hozzá, majd megmutatja a munkafüzet nevét (amely az alapértelmezett Book1 típusnév lenne).

Sub CreateNewWorkbook()Workbooks.AddMsgBox ActiveWorkbook.NameEnd Sub

nyisson meg egy munkafüzetet a VBA

használatával a VBA segítségével megnyithat egy adott munkafüzetet, ha ismeri a munkafüzet fájl elérési útját.

az alábbi kód megnyitja a munkafüzetet – példák.xlsx ami a Dokumentumok mappában van a rendszeremen.

Sub OpenWorkbook()Workbooks.Open ("C:\Users\sumit\Documents\Examples.xlsx")End Sub

abban az esetben, ha a fájl létezik az alapértelmezett mappában, amely az a mappa, ahol a VBA alapértelmezés szerint új fájlokat ment, akkor csak megadhatja a munkafüzet nevét – a teljes útvonal nélkül.

Sub OpenWorkbook()Workbooks.Open ("Examples.xlsx")End Sub

abban az esetben, ha a megnyitni kívánt munkafüzet nem létezik, hiba jelenik meg.

a hiba elkerülése érdekében hozzáadhat néhány sort a kódhoz, hogy először ellenőrizze, hogy a fájl létezik-e vagy sem, majd próbálja meg megnyitni.

az alábbi kód ellenőrzi a fájl helyét, és ha nem létezik, akkor egyéni üzenetet jelenít meg (nem a hibaüzenet):

Sub OpenWorkbook()If Dir("C:\Users\sumit\Documents\Examples.xlsx") <> "" ThenWorkbooks.Open ("C:\Users\sumit\Documents\Examples.xlsx")ElseMsgBox "The file doesn't exist"End IfEnd Sub

a megnyitni kívánt fájl kiválasztásához a Megnyitás párbeszédpanelt is használhatja.

Sub OpenWorkbook()On Error Resume NextDim FilePath As StringFilePath = Application.GetOpenFilenameWorkbooks.Open (FilePath)End Sub

a fenti kód megnyitja a Megnyitás párbeszédpanelt. Amikor kiválaszt egy megnyitni kívánt fájlt, hozzárendeli a fájl elérési útját a FilePath változóhoz. Munkafüzetek.Nyissa meg, majd a fájl elérési útját használja a fájl megnyitásához.

abban az esetben, ha a felhasználó nem nyit meg egy fájlt, majd a Mégse gombra kattint, a FilePath hamis lesz. A hiba elkerülése érdekében ebben az esetben a “On Error Resume Next” nyilatkozatot használtuk.

kapcsolódó: Tudjon meg mindent a Hibakezelésről az Excel VBA-ban

munkafüzet mentése

az aktív munkafüzet mentéséhez használja az alábbi kódot:

Sub SaveWorkbook()ActiveWorkbook.SaveEnd Sub

Ez a kód a korábban mentett munkafüzetekhez működik. Továbbá, mivel a munkafüzet tartalmazza a fenti makrót, ha nem lett mentve .xlsm (vagy .xls) fájl, akkor elveszíti a makrót, amikor megnyitja a következő.

ha először menti a munkafüzetet, akkor az alább látható módon megjelenik egy parancssor:

munkafüzet objektum a VBA - ban-figyelmeztetés, amikor először menti a munkafüzetet

amikor először takarít meg, jobb a “Saveas” opciót használni.

az alábbi kód mentené az aktív munkafüzetet a-ként .xlsm fájl az alapértelmezett helyen (ami a dokumentummappa a rendszeremben).

Sub SaveWorkbook()ActiveWorkbook.SaveAs Filename:="Test.xlsm", FileFormat:=xlOpenXMLWorkbookMacroEnabledEnd Sub

Ha azt szeretné, hogy a fájlt egy adott helyre mentse, akkor ezt meg kell említenie a fájlnév értékében. Az alábbi kód menti a fájlt az asztalon.

Sub SaveWorkbook()ActiveWorkbook.SaveAs Filename:="C:\Users\sumit\Desktop\Test.xlsm", FileFormat:=xlOpenXMLWorkbookMacroEnabledEnd Sub

Ha azt szeretné, hogy a felhasználó a lehetőséget, hogy válassza ki a helyet, hogy mentse a fájlt, akkor hívja a Saveas párbeszédpanelt. Az alábbi kód a Saveas párbeszédpanelt mutatja, amely lehetővé teszi a felhasználó számára, hogy kiválassza azt a helyet, ahol a fájlt el kell menteni.

Sub SaveWorkbook()Dim FilePath As StringFilePath = Application.GetSaveAsFilenameActiveWorkbook.SaveAs Filename:=FilePath & ".xlsm", FileFormat:=xlOpenXMLWorkbookMacroEnabledEnd Sub

vegye figyelembe, hogy a FileFormat használata helyett:=xlOpenXMLWorkbookMacroEnabled, akkor is használhatja FileFormat:=52, ahol 52 a kód xlOpenXMLWorkbookMacroEnabled.

az összes megnyitott munkafüzet mentése

Ha egynél több munkafüzet van nyitva, és el akarja menteni az összes munkafüzetet, akkor az alábbi kódot használhatja:

Sub SaveAllWorkbooks()Dim wb As WorkbookFor Each wb In Workbookswb.SaveNext wbEnd Sub

a fentiek mentik az összes munkafüzetet, beleértve azokat is, amelyeket soha nem mentettek el. A korábban nem mentett munkafüzetek az alapértelmezett helyre kerülnek.

Ha csak azokat a munkafüzeteket szeretné menteni, amelyeket korábban elmentettek, használhatja az alábbi kódot:

Sub SaveAllWorkbooks()Dim wb As WorkbookFor Each wb In WorkbooksIf wb.Path <> "" Thenwb.SaveEnd IfNext wbEnd Sub

az összes munkafüzet mentése és Bezárása

Ha be szeretné zárni az összes munkafüzetet, kivéve az aktuális kódot tartalmazó munkafüzetet, akkor az alábbi kódot használhatja:

Sub CloseandSaveWorkbooks()Dim wb As WorkbookFor Each wb In WorkbooksIf wb.Name <> ThisWorkbook.Name Thenwb.Close SaveChanges:=TrueEnd IfNext wbEnd Sub

a fenti kód bezárja az összes munkafüzetet (kivéve a munkafüzetet, amely kóddal rendelkezik – ThisWorkbook). Abban az esetben, ha ezek a munkafüzetek megváltoznak, a módosítások mentésre kerülnek. Abban az esetben, ha van egy munkafüzet, amelyet még soha nem mentettek el, akkor megjelenik a Mentés másként párbeszédpanel.

mentse el a munkafüzet egy példányát (időbélyeg)

amikor összetett adatokkal és irányítópultokkal dolgozom az Excel munkafüzetekben, gyakran készítem a munkafüzeteim különböző verzióit. Ez akkor hasznos, ha valami baj van a jelenlegi munkafüzetemmel. Legalább egy másolatot más névvel mentenék (és csak egy másolat létrehozása után veszíteném el a munkát).

itt van a VBA kód, amely létrehozza a munkafüzet másolatát, majd a megadott helyre menti.

Sub CreateaCopyofWorkbook()ThisWorkbook.SaveCopyAs Filename:="C:\Users\sumit\Desktop\BackupCopy.xlsm"End Sub

a fenti kód mentené a munkafüzet másolatát minden alkalommal, amikor ezt a makrót futtatja.

bár ez nagyszerűen működik, kényelmesebben érezném magam, ha különböző másolatokat mentenék, amikor ezt a kódot futtatom. Ennek az az oka, hogy ha véletlenül hibát követek el, és futtatom ezt a makrót, akkor a hibákkal együtt megmenti a munkát. És nem férnék hozzá a munkához, mielőtt elkövettem a hibát.

az ilyen helyzetek kezeléséhez használhatja az alábbi kódot, amely minden alkalommal elmenti a munka új példányát. A munkafüzet nevének részeként hozzáad egy dátumot és időbélyeget is. Ez segíthet nyomon követni minden hibát, amit tettél, mivel soha nem veszíti el a korábban létrehozott biztonsági mentéseket.

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)ThisWorkbook.SaveCopyAs Filename:="C:\Users\sumit\Desktop\BackupCopy" & Format(Now(), "dd-mm-yy-hh-mm-ss-AMPM") & ".xlsm"End Sub

a fenti kód létrehoz egy példányt minden alkalommal, amikor futtatja ezt a makrót, és hozzáad egy dátum/időbélyegzőt a munkafüzet nevéhez.

hozzon létre egy új munkafüzetet minden

munkalaphoz bizonyos esetekben előfordulhat, hogy több munkalapot tartalmazó munkafüzet van, és minden munkalaphoz munkafüzetet szeretne létrehozni.

Ez akkor fordulhat elő, ha havi/negyedéves jelentések vannak egyetlen munkafüzetben, és ezeket minden munkalapra egy munkafüzetre szeretné osztani.

vagy, ha van osztály bölcs jelentések, és szeretné osztani ezeket az egyes munkafüzeteket, így küldheti ezeket az egyes munkafüzeteket az osztályvezetők.

itt van a kód, amely létrehoz egy munkafüzetet minden munkalaphoz, ugyanazt a nevet adja meg, mint a munkalapé, majd mentse el a megadott mappába.

Sub CreateWorkbookforWorksheets()Dim ws As WorksheetDim wb As WorkbookFor Each ws In ThisWorkbook.WorksheetsSet wb = Workbooks.Addws.Copy Before:=wb.Sheets(1)Application.DisplayAlerts = Falsewb.Sheets(2).DeleteApplication.DisplayAlerts = Truewb.SaveAs "C:\Users\sumit\Desktop\Test\" & ws.Name & ".xlsx"wb.CloseNext wsEnd Sub

a fenti kódban két ” ws ” és ” wb ” változót használtunk.

a kód átmegy minden munkalapon (az minden következő hurokhoz), majd létrehoz egy munkafüzetet. A munkalapobjektum másolási módját is használja a munkalap másolatának létrehozásához az új munkafüzetben.

vegye figyelembe, hogy a SET utasítás segítségével hozzárendeltem a ” wb ” változót a kód által létrehozott új munkafüzethez.

ezzel a technikával hozzárendelhet egy munkafüzet objektumot egy változóhoz. Ezt a következő szakasz tartalmazza.

hozzárendelheti a munkafüzet objektumát egy

változóhoz a VBA-ban, hozzárendelhet egy objektumot egy változóhoz, majd a változóval hivatkozhat az objektumra.

például az alábbi kódban a VBA-t használom új munkafüzet hozzáadásához, majd hozzárendelem ezt a munkafüzetet a wb változóhoz. Ehhez a SET nyilatkozatot kell használnom.

miután hozzárendeltem a munkafüzetet a változóhoz, a munkafüzet összes tulajdonsága elérhetővé válik a változó számára is.

Sub AssigntoVariable()Dim wb As WorkbookSet wb = Workbooks.Addwb.SaveAs Filename:="C:\Users\sumit\Desktop\Examples.xlsx"End Sub

vegye figyelembe, hogy a kód első lépése, hogy a ” wb ” – t munkafüzet típusú változónak nyilvánítsa. Ez azt mondja a VBA-nak, hogy ez a változó képes megtartani a munkafüzet objektumot.

a következő utasítás a set-et használja a változó hozzárendeléséhez az új munkafüzethez, amelyet hozzáadunk. Miután ez a hozzárendelés megtörtént, a WB változót használhatjuk a munkafüzet mentéséhez (vagy bármi mást is csinálhatunk vele).

Looping keresztül nyitott munkafüzetek

már láttunk néhány példát kódok felett használt hurok a kódot.

ebben a szakaszban elmagyarázom a nyitott munkafüzeteken keresztül a VBA használatával történő hurok különböző módjait.

tegyük fel, hogy el szeretné menteni és bezárni az összes nyitott munkafüzetet, kivéve a benne lévő kódot, akkor használhatja az alábbi kódot:

Sub CloseandSaveWorkbooks()Dim wb As WorkbookFor Each wb In WorkbooksIf wb.Name <> ThisWorkbook.Name Thenwb.Close SaveChanges:=TrueEnd IfNext wbEnd Sub

a fenti kód az egyes hurokokhoz használja a munkafüzetek gyűjteményének minden munkafüzetét. Ehhez először be kell jelentenünk a ” wb ” – t munkafüzet típusú változóként.

minden hurokciklusban minden munkafüzet nevét elemezzük, és ha nem egyezik meg a kódot tartalmazó munkafüzet nevével, akkor a tartalom mentése után bezáródik.

ugyanez érhető el egy másik hurokkal is, az alábbiak szerint:

Sub CloseWorkbooks()Dim WbCount As IntegerWbCount = Workbooks.CountFor i = WbCount To 1 Step -1If Workbooks(i).Name <> ThisWorkbook.Name ThenWorkbooks(i).Close SaveChanges:=TrueEnd IfNext iEnd Sub

a fenti kód a következő hurokhoz használja az összes munkafüzet bezárását, kivéve azt, amelyik a kódot tartalmazza. Ebben az esetben nem kell kijelentenünk egy munkafüzet változót, hanem meg kell számolnunk a nyitott munkafüzetek teljes számát. Ha megvan a szám, akkor a For Next loop-ot használjuk az egyes munkafüzetekhez. Ebben az esetben az indexszámot is használjuk a munkafüzetekre.

vegye figyelembe, hogy a fenti kódban a wbcount-ról 1-re hurkolunk A -1 lépéssel. Erre ugyanúgy szükség van, mint minden hurokra, a munkafüzet bezáródik, a munkafüzetek száma pedig 1-gyel csökken.

hiba a munkafüzet objektummal való munka közben (‘9’ futási idő hiba)

az egyik leggyakoribb hiba, amelyet a munkafüzetekkel való munka során tapasztalhat – ” 9 ” futási idő hiba-tartományon kívüli Index.

munkafüzet objektum a VBA - Runtime Error 9-ben a

tartományon kívül általában a VBA hibák nem nagyon informatívak, és gyakran hagyják neked, hogy kitaláld, mi történt rosszul.

Íme néhány lehetséges ok, amelyek ezt a hibát eredményezhetik:

  • A elérni kívánt munkafüzet nem létezik. Például, ha megpróbálom elérni az ötödik munkafüzetet a munkafüzetek segítségével(5), de csak 4 munkafüzet van nyitva, akkor ezt a hibát fogom kapni.
  • ha rossz nevet használ a munkafüzetre való hivatkozáshoz. Például, ha a munkafüzet neve példák.xlsx és használ példát.xlsx. ezután megmutatja ezt a hibát.
  • ha még nem mentett munkafüzetet, és a kiterjesztést használja, akkor ezt a hibát kapja. Ha például a munkafüzet neve Book1, akkor a Book1 nevet használja.xlsx mentés nélkül, akkor kap ez a hiba.
  • A elérni kívánt munkafüzet bezárásra kerül.

szerezzen be egy listát az összes megnyitott munkafüzetről

Ha az aktuális munkafüzetben (a munkafüzetben, ahol a kódot futtatja) szeretné megkapni az összes nyitott munkafüzet listáját, használhatja az alábbi kódot:

Sub GetWorkbookNames()Dim wbcount As Integerwbcount = Workbooks.CountThisWorkbook.Worksheets.AddActiveSheet.Range("A1").ActivateFor i = 1 To wbcountRange("A1").Offset(i - 1, 0).Value = Workbooks(i).NameNext iEnd Sub

a fenti kód új munkalapot ad hozzá, majd felsorolja az összes nyitott munkafüzet nevét.

Ha azt szeretnénk, hogy a fájl elérési útját is, akkor az alábbi kódot:

Sub GetWorkbookNames()Dim wbcount As Integerwbcount = Workbooks.CountThisWorkbook.Worksheets.AddActiveSheet.Range("A1").ActivateFor i = 1 To wbcountRange("A1").Offset(i - 1, 0).Value = Workbooks(i).Path & "\" & Workbooks(i).NameNext iEnd Sub

nyissa meg a megadott munkafüzetet a

cellára duplán kattintva, Ha rendelkezik az Excel munkafüzetek fájlútvonalainak listájával, az alábbi kód segítségével egyszerűen kattintson duplán a cellára a fájl elérési útjával, majd megnyitja azt a munkafüzetet.

Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)Workbooks.Open Target.ValueEnd Sub

Ez a kód kerül a ThisWorkbook kód ablakban.

ehhez:

  • kattintson duplán a project explorer ThisWorkbook objektumára. Vegye figyelembe, hogy a ThisWorkbook objektumnak a munkafüzetben kell lennie, ahol ezt a funkciót szeretné.
  • másolja be a fenti kódot.

most, ha megvan a megnyitni kívánt fájlok pontos elérési útja, ezt megteheti, ha egyszerűen duplán kattint a fájl elérési útjára, a VBA pedig azonnal megnyitja a munkafüzetet.

hová tegye a VBA kódot

kíváncsi, hogy hol van a VBA kód az Excel munkafüzetben?

az Excelnek van egy VBA backendje, a VBA szerkesztő. Be kell másolnia a kódot a VB szerkesztő modul kód ablakába.

itt vannak a lépések erre:

  1. lépjen a fejlesztő fülre.munkafüzetek használata Excel VBA - fejlesztői lapon szalag
  2. kattintson a Visual Basic opcióra. Ez megnyitja a VB szerkesztő a backend.kattintson a Visual Basic
  3. elemre a VB szerkesztő projekt Explorer ablaktáblájában, kattintson a jobb gombbal a munkafüzet bármely objektumára, amelybe be kívánja illeszteni a kódot. Ha nem látja a projekt felfedezőt, lépjen a Nézet fülre, majd kattintson a Project Explorer gombra.
  4. ugrás a beszúráshoz, majd kattintson a modulra. Ez beszúr egy modulobjektumot a munkafüzethez.munkafüzetek használata Excel VBA-modul beillesztése
  5. másolja be a kódot a modul ablakába.munkafüzetek használata Excel VBA-modul beillesztése

A következő Excel VBA oktatóanyagokat is kedvelheti:

  • hogyan lehet makrót rögzíteni az Excelben.
  • felhasználó által definiált funkció létrehozása Excel-ben.
  • hogyan lehet létrehozni és használni a bővítményt az Excelben.
  • hogyan kell újraküldeni a makrókat azáltal, hogy a személyes makró munkafüzetbe helyezi.
  • Szerezd meg a fájlnevek listáját egy Excel mappából (VBA-val vagy anélkül).
  • hogyan kell használni az Excel VBA InStr funkciót (gyakorlati példákkal).
  • hogyan lehet az adatokat Excel-ben rendezni a VBA segítségével (lépésről lépésre).