Aizpildiet ListBox vadīklu ar vērtībām no slēgtās darbgrāmatas, izmantojot Microsoft Excel VBA

Anonim

Šajā rakstā mēs izmantosim datus no slēgtās darbgrāmatas uz saraksta lodziņu lietotāja formā, izmantojot VBA.

Neapstrādāti dati šajā piemērā atrodas diapazonā A2: B10 darbgrāmatā “23SampleData.xls”, kas ir ievietota faila ceļā “D: \ Excelforum \ ExcelForum office \ excel tip old code \ Shared Macro \ 23 \”.

Mēs esam izveidojuši divas komandu pogas galvenajā darblapā divu dažādu lietotāja formu palaišanai. Katra komandu poga ir saistīta ar dažādām lietotāja formām.

Loģisks skaidrojums

Šajā piemērā tiek izmantoti divi dažādi veidi, kā iegūt datus no slēgtās darbgrāmatas. Šie ir:-

  1. Atveriet slēgto darbgrāmatu un iegūstiet datus

  2. Izmantojot ADODB savienojumu

Atveriet slēgto darbgrāmatu un iegūstiet datus

Ir iespējams iestatīt ListBox vadīklas rekvizītu RowSource, lai iegūtu datus no citas darbgrāmatas, piešķirot rekvizītam RowSource vērtību šādi:

“[Filename.xls] Sheet1?! $ B $ 1: $ B $ 15

ListBox Control parādīs vērtības tikai tad, ja ir atvērta otra darbgrāmata.

Tātad, lai ielādētu datus no slēgtās darbgrāmatas, mēs izveidosim makro, lai atvērtu otru darbgrāmatu, lietotājam to nemanot un neiekasējot datus no darbgrāmatas, lai pievienotu vienumus saraksta lodziņā un aizvērtu darbgrāmatu.

Noklikšķinot uz pogas “Atlasīt”, tiks aktivizēta lietotāja veidlapa “UserForm1”. Lietotāja veidlapas inicializācijas notikums tiek izmantots vienumu pievienošanai saraksta lodziņam. Šis notikums vispirms atver slēgto darbgrāmatu un pēc tam piešķir vērtību diapazonā variantam “ListItems”. Pēc vērtības piešķiršanas darbgrāmata tiek aizvērta un saraksti tiek pievienoti vienumiem.

Saraksta lodziņu izmanto, lai atlasītu nosaukumu no esošajām saraksta vērtībām. Nospiežot pogu “OK”, tiks parādīts izvēlētais nosaukums.

Izmantojot ADODB savienojumu

ActiveX datu objekti (ADO) ir augsta līmeņa, viegli lietojams interfeiss OLE DB savienojumam. Tā ir programmēšanas saskarne, lai piekļūtu un apstrādātu datus datu bāzē.

Lai izveidotu ADODB savienojumu, mums projektam būs jāpievieno ADO bibliotēka.

Lai pievienotu atsauci, izvēlieties izvēlnē Rīki> Atsauce.

Noklikšķinot uz pogas “ADODB savienojums” darblapā, tiks aktivizēta lietotāja veidlapa “UFADODB”. Šīs lietotāja veidlapas inicializācijas gadījumā mēs esam izmantojuši ADODB savienojumu, lai izgūtu datus no slēgtās darbgrāmatas. Mēs esam izveidojuši pielāgotu lietotāja definētu funkciju (UDF) “ReadDataFromWorkbook”, lai izveidotu savienojumu un ielādētu datus no slēgtās darbgrāmatas uz masīvu.

Mēs esam izmantojuši citu UDF “FillListBox”, lai lietotāja veidlapas inicializācijas laikā pievienotu vienumus saraksta lodziņam. Saraksta lodziņā dati tiks parādīti divās kolonnās, vienā slejā ir vārds, bet otrajā slejā ir vecums.

Nospiežot pogu “OK” pēc vienuma izvēles lodziņā Saraksts, tiks parādīts informācijas ziņojums par izvēlēto vienumu.

Lūdzu, sekojiet tālāk norādītajam kodam

 Opcija Skaidra apakšdarbība () UserForm1.Show End Sub Sub ADODBrunning () UFADODB.Show End Sub ' vērtība saraksta lodziņā uz mainīgo nosaukumu1 un vecumu Izkraut lietotāja veidlapu Izkraut mani 'Tiek parādīta izvade MsgBox "Jūs esat izvēlējies" & name1 & ". Viņa vecums ir" & age1 & "yrs." End Sub Private Sub UserForm_Initialize () 'Filling ListBox1, aizpildot datus no slēgtās darbgrāmatas Dim tArray As Variant' Zvanīšanas funkcija ReadDataFromWorkbook, lai iegūtu datus no noteiktā diapazona uz masīvu 'Mainīt ceļu atbilstoši jūsu prasībām,' Sample_data 'ir nosaukts kā noteikts diapazons tArray = ReadDataFromWorkbook ("D: \ Excelforum \ ExcelForum office \ excel tip old code \ Shared Macro \ 23 \ 23SampleData.xls", "Sample_Data") "Zvanīšanas funkcija FillListBox vienumu pievienošanai saraksta lodziņā" Piešķirt saraksta lodziņa objektu un masīvu kā parametru FillListBox Me .ListBox1, tArray 'Masīva mainīgo atbrīvošana un to elementiem izmantotās atmiņas sadalīšana. Dzēst tArray End Sub Private Sub FillListBox (lb kā MSForms.ListBox, RecordSetArray As Variant) 'aizpildīšanas saraksta lodziņā lb ar datiem no RecordSetArray Dim r cik ilgi, c tik ilgi ar lb .Clear' Vērtības piešķiršana sarakstlodziņam r = LBound (RecordSetArray , 2) uz UBound (RecordSetArray, 2) .AddItem For c = LBound (RecordSetArray, 1) uz UBound (RecordSetArray, 1). Saraksts (r, c) = RecordSetArray (c, r) Nākamais c Nākamais r 'Neviena elementa izvēle lodziņā Saraksts pēc noklusējuma .ListIndex = -1 Beigt ar beigu apakšfunkciju Privāta funkcija ReadDataFromWorkbook (SourceFile kā virkne, _ SourceRange kā virkne) Kā variants "nepieciešama atsauce uz Microsoft ActiveX datu objektu bibliotēku" (izvēlne Rīki> Atsauces VBE ) Dim dbConnection Kā ADODB.Connection, rs Kā ADODB.Recordset Dim dbConnectionString kā virkne 'Savienojuma virknes deklarēšana un draiveris prasa savienojuma izveidi dbConnectionString = "DRIVER = {Microsoft Excel draiveris (*.xls)}; ReadOnly = 1; DBQ = "& SourceFile" Jauna ADODB savienojuma izveide Iestatiet dbConnection = Jauns ADODB.Connection On Error GoTo InvalidInput 'Atveriet datu bāzes savienojumu dbConnection.Open dbConnectionString' Ierakstu kopas iegūšana no definēta nosaukta diapazona Set rs = dbConnection.Execute ("[" & SourceRange & "]") On Error GoTo 0 'Atgriež divus dimensiju masīvs ar visiem ierakstiem rs ReadDataFromWorkbook = rs.GetRows 'Aizveriet ierakstu kopu un datu bāzes savienojumu rs.Close dbConnection.Close Set rs = Nothing Set dbConnection = Nothing Exit Function' Code for kļūdas apstrāde InvalidInput: MsgBox "Avota fails vai avota diapazons nav derīgs! ", _ vbIzsaukums," Iegūt datus no slēgtās darbgrāmatas "Beigt funkciju" Pievienot zemāk esošo kodu lietotāja formā1 Opcija Skaidra privāta apakškomanda Uz ListBox1.ListCount - 1 Ja ListBox1.Selected (i) Tad name1 = ListBox1.Value Iziet Beigt Ja nākamais 'Izlādēt lietotāja formu Unload Me' Parādīt izvēlēto nosaukumu MsgBox "Jūs esat izvēlējies" & name1 & "." End Sub Private Sub UserForm_Initialize () Dim ListItems As Variant, i As Integer Dim SourceWB As Workbook 'Ekrāna atjauninājumu izslēgšana no lietojumprogrammas.ScreenUpdating = False With Me.ListBox1' Noņemiet esošos ierakstus no saraksta lodziņa. Notīrīt 'Atveriet avota darbgrāmatu kā ReadOnly Set SourceWB = Darbgrāmatas. Atvērt ) .Range ("A2: A10"). Vērtība 'Aizveriet avota darbgrāmatu, nesaglabājot izmaiņas SourceWB.Close False Set SourceWB = Nothing Application.ScreenUpdating = True' Vērtību konvertēšana vertikālā masīvā ListItems = Application.WorksheetFunction.Transpose (ListItems) Ja i = 1 uz UBound (ListItems) 'aizpildiet saraksta lodziņu .AddItem ListItems (i) Tālāk i' Pēc noklusējuma neatlasot nevienu vienumu, iestatiet 0, lai atlasītu pirmo vienumu .ListIndex = -1 Beigt ar beigu apakšdaļu 

Ja jums patika šis emuārs, kopīgojiet to ar saviem draugiem Facebook. Varat arī sekot mums Twitter un Facebook.

Mēs labprāt uzklausītu jūsu viedokli, dariet mums zināmu, kā mēs varam uzlabot savu darbu un padarīt to labāku jums. Rakstiet mums e -pasta vietnē