Amikor az Excel-munkafüzetek automatikus megnyitásán gondolkodik, gondolja át, mi történhet, ha egy már nyitva lévő könyvet próbál megnyitni. A nem VBA világban az Excel megpróbálja újra megnyitni a fájlt, és a megjelenő üzenet figyelmezteti, hogy a nem mentett módosítások elvesznek. Az ilyen esetek ellen úgy védekezhet, hogy az újbóli megnyitás előtt ellenőrzi, hogy egy adott fájl nyitva van-e már.
Kerülje el ezt a figyelmeztető üzenetet.
Hogyan működik a makró
Az első dolog, amit észre kell venni ezzel a makróval kapcsolatban, hogy ez egy függvény, nem pedig egy aleljárás. Amint látni fogja, a makró funkcióvá tétele lehetővé teszi, hogy bármilyen fájlnevet átadjon neki, hogy tesztelje, hogy az adott fájl már nyitva van-e.
Ennek a kódnak a lényege egyszerű. Egy adott fájlnevet tesztel, hogy megtudja, hozzárendelhető-e egy objektumváltozóhoz. Csak a megnyitott munkafüzetek rendelhetők objektumváltozóhoz. Amikor egy zárt munkafüzetet próbál hozzárendelni a változóhoz, hiba történik.
Ha az adott munkafüzet hozzárendelhető, a munkafüzet nyitva van; hiba esetén a munkafüzet bezárul.
Függvény FileIsOpenTest(TargetWorkbook As String) Logikai értékként
'1. lépés: Deklarálja a változókat
Dim tesztfüzet munkafüzetként
'2. lépés: Mondja meg az Excelnek, hogy hiba esetén folytassa
Hiba esetén Folytatás a következővel
'3. lépés: Próbálja meg hozzárendelni a célmunkafüzetet a TestBookhoz
Tesztkönyv beállítása = Munkafüzetek (Célmunkafüzet)
4. lépés: Ha nem történt hiba, a munkafüzet már meg van nyitva
Ha Err.Number = 0 Akkor
FileIsOpenTest = Igaz
Más
FileIsOpenTest = Hamis
Vége Ha
Funkció befejezése
A makró első dolga, hogy deklarál egy String változót, amely tartalmazza a felhasználó által választott fájlnevet. A TestBook a String változó neve.
A 2. lépésben közli az Excellel, hogy hiba lépett fel a kód futtatásakor, és hiba esetén folytatja a kód futtatását. E sor nélkül a kód egyszerűen leállna, ha hiba történik. Ismét tesztel egy adott fájlnevet, hogy megnézze, hozzá lehet-e rendelni egy objektumváltozóhoz. Ha az adott munkafüzet hozzárendelhető, akkor nyitva van; ha hiba történik, akkor bezárul.
A 3. lépésben megpróbálja hozzárendelni az adott munkafüzetet a TestBook Object változóhoz. A hozzárendelni kívánt munkafüzet egy TargetWorkbook nevű karakterlánc-változó. A TargetWorkbook átadásra kerül a függvénynek a függvénydeklarációkban (lásd a kód első sorát). Ez a struktúra kiküszöböli a munkafüzet nevének kemény kódolását, lehetővé téve helyette változóként történő átadását.
A 4. lépésben egyszerűen ellenőrizze, nem történt-e hiba. Ha nem történt hiba, a munkafüzet meg van nyitva, ezért a FileIsOpenTest értékét igazra kell állítani. Ha hiba történt, a munkafüzet nincs megnyitva, és a FileIsOpenTest értékét False értékre állítja.
Ez a függvény is felhasználható bármely fájl kiértékelésére, amelyet a TargetWorkbook argumentumán keresztül továbbít neki. Ez a makró funkcióba helyezésének szépsége.
A következő makró bemutatja ennek a funkciónak a megvalósítását. Itt hívja meg az új FileIsOpenTest függvényt, hogy megbizonyosodjon arról, hogy a felhasználó nem tud megnyitni egy már megnyitott fájlt:
Almakró1()
'1. lépés: Határozzon meg egy String változót
Dim FName Változatként
Dim FNFileOnly As String
'2. lépés: A GetOpenFilename Method aktiválja a párbeszédpanelt
FName = Application.GetOpenFilename( _
FileFilter:="Excel-munkafüzetek,*.xl*", _
Title:="Válasszon munkafüzetet a megnyitáshoz", _
MultiSelect:=False)
'3. lépés: Nyissa meg a kiválasztott fájlt, ha még nincs megnyitva
Ha FName <> False Akkor
FNFileOnly = StrReverse(Left(StrReverse(FName), _
InStr(StrReverse(FName), ") - 1))