Þegar þú hugsar um að opna Excel vinnubækur sjálfkrafa skaltu íhuga hvað gæti gerst ef þú reynir að opna bók sem er þegar opin. Í heimi sem ekki er VBA reynir Excel að opna skrána aftur, með skilaboðunum sem sýna að viðvörun um að allar óvistaðar breytingar glatist. Þú getur varið þig gegn slíku með því að athuga hvort tiltekin skrá sé þegar opin áður en þú reynir að opna hana aftur.
Forðastu þessi viðvörunarskilaboð.
Hvernig macro virkar
Það fyrsta sem þarf að taka eftir um þetta fjölvi er að það er fall, ekki Sub aðferð. Eins og þú munt sjá, gerir þetta fjölvi að aðgerð gerir þér kleift að senda hvaða skráarnöfn sem er til þess til að prófa hvort þessi skrá sé þegar opin.
Kjarni þessa kóða er einfaldur. Þú ert að prófa tiltekið skráarnafn til að sjá hvort hægt sé að úthluta því hlutbreytu. Aðeins er hægt að úthluta opnum vinnubókum við hlutbreytu. Þegar þú reynir að úthluta lokaðri vinnubók á breytuna kemur villa.
Ef hægt er að úthluta tiltekinni vinnubók er vinnubókin opin; ef villa kemur upp er vinnubókinni lokuð.
Aðgerð FileIsOpenTest(TargetWorkbook As String) Sem Boolean
'Skref 1: Lýstu breytunum þínum
Dim TestBook Sem vinnubók
'Skref 2: Segðu Excel að halda áfram við villu
Á Villa Resume Next
'Skref 3: Reyndu að tengja markvinnubókina við TestBook
Setja Prófabók = Vinnubækur (TargetWorkbook)
'Skref 4: Ef engin villa kom upp er vinnubókin þegar opin
Ef Err.Number = 0 Þá
FileIsOpenTest = True
Annar
FileIsOpenTest = False
End If
Lokaaðgerð
Það fyrsta sem fjölvi gerir er að lýsa yfir String breytu sem mun halda skráarnafninu sem notandinn velur. TestBook er heiti String breytunnar þinnar.
Í skrefi 2 segirðu Excel að það gæti verið villa við að keyra þennan kóða og, ef villa kemur upp, heldurðu kóðanum áfram. Án þessarar línu myndi kóðinn einfaldlega hætta þegar villa kemur upp. Aftur, þú prófar tiltekið skráarnafn til að sjá hvort hægt sé að úthluta því hlutbreytu. Ef hægt er að úthluta tiltekinni vinnubók er hún opin; ef villa kemur upp er henni lokað.
Í skrefi 3 reynirðu að tengja tiltekna vinnubók við breytuna TestBook Object. Vinnubókin sem þú reynir að úthluta er Strengjabreyta sem heitir TargetWorkbook. TargetWorkbook er send til fallsins í fallyfirlýsingunum (sjá fyrstu línu kóðans). Þessi uppbygging útilokar þörfina á að harðkóða heiti vinnubókar, sem gerir þér kleift að senda það sem breytu í staðinn.
Í skrefi 4 athugarðu einfaldlega hvort villa hafi komið upp. Ef villa kom ekki upp er vinnubókin opin, þannig að þú stillir FileIsOpenTest á True. Ef villa kom upp er vinnubókin ekki opin og þú stillir FileIsOpenTest á False.
Aftur er hægt að nota þessa aðgerð til að meta hvaða skrá sem þú sendir til hennar, í gegnum TargetWorkbook rök hennar. Þetta er fegurðin við að setja macro inn í fall.
Eftirfarandi fjölvi sýnir hvernig á að útfæra þessa aðgerð. Hér kallarðu nýju FileIsOpenTest aðgerðina til að ganga úr skugga um að notandinn geti ekki opnað þegar opna skrá:
Sub Macro1()
'Skref 1: Skilgreindu strengjabreytu
Dimmt FName sem afbrigði
Dimma FNFileOnly As String
'Skref 2: GetOpenFilename Method virkjar gluggann
FName = Application.GetOpenFilename( _
FileFilter:="Excel vinnubækur,*.xl*", _
Title:="Veldu vinnubók til að opna", _
MultiSelect:=False)
'Skref 3: Opnaðu valda skrá ef hún hefur ekki þegar verið opnuð
Ef FName <> False Þá
FNFileOnly = StrReverse(Left(StrReverse(FName), _
InStr(StrReverse(FName), ") - 1))