Naudodami „Microsoft Excel“ VBA užpildykite „ListBox“ valdiklį vertėmis iš uždarytos darbaknygės

Anonim

Šiame straipsnyje mes atsiųsime duomenis iš uždarytos darbaknygės į sąrašo lauką vartotojo formoje naudodami VBA.

Neapdoroti šio pavyzdžio duomenys yra darbaknygėje „23SampleData.xls“ esančiame diapazone A2: B10, kuris yra failo kelyje „D: \ Excelforum \ ExcelForum office \ excel tip old code \ Shared Macro \ 23 \“.

Pagrindiniame darbalapyje sukūrėme du komandų mygtukus, skirtus paleisti dvi skirtingas vartotojo formas. Kiekvienas komandos mygtukas yra susietas su skirtingomis vartotojo formomis.

Loginis paaiškinimas

Šiame pavyzdyje du skirtingi būdai gauti duomenis iš uždarytos darbaknygės. Šitie yra:-

  1. Atidarykite uždarą darbaknygę ir gaukite duomenis

  2. Naudojant ADODB ryšį

Atidarykite uždarą darbaknygę ir gaukite duomenis

Galima nustatyti „ListBox“ valdiklio ypatybę „RowSource“, kad būtų gauti duomenys iš kitos darbaknygės, priskiriant vertę ypatybei „RowSource“ taip:

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

„ListBox Control“ rodys reikšmes tik tada, kai atidaryta kita darbaknygė.

Taigi, norėdami gauti duomenis iš uždarytos darbaknygės, sukursime makrokomandą, kad atidarytume kitą darbaknygę, vartotojui to nepastebėjus, ir paimant duomenis iš darbaknygės, kad būtų galima pridėti elementų sąrašo laukelyje ir uždaryti darbaknygę.

Spustelėjus mygtuką „Pasirinkti“, bus suaktyvinta vartotojo forma „UserForm1“. Inicijuoti vartotojo formos įvykį naudojamas elementams įtraukti į sąrašo lauką. Šis įvykis pirmiausia atidaro uždarytą darbaknygę ir tada priskiria diapazono vertę variantui „ListItems“. Priskyrus vertę, darbo knyga uždaroma ir elementai įtraukiami į sąrašo lauką.

Sąrašo laukas naudojamas pavadinimui pasirinkti iš esamų sąrašo verčių. Paspaudus mygtuką „Gerai“, bus rodomas pasirinktas pavadinimas.

Naudojant ADODB ryšį

„ActiveX Data Objects“ (ADO) yra aukšto lygio, paprasta naudoti sąsaja, skirta OLE DB ryšiui. Tai programavimo sąsaja, skirta duomenų bazės duomenims pasiekti ir jais manipuliuoti.

Norėdami sukurti ADODB ryšį, prie projekto turėsime pridėti ADO biblioteką.

Norėdami pridėti nuorodą, pasirinkite meniu Įrankiai> Nuoroda.

Spustelėjus mygtuką „ADODB Connection“ darbalapyje, bus suaktyvinta „UFADODB“ vartotojo forma. Šios vartotojo formos inicijavimo atveju mes naudojome ADODB ryšį duomenims iš uždarytos darbaknygės gauti. Mes sukūrėme pasirinktinę vartotojo apibrėžtą funkciją (UDF) „ReadDataFromWorkbook“, kad užmegztume ryšį ir gautume duomenis iš uždarytos darbaknygės į masyvą.

Mes panaudojome kitą UDF „FillListBox“, norėdami įtraukti elementus į sąrašo lauką inicijuodami vartotojo formą. Sąrašo lauke duomenys bus rodomi dviejuose stulpeliuose, viename stulpelyje yra pavadinimas, o antrame - amžius.

Paspaudus mygtuką „Gerai“, pasirinkus elementą sąrašo laukelyje, bus parodytas informacinis pranešimas apie pasirinktą elementą.

Sekite toliau pateiktą kodą

 Parinktis Aiškiai paleisti () UserForm1.Show End Sub Sub ADODBrunning () UFADODB.Show End Sub 'Pridėti žemiau esantį kodą UFADODB vartotojo formoje Parinktis Explicit Private Sub CommandButton1_Click () Dim name1 As String Dim age1 As Integer Dim i As Integer' Priskirti pasirinktą reikšmė sąrašo lauke į kintamąjį pavadinimą1 ir amžių1 Jei i = 0 į ListBox1.ListCount - 1 Jei ListBox1.Selected (i) Tada pavadinimas1 = ListBox1.Value age1 = ListBox1.List (ListBox1.ListIndex, 1) Exit For End If Next ' Iškrauti vartotojo formą Išsikrauti 'Rodoma išvestis MsgBox "Pasirinkote" & name1 & ". Jo amžius yra" & age1 & "yrs." Pabaigos subprivatus subprofilis UserForm_Initialize () 'Užpildymas ListBox1 su duomenimis iš uždarytos darbaknygės Dim tArray As Variant' Skambinimo funkcija ReadDataFromWorkbook norint gauti duomenis iš nurodyto diapazono į masyvą 'Keisti kelią pagal savo reikalavimą, "Sample_data" yra pavadintas apibrėžtu diapazonu tArray = ReadDataFromWorkbook ("D: \ Excelforum \ ExcelForum office \ excel tip old code \ Shared Macro \ 23 \ 23SampleData.xls", "Sample_Data") "Skambinimo funkcija" FillListBox ", skirta elementams pridėti prie sąrašo laukelio .ListBox1, tArray 'Atleidžia masyvo kintamuosius ir išskiria jų elementams naudojamą atmintį. Erase tArray End Sub Private Sub FillListBox (lb As MSForms.ListBox, RecordSetArray As Variant) 'Užpildymo sąrašo langas lb su duomenimis iš RecordSetArray Dim r Kaip ilgai, c Kaip ilgai su lb .Clear' Vertės priskyrimas sąrašo laukui r = LBound (RecordSetArray , 2) į „UBound“ („RecordSetArray“, 2). „Adddtem“, skirtą c = LBound („RecordSetArray“, 1) į „UBound“ („RecordSetArray“, 1). Sąrašas (r, c) = „RecordSetArray“ (c, r) Kitas c Kitas r 'Nepasirinkus elemento laukelyje Sąrašas pagal numatytuosius nustatymus. ) Dim dbConnection Kaip ADODB.Connection, rs Kaip ADODB.Recordset Dim dbConnectionString As String 'Deklaravus ryšio eilutę ir tvarkyklę reikia užmegzti ryšį dbConnectionString = "DRIVER = {Microsoft Excel tvarkyklė (*.xls)}; ReadOnly = 1; DBQ = "& SourceFile" Naujo ADODB ryšio kūrimas Nustatykite dbConnection = Naujas ADODB.Connection On Error GoTo InvalidInput 'Atidarykite duomenų bazės ryšį dbConnection.Open dbConnectionString' Įrašų rinkinio gavimas iš apibrėžto pavadinto diapazono Set rs = dbConnection.Execute ("[" & SourceRange & "]") On Error GoTo 0 'Grąžina du matmenų masyvas su visais įrašais rs ReadDataFromWorkbook = rs.GetRows 'Uždarykite įrašų rinkinį ir duomenų bazės ryšį rs.Close dbConnection.Close Set rs = Nothing Set dbConnection = Nieko Išeiti iš funkcijos' Klaidos tvarkymo kodas InvalidInput: MsgBox "Šaltinio failas arba šaltinio diapazonas yra neteisingas! ", _ vbExclamation," Gauti duomenis iš uždarytos darbaknygės "Pabaigos funkcija" Pridėkite žemiau esantį kodą "UserForm1" Parinktis Aiškus privatus antrinis komandasButton1_Click () Dim vardas1 kaip eilutė Dim i Kaip sveikasis skaičius " Į ListBox1.ListCount - 1 Jei ListBox1.Selected (i) Tada name1 = ListBox1.Value Exit For End If Next 'Unload the userform Unload Me' Rodyti pasirinktą pavadinimą MsgBox "Pasirinkote" & name1 & "." Pabaiga Privatus subprofilis VartotojasForm_Initialize () Dim ListItems As Variant, i As Integer Dim SourceWB As Workbook 'Ekrano atnaujinimų išjungimas Application.ScreenUpdating = False With Me.ListBox1' Pašalinkite esamus įrašus iš sąrašo. Išvalyti SourceWB = Darbaknygės.Open ("D: \ Excelforum \ ExcelForum office \ excel tip old code \ Shared Macro \ 23 \ 23SampleData.xls", _ False, True) 'Gaukite norimų verčių diapazoną ListItems = SourceWB.Worksheets (1 ) .Range ("A2: A10"). Reikšmė 'Uždarykite šaltinio darbaknygę neišsaugodami pakeitimų SourceWB.Close False Set SourceWB = Nothing Application.ScreenUpdating = True' Konvertuokite vertes į vertikalųjį masyvą Jei i = 1 „UBound“ („ListItems“) „užpildykite sąrašo laukelį. 

Jei jums patiko šis tinklaraštis, pasidalykite juo su draugais „Facebook“. Be to, mus galite sekti „Twitter“ ir „Facebook“.

Mes norėtume išgirsti jūsų nuomonę, praneškite mums, kaip galime pagerinti savo darbą ir padaryti jį geresnį. Rašykite mums el