Darbgrāmatas objekta izmantošana programmā Excel VBA (atvērt, aizvērt, saglabāt, iestatīt)

Šajā apmācībā es apskatīšu, kā strādāt ar darbgrāmatām programmā Excel, izmantojot VBA.

Programmā Excel darbgrāmata ir objekts, kas ir daļa no darbgrāmatu kolekcijas. Darbgrāmatā ir dažādi objekti, piemēram, darblapas, diagrammu lapas, šūnas un diapazoni, diagrammas objekti, formas utt.

Izmantojot VBA, ar darbgrāmatas objektu varat paveikt daudzas lietas - piemēram, atvērt konkrētu darbgrāmatu, saglabāt un aizvērt darbgrāmatas, izveidot jaunas darbgrāmatas, mainīt darbgrāmatas rekvizītus utt.

Tātad sāksim darbu.

Visi kodi, kurus es minēju šajā apmācībā, ir jāievieto Visual Basic redaktorā. Dodieties uz sadaļu “Kur ievietot VBA kodu”, lai uzzinātu, kā tas darbojas.

Ja jūs interesē vienkāršs VBA apguves veids, apskatiet manu Tiešsaistes Excel VBA apmācība.

Atsauce uz darbgrāmatu, izmantojot VBA

Ir dažādi veidi, kā atsaukties uz darbgrāmatas objektu VBA. Izvēlētā metode būs atkarīga no tā, ko vēlaties paveikt. Šajā sadaļā es apskatīšu dažādus veidus, kā atsaukties uz darbgrāmatu, kā arī dažus kodu piemērus.

Darbgrāmatu nosaukumu izmantošana

Ja jums ir precīzs darbgrāmatas nosaukums, uz kuru vēlaties atsaukties, varat izmantot kodu.

Sāksim ar vienkāršu piemēru.

Ja jums ir atvērtas divas darbgrāmatas un vēlaties aktivizēt darbgrāmatu ar nosaukumu - Examples.xlsx, varat izmantot tālāk norādīto kodu.

Sub ActivateWorkbook () Darbgrāmatas ("Examples.xlsx"). Aktivizējiet End Sub

Ņemiet vērā: ja fails ir saglabāts, kopā ar paplašinājumu ir jāizmanto faila nosaukums. Ja tas nav saglabāts, varat izmantot nosaukumu bez faila paplašinājuma.

Ja neesat pārliecināts, kādu vārdu izmantot, lūdziet palīdzību no Project Explorer.

Ja vēlaties aktivizēt darbgrāmatu un šīs darbgrāmatas darblapā atlasīt noteiktu šūnu, jānorāda visa šūnas adrese (ieskaitot darbgrāmatu un darblapas nosaukumu).

Apakšaktivizēt darbgrāmatu () Darbgrāmatas ("Piemēri.xlsx"). Darblapas ("Lapa1"). Aktivizēt diapazonu ("A1"). Atlasiet Beigt apakšdaļu

Iepriekš minētais kods vispirms aktivizē Sheet1 darbgrāmatā Examples.xlsx un pēc tam lapā izvēlas šūnu A1.

Jūs bieži redzēsit kodu, kurā ir atsauce uz darblapu vai šūnu/diapazonu, neatsaucoties uz darbgrāmatu. Tas notiek, ja jūs atsaucaties uz darblapu/diapazoniem tajā pašā darbgrāmatā, kurā ir kods un kas ir arī aktīvā darbgrāmata. Tomēr dažos gadījumos jums ir jānorāda darbgrāmata, lai pārliecinātos, ka kods darbojas (vairāk par to sadaļā ThisWorkbook).

Indeksa numuru izmantošana

Varat arī atsaukties uz darbgrāmatām, pamatojoties uz to indeksa numuru.

Piemēram, ja jums ir atvērtas trīs darbgrāmatas, šādā kodā ziņojumu lodziņā tiks parādīti trīs darbgrāmatu nosaukumi (pa vienam).

Sub WorkbookName () MsgBox darbgrāmatas (1). Nosaukums MsgBox darbgrāmatas (2). Nosaukums MsgBox darbgrāmatas (3). Nosaukums Beigu apakšiedaļa

Iepriekš minētais kods izmanto MsgBox - funkciju, kas parāda ziņojumu lodziņu ar norādīto tekstu/vērtību (kas šajā gadījumā ir darbgrāmatas nosaukums).

Viena no nepatikšanām, kas man bieži rodas, lietojot rādītāju numurus darbgrāmatās, ir tā, ka nekad nevar zināt, kura ir pirmā darbgrāmata un kura - otrā utt. Lai pārliecinātos, jums būs jāpalaiž kods, kā parādīts iepriekš, vai kaut kas līdzīgs, lai atvērtu darbgrāmatu cilpu un zināt to indeksa numuru.

Excel vispirms atver atvērto darbgrāmatu, lai indeksa numurs būtu 1, bet nākamajā - kā 2 un tā tālāk.

Neskatoties uz šo trūkumu, indeksa numuru izmantošana var būt noderīga. Piemēram, ja vēlaties apskatīt visas atvērtās darbgrāmatas un saglabāt visas, varat izmantot indeksa numurus. Tā kā šajā gadījumā vēlaties, lai tas notiktu ar visām darbgrāmatām, jūs neuztraucaties par to individuālajiem indeksa numuriem.

Zemāk esošais kods pārvietotos pa visām atvērtajām darbgrāmatām un aizvērtu visas, izņemot darbgrāmatu, kurai ir šis VBA kods.

Sub CloseWorkbooks () Dim WbCount As Integer WbCount = darbgrāmatas. Skaitīt i = WbCount līdz 1. solim -1 Ja darbgrāmatas (i). Nosaukums ThisWorkbook.Name, tad darbgrāmatas (i). Aizveriet beigas, ja nākamā i End sub

Iepriekš minētais kods saskaita atvērto darbgrāmatu skaitu un pēc tam iet cauri visām darbgrāmatām, izmantojot cilpu Katrai.

Tas izmanto IF nosacījumu, lai pārbaudītu, vai darbgrāmatas nosaukums ir tāds pats kā darbgrāmatai, kurā tiek palaists kods.

Ja tā nav atbilstība, tā aizver darbgrāmatu un pāriet uz nākamo.

Ņemiet vērā, ka mēs esam palaiduši ciklu no WbCount uz 1 ar soli -1. Tas tiek darīts tāpat kā ar katru cilpu, atvērto darbgrāmatu skaits samazinās.

Šī darba grāmata ir detalizēti aplūkota turpmākajā sadaļā.

ActiveWorkbook izmantošana

ActiveWorkbook, kā norāda nosaukums, attiecas uz darbgrāmatu, kas ir aktīva.

Zemāk esošais kods parādīs aktīvās darbgrāmatas nosaukumu.

Sub ActiveWorkbookName () MsgBox ActiveWorkbook.Name Beigu apakš

Ja izmantojat VBA, lai aktivizētu citu darbgrāmatu, pēc tam VBA ActiveWorkbook daļa sāks atsaukties uz aktivizēto darbgrāmatu.

Šeit ir piemērs.

Ja jums ir aktīva darbgrāmata un ievietojat tajā šādu kodu un palaižat to, vispirms tiks parādīts tās darbgrāmatas nosaukums, kurā ir kods, un pēc tam piemēru Exx.xlsx nosaukums (kuru aktivizē kods).

Sub ActiveWorkbookName () MsgBox ActiveWorkbook.Name darbgrāmatas ("Examples.xlsx"). Aktivizējiet MsgBox ActiveWorkbook.Name End Sub

Ņemiet vērā, ka, izveidojot jaunu darbgrāmatu, izmantojot VBA, šī jaunizveidotā darbgrāmata automātiski kļūst par aktīvo darbgrāmatu.

Izmantojot šo darba grāmatu

Šī darba grāmata attiecas uz darbgrāmatu, kurā tiek izpildīts kods.

Katrā darbgrāmatā būtu iekļauts ThisWorkbook objekts (redzams Project Explorer).

Šajā darbgrāmatā var glabāt parastos makro (līdzīgi tiem, kurus mēs pievienojam moduļos), kā arī notikumu procedūras. Notikuma procedūra tiek aktivizēta, pamatojoties uz notikumu, piemēram, veicot dubultklikšķi uz šūnas vai saglabājot darbgrāmatu vai aktivizējot darblapu.

Jebkura notikumu procedūra, ko saglabājat šajā “šajā darba grāmatā”, būtu pieejama visā darbgrāmatā, salīdzinot ar lapas līmeņa notikumiem, kas ir ierobežoti tikai ar konkrētām lapām.

Piemēram, ja Project Explorer veicat dubultklikšķi uz objekta ThisWorkbook un tajā nokopējat zemāk redzamo kodu, tas parādīs šūnas adresi ikreiz, kad veicat dubultklikšķi uz jebkuras visas darbgrāmatas šūnas.

Private Sub Workbook_SheetBeforeDoubleClick (ByVal Sh kā objekts, ByVal Target kā diapazons, Atcelt kā Būla) MsgBox Target. Adreses beigu apakšdaļa

Lai gan šī darbgrāmatas galvenā loma ir notikumu procedūras saglabāšana, varat to izmantot arī, lai atsauktos uz darbgrāmatu, kurā tiek izpildīts kods.

Zemāk esošais kods atgriež darbgrāmatas nosaukumu, kurā kods tiek izpildīts.

Sub ThisWorkbookName () MsgBox ThisWorkbook.Name End Sub

Šīs darba grāmatas (salīdzinot ar ActiveWorkbook) priekšrocība ir tā, ka tā visos gadījumos atsaucās uz to pašu darbgrāmatu (to, kurā ir kods). Tātad, ja jaunas darbgrāmatas pievienošanai izmantojat VBA kodu, ActiveWorkbook grāmata mainīsies, taču šī darba grāmata joprojām atsaucas uz to, kurai ir kods.

Jauna darbgrāmatas objekta izveide

Šis kods izveidos jaunu darbgrāmatu.

Sub CreateNewWorkbook () darbgrāmatas. Pievienot beigu apakš

Pievienojot jaunu darbgrāmatu, tā kļūst par aktīvo darbgrāmatu.

Šis kods pievienos jaunu darbgrāmatu un pēc tam parādīs šīs darbgrāmatas nosaukumu (kas būtu noklusējuma grāmatas1 tipa nosaukums).

Sub CreateNewWorkbook () darbgrāmatas. Pievienot MsgBox ActiveWorkbook. Nosaukums End Sub

Atveriet darbgrāmatu, izmantojot VBA

Varat izmantot VBA, lai atvērtu noteiktu darbgrāmatu, ja zināt darbgrāmatas faila ceļu.

Zemāk esošais kods atvērs darbgrāmatu - Examples.xlsx, kas atrodas manas sistēmas mapē Dokumenti.

Apakš OpenWorkbook () darbgrāmatas. Atvērt ("C: \ Users \ sumit \ Documents \ Examples.xlsx") beigu apakšdaļa

Ja fails pastāv noklusējuma mapē, kas ir mape, kurā VBA pēc noklusējuma saglabā jaunus failus, varat vienkārši norādīt darbgrāmatas nosaukumu - bez visa ceļa.

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

Ja darbgrāmata, kuru mēģināt atvērt, nepastāv, tiks parādīta kļūda.

Lai izvairītos no šīs kļūdas, varat kodam pievienot dažas rindiņas, lai vispirms pārbaudītu, vai fails pastāv vai ne, un, ja tāds pastāv, tad mēģiniet to atvērt.

Zemāk esošais kods pārbaudītu faila atrašanās vietu, un, ja tas neeksistē, tas parādīs pielāgotu ziņojumu (nevis kļūdas ziņojumu):

Sub OpenWorkbook () Ja Dir ("C: \ Users \ sumit \ Documents \ Examples.xlsx") "" Tad Workbooks.Open ("C: \ Users \ sumit \ Documents \ Examples.xlsx") Cits MsgBox "Fails nav '' nepastāv "Beigt, ja beigas Sub

Varat arī izmantot dialoglodziņu Atvērt, lai atlasītu failu, kuru vēlaties atvērt.

Sub OpenWorkbook () par kļūdu Atsākt nākamo Dim FilePath kā ​​virkni FilePath = Application.GetOpenFilename Workbooks. Open (FilePath) End Sub

Iepriekš minētais kods atver dialoglodziņu Atvērt. Atlasot failu, kuru vēlaties atvērt, tas piešķir faila ceļu mainīgajam FilePath. Darbgrāmatas. Atvērtā pēc tam izmanto faila ceļu, lai atvērtu failu.

Ja lietotājs neatver failu un noklikšķina uz pogas Atcelt, FilePath kļūst nepatiess. Lai šajā gadījumā izvairītos no kļūdas, mēs esam izmantojuši paziņojumu “Par kļūdu atsākt nākamo”.

Saistīts: Uzziniet visu par kļūdu apstrādi programmā Excel VBA

Darbgrāmatas saglabāšana

Lai saglabātu aktīvo darbgrāmatu, izmantojiet tālāk norādīto kodu.

Sub SaveWorkbook () ActiveWorkbook.Save End Sub

Šis kods darbojas darbgrāmatām, kas jau ir saglabātas iepriekš. Turklāt, tā kā darbgrāmatā ir iekļauts iepriekš minētais makro, ja tas nav saglabāts kā .xlsm (vai .xls) fails, makro pazaudēsit, atverot to nākamreiz.

Ja darbgrāmatu saglabājat pirmo reizi, tā parādīs uzvedni, kā parādīts zemāk:

Saglabājot pirmo reizi, labāk ir izmantot opciju “Saglabāt”.

Zemāk esošais kods saglabātu aktīvo darbgrāmatu kā .xlsm failu noklusējuma vietā (kas ir dokumentu mape manā sistēmā).

Sub SaveWorkbook () ActiveWorkbook.SaveAs Faila nosaukums: = "Test.xlsm", FileFormat: = xlOpenXMLWorkbookMacroEnabled End Sub

Ja vēlaties, lai fails tiktu saglabāts noteiktā vietā, tas ir jānorāda faila nosaukuma vērtībā. Zemāk esošais kods saglabā failu manā darbvirsmā.

Sub SaveWorkbook () ActiveWorkbook.SaveAs Faila nosaukums: = "C: \ Users \ sumit \ Desktop \ Test.xlsm", FileFormat: = xlOpenXMLWorkbookMacroEnabled End Sub

Ja vēlaties, lai lietotājs saņemtu iespēju izvēlēties faila saglabāšanas vietu, varat izmantot dialoglodziņu Saglabāt. Zemāk redzamais kods parāda dialoglodziņu Saglabāt un ļauj lietotājam izvēlēties vietu, kur fails jāsaglabā.

Sub SaveWorkbook () Dim FilePath kā ​​virkne FilePath = Application.GetSaveAsFilename ActiveWorkbook.SaveAs Faila nosaukums: = FilePath & ".xlsm", FileFormat: = xlOpenXMLWorkbookMacroEnabled End Sub

Ņemiet vērā, ka tā vietā, lai izmantotu FileFormat: = xlOpenXMLWorkbookMacroEnabled, varat izmantot arī FileFormat: = 52, kur 52 ir kods xlOpenXMLWorkbookMacroEnabled.

Visu atvērto darbgrāmatu saglabāšana

Ja jums ir atvērtas vairākas darbgrāmatas un vēlaties saglabāt visas darbgrāmatas, varat izmantot tālāk norādīto kodu.

Sub SaveAllWorkbooks () Dim wb kā darbgrāmata katrai wb darbgrāmatās wb. Saglabāt nākamo wb End Sub

Iepriekš minētais saglabā visas darbgrāmatas, ieskaitot tās, kuras nekad nav saglabātas. Darbgrāmatas, kas iepriekš nebija saglabātas, tiks saglabātas noklusējuma vietā.

Ja vēlaties saglabāt tikai tās iepriekš saglabātās darbgrāmatas, varat izmantot tālāk norādīto kodu.

Sub SaveAllWorkbooks () Dim wb kā darbgrāmata katrai wb darbgrāmatās Ja wb.Path "" Tad wb.Save End if Next wb End Sub

Visu darbgrāmatu saglabāšana un aizvēršana

Ja vēlaties aizvērt visas darbgrāmatas, izņemot darbgrāmatu, kurā ir pašreizējais kods, varat izmantot tālāk norādīto kodu.

Sub CloseandSaveWorkbooks () Dim wb kā darbgrāmata katrai wb darbgrāmatās Ja wb.Nosaukums Šī darba grāmata.Nosaukums pēc tam wb.Close SaveChanges: = Patiess beigas, ja nākamais wb End Sub

Iepriekš minētais kods aizver visas darbgrāmatas (izņemot darbgrāmatu, kurai ir kods - ThisWorkbook). Gadījumā, ja šajās darbgrāmatās ir izmaiņas, izmaiņas tiks saglabātas. Ja ir saglabāta darbgrāmata, tajā tiks parādīts dialoglodziņš Saglabāt kā.

Saglabājiet darbgrāmatas kopiju (ar laika zīmogu)

Strādājot ar sarežģītiem datiem un informācijas paneli Excel darbgrāmatās, es bieži izveidoju dažādas savu darbgrāmatu versijas. Tas ir noderīgi, ja kaut kas noiet greizi ar manu pašreizējo darbgrāmatu. Es vismaz gribētu, lai tās kopija tiktu saglabāta ar citu nosaukumu (un es zaudētu tikai darbu, ko veicu pēc kopijas izveides).

Šeit ir VBA kods, kas izveidos jūsu darbgrāmatas kopiju un saglabās to norādītajā vietā.

Sub CreateaCopyofWorkbook () ThisWorkbook.SaveCopyAs Faila nosaukums: = "C: \ Users \ sumit \ Desktop \ BackupCopy.xlsm" beigas

Iepriekš minētais kods saglabātu jūsu darbgrāmatas kopiju katru reizi, kad palaižat šo makro.

Lai gan tas darbojas lieliski, es justos ērtāk, ja, palaižot šo kodu, tiktu saglabātas dažādas kopijas. Tas ir svarīgi tāpēc, ka, ja es nejauši pieļauju kļūdu un palaidu šo makro, tas ietaupīs darbu ar kļūdām. Un man nebūtu piekļuves darbam, pirms kļūdījos.

Lai risinātu šādas situācijas, varat izmantot tālāk norādīto kodu, kas katru reizi, kad to saglabājat, saglabā jaunu darba kopiju. Tas arī pievieno datumu un laika zīmogu kā daļu no darbgrāmatas nosaukuma. Tas var palīdzēt izsekot jūsu pieļautajām kļūdām, jo ​​nekad nepazaudējat nevienu no iepriekš izveidotajiem dublējumiem.

Privāta apakšdarbgrāmata_BeforeSave (ByVal SaveAsUI kā Būla, Atcelt kā Būla) ThisWorkbook.SaveCopyAs Faila nosaukums: = "C: \ Users \ sumit \ Desktop \ BackupCopy" & Format (Tagad (), "dd-mm-yy-hh-mm-ss -AMPM ") &" .xlsm "End Sub

Iepriekš minētais kods izveidos kopiju katru reizi, kad palaidīsit šo makro, un darbgrāmatas nosaukumam pievienos datuma/laika zīmogu.

Katrai darblapai izveidojiet jaunu darbgrāmatu

Dažos gadījumos jums var būt darbgrāmata, kurā ir vairākas darblapas, un jūs vēlaties izveidot darbgrāmatu katrai darblapai.

Tas varētu būt gadījumā, ja mēneša/ceturkšņa pārskati ir vienā darbgrāmatā un vēlaties tos sadalīt vienā darbgrāmatā katrai darblapai.

Vai arī, ja jums ir nodaļas gudri ziņojumi un vēlaties tos sadalīt atsevišķās darbgrāmatās, lai šīs atsevišķās darbgrāmatas varētu nosūtīt nodaļu vadītājiem.

Šeit ir kods, kas katrai darblapai izveidos darbgrāmatu, piešķirs tai tādu pašu nosaukumu kā darblapai un saglabās to norādītajā mapē.

Sub CreateWorkbookforWorksheets () Dim ws kā darblapa Dim wb kā darbgrāmata katram ws šajā darbagrāmatā. Darblapu kopa wb = Workbooks.Add ws.Copy Before: = wb.Sheets (1) Application.DisplayAlerts = False wb.Sheets (2). Dzēst Application.DisplayAlerts = Patiesa wb.SaveAs "C: \ Users \ sumit \ Desktop \ Test \" & ws.Name & ".xlsx" wb.Slēgt nākamo ws End Sub

Iepriekš minētajā kodā mēs esam izmantojuši divus mainīgos “ws” un “wb”.

Kods iet caur katru darblapu (izmantojot cilpu Katram nākamajam) un izveido tai darbgrāmatu. Tas arī izmanto darblapas objekta kopēšanas metodi, lai izveidotu darblapas kopiju jaunajā darbgrāmatā.

Ņemiet vērā, ka esmu izmantojis paziņojumu SET, lai piešķirtu mainīgo “wb” jebkurai jaunai darbgrāmatai, kas izveidota ar kodu.

Šo metodi varat izmantot, lai mainīgajam piešķirtu darbgrāmatas objektu. Tas ir aplūkots nākamajā sadaļā.

Piešķirt darbgrāmatas objektu mainīgajam

Programmā VBA mainīgajam varat piešķirt objektu un pēc tam izmantot mainīgo, lai atsauktos uz šo objektu.

Piemēram, zemāk esošajā kodā es izmantoju VBA, lai pievienotu jaunu darbgrāmatu un pēc tam piešķirtu šo darbgrāmatu mainīgajam wb. Lai to izdarītu, man jāizmanto SET paziņojums.

Kad esmu piešķīris darbgrāmatu mainīgajam, visi darbgrāmatas rekvizīti ir pieejami arī mainīgajam.

Sub AssigntoVariable () Dim wb kā darbgrāmatas kopa wb = Workbooks.Add wb.SaveAs Faila nosaukums: = "C: \ Users \ sumit \ Desktop \ Examples.xlsx" End Sub

Ņemiet vērā, ka pirmais koda solis ir deklarēt “wb” kā darbgrāmatas tipa mainīgo. Tas norāda VBA, ka šis mainīgais var saturēt darbgrāmatas objektu.

Nākamais paziņojums izmanto SET, lai piešķirtu mainīgo jaunajai darbgrāmatai, kuru pievienojam. Kad šis uzdevums ir izdarīts, mēs varam izmantot mainīgo wb, lai saglabātu darbgrāmatu (vai darītu kaut ko citu ar to).

Atvērto darbgrāmatu apskate

Mēs jau esam redzējuši dažus kodu piemērus, kuros kodā tika izmantota cilpa.

Šajā sadaļā es izskaidrošu dažādus veidus, kā atvērtās darbgrāmatas, izmantojot VBA.

Pieņemsim, ka vēlaties saglabāt un aizvērt visas atvērtās darbgrāmatas, izņemot to, kurā ir kods, tad varat izmantot tālāk norādīto kodu.

Sub CloseandSaveWorkbooks () Dim wb kā darbgrāmata katrai wb darbgrāmatās Ja wb.Nosaukums Šī darbagrāmata.Nosaukums pēc tam wb.Close SaveChanges: = Patiess beigas, ja nākamais wb End Sub

Iepriekš minētais kods izmanto cilpu Par katru, lai izietu cauri katrai darbgrāmatu kolekcijai. Lai to izdarītu, mums vispirms ir jādeklarē “wb” kā darbgrāmatas tipa mainīgais.

Katrā cilpas ciklā tiek analizēts katras darbgrāmatas nosaukums, un, ja tas neatbilst darbgrāmatas nosaukumam, kurā ir kods, tā tiek aizvērta pēc satura saglabāšanas.

To pašu var panākt arī ar citu cilpu, kā parādīts zemāk:

Sub CloseWorkbooks () Dim WbCount As Integer WbCount = darbgrāmatas. Skaitīt i = WbCount līdz 1. solim -1, ja darbgrāmatas (i). Nosaukums ThisWorkbook.Name Tad darbgrāmatas (i). Aizvērt SaveChanges: = Patiess beigas, ja nākamā i End Sub

Iepriekš minētais kods izmanto cilni Tālāk, lai aizvērtu visas darbgrāmatas, izņemot to, kurā ir kods. Šajā gadījumā mums nav jādeklarē darbgrāmatas mainīgais, bet gan jāskaita kopējais atvērto darbgrāmatu skaits. Kad mēs esam saskaitījuši, mēs izmantojam cilni Nākamais, lai apskatītu katru darbgrāmatu. Arī šajā gadījumā mēs izmantojam indeksa numuru, lai atsauktos uz darbgrāmatām.

Ņemiet vērā, ka iepriekš minētajā kodā mēs veicam pāreju no WbCount uz 1 ar 1. darbību. Tas ir vajadzīgs, jo ar katru cilpu darbgrāmata tiek aizvērta un darbgrāmatu skaits tiek samazināts par 1.

Kļūda, strādājot ar darbgrāmatas objektu (izpildlaika kļūda “9”)

Viena no visbiežāk sastopamajām kļūdām, kas var rasties, strādājot ar darbgrāmatām, ir - izpildlaika kļūda “9” - apakšindekss ir ārpus diapazona.

Parasti VBA kļūdas nav ļoti informatīvas un bieži vien ļauj jums izdomāt, kas notika nepareizi.

Šeit ir daži iespējamie iemesli, kas var izraisīt šo kļūdu:

  • Darbgrāmata, kurai mēģināt piekļūt, nepastāv. Piemēram, ja es mēģinu piekļūt piektajai darbgrāmatai, izmantojot darbgrāmatas (5), un ir atvērtas tikai 4 darbgrāmatas, es saņemšu šo kļūdu.
  • Ja izmantojat nepareizu nosaukumu, lai atsauktos uz darbgrāmatu. Piemēram, ja jūsu darbgrāmatas nosaukums ir Examples.xlsx un jūs izmantojat Example.xlsx. tad tas parādīs šo kļūdu.
  • Ja neesat saglabājis darbgrāmatu un izmantojat paplašinājumu, tiek parādīta šī kļūda. Piemēram, ja jūsu darbgrāmatas nosaukums ir Book1 un jūs izmantojat nosaukumu Book1.xlsx, to nesaglabājot, tiks parādīta šī kļūda.
  • Darbgrāmata, kurai mēģināt piekļūt, ir aizvērta.

Iegūstiet visu atvērto darbgrāmatu sarakstu

Ja vēlaties saņemt visu pašreizējās darbgrāmatas (darbgrāmatas, kurā izmantojat kodu) atvērto darbgrāmatu sarakstu, varat izmantot tālāk norādīto kodu.

Sub GetWorkbookNames () Dim wbcount As Integer wbcount = Workbooks.Count ThisWorkbook.Worksheets.Add ActiveSheet.Range ("A1"). Activate For i = 1 To wbcount Range ("A1"). Offset (i - 1, 0). Vērtība = darbgrāmatas (i). Nosaukums Tālāk i Beigu apakš

Iepriekš minētais kods pievieno jaunu darblapu un pēc tam uzskaita visu atvērto darbgrāmatu nosaukumu.

Ja vēlaties iegūt arī viņu faila ceļu, varat izmantot tālāk norādīto kodu.

Sub GetWorkbookNames () Dim wbcount As Integer wbcount = Workbooks.Count ThisWorkbook.Worksheets.Add ActiveSheet.Range ("A1"). Activate For i = 1 To wbcount Range ("A1"). Offset (i - 1, 0). Vērtība = darbgrāmatas (i). Ceļš & "\" & darbgrāmatas (i) .Nosaukums Tālāk i Beigu apakš

Atveriet norādīto darbgrāmatu, veicot dubultklikšķi uz šūnas

Ja jums ir Excel darbgrāmatu failu ceļu saraksts, varat izmantot zemāk esošo kodu, lai vienkārši veiciet dubultklikšķi uz šūnas ar faila ceļu, un tā atvērs šo darbgrāmatu.

Privāta apakšdarbgrāmata_SheetBeforeDoubleClick (ByVal Sh kā objekts, ByVal mērķis kā diapazons, Atcelt kā Būla) Darbgrāmatas. Atvērt Target.Value End Sub

Šis kods tiks ievietots šī darba grāmatas koda logā.

Lai to izdarītu:

  • Veiciet dubultklikšķi uz objekta ThisWorkbook projekta izpētē. Ņemiet vērā, ka objektam ThisWorkbook jābūt darbgrāmatā, kurā vēlaties izmantot šo funkcionalitāti.
  • Kopējiet un ielīmējiet iepriekš minēto kodu.

Tagad, ja jums ir precīzs atvērto failu ceļš, varat to izdarīt, vienkārši veicot dubultklikšķi uz faila ceļa, un VBA uzreiz atvērs šo darbgrāmatu.

Kur ievietot VBA kodu

Vai vēlaties uzzināt, kur jūsu Excel darbgrāmatā atrodas VBA kods?

Programmai Excel ir VBA aizmugure, ko sauc par VBA redaktoru. Jums ir nepieciešams kopēt un ielīmēt kodu VB redaktora moduļa koda logā.

Lai to izdarītu, veiciet tālāk norādītās darbības.

  1. Dodieties uz cilni Izstrādātājs.
  2. Noklikšķiniet uz opcijas Visual Basic. Tas atvērs VB redaktoru aizmugurē.
  3. VB redaktora Project Explorer rūtī ar peles labo pogu noklikšķiniet uz jebkura darbgrāmatas objekta, kurā vēlaties ievietot kodu. Ja neredzat Project Explorer, dodieties uz cilni Skats un noklikšķiniet uz Project Explorer.
  4. Dodieties uz Ievietot un noklikšķiniet uz moduļa. Tādējādi jūsu darbgrāmatai tiks ievietots moduļa objekts.
  5. Kopējiet un ielīmējiet kodu moduļa logā.

Jums varētu patikt arī šādas Excel VBA apmācības:

  • Kā ierakstīt makro programmā Excel.
  • Lietotāja definētas funkcijas izveide programmā Excel.
  • Kā izveidot un lietot pievienojumprogrammu programmā Excel.
  • Kā atjaunot makro, ievietojot to personiskajā makro darbgrāmatā.
  • Iegūstiet failu nosaukumu sarakstu no mapes programmā Excel (ar un bez VBA).
  • Funkcijas Excel VBA InStr lietošana (ar praktiskiem PIEMĒRIEM).
  • Kā kārtot datus programmā Excel, izmantojot VBA (Soli pa solim).

Jums palīdzēs attīstību vietā, daloties lapu ar draugiem

wave wave wave wave wave