Ispunite ListBox kontrolu vrijednostima iz zatvorene radne knjige pomoću VBA u programu Microsoft Excel

Anonim

U ovom ćemo članku dohvatiti podatke iz zatvorene radne knjige u okvir Popis u korisničkom obliku pomoću VBA.

Sirovi podaci za ovaj primjer nalaze se u rasponu A2: B10 u radnoj knjizi "23SampleData.xls", koji se nalazi u putanji datoteke "D: \ Excelforum \ ExcelForum office \ excel tip stari kôd \ Dijeljena makro \ 23 \".

Na glavnom smo radnom listu stvorili dva naredbena gumba za pokretanje dva različita korisnička oblika. Svaki naredbeni gumb povezan je s različitim korisničkim oblicima.

Logično objašnjenje

U ovom se primjeru dva različita načina koriste za dohvaćanje podataka iz zatvorene radne knjige. Ovi su:-

  1. Otvorite zatvorenu radnu knjigu i uzmite podatke

  2. Korištenje ADODB veze

Otvorite zatvorenu radnu knjigu i uzmite podatke

Moguće je postaviti svojstvo RowSource kontrole ListBox za dobivanje podataka iz druge radne knjige dodjeljivanjem vrijednosti svojstvu RowSource na sljedeći način:

‘[Naziv datoteke.xls] List 1?! $ B $ 1: $ B $ 15

ListBox Control prikazat će vrijednosti samo ako je druga radna knjiga otvorena.

Dakle, za dohvaćanje podataka iz zatvorene radne knjige, stvorit ćemo makro za otvaranje druge radne knjige, a da to korisnik ne primijeti i dohvaćanje podataka iz radne knjige za dodavanje stavki u okvir s popisom i zatvaranje radne knjige.

Klikom na gumb "Odaberi" aktivirat će se korisnički obrazac "Korisnički obrazac1". Događaj Initialize korisničkog oblika koristi se za dodavanje stavki u okvir s popisom. Ovaj događaj prvo otvara zatvorenu radnu knjigu, a zatim vrijednost u rasponu dodjeljuje varijanti "ListItems". Nakon dodjeljivanja vrijednosti, radna knjiga se zatvara i stavke se dodaju u okvir s popisom.

Okvir s popisom koristi se za odabir imena iz postojećih vrijednosti popisa. Pritiskom na tipku “OK” prikazat će se odabrani naziv.

Korištenje ADODB veze

ActiveX Data Objects (ADO) je sučelje na visokoj razini, jednostavno za korištenje za OLE DB vezu. To je programsko sučelje za pristup i rukovanje podacima u bazi podataka.

Da bismo stvorili ADODB vezu, morat ćemo dodati ADO knjižnicu u projekt.

Da biste dodali referencu, odaberite iz izbornika Alati> Referenca.

Klikom na gumb "ADODB Connection" na radnom listu aktivirat će se korisnički oblik "UFADODB". U slučaju inicijalizacije ovog korisničkog oblika, koristili smo ADODB vezu za dohvaćanje podataka iz zatvorene radne knjige. Napravili smo prilagođenu Korisnički definiranu funkciju (UDF) “ReadDataFromWorkbook” za uspostavu veze i dohvaćanje podataka iz zatvorene radne knjige u niz.

Koristili smo drugi UDF „FillListBox“ za dodavanje stavki u okvir Popis tijekom inicijalizacije korisničkog oblika. Okvir s popisom prikazat će podatke u dva stupca, jedan stupac sadrži naziv, a drugi stupac sadrži dob.

Pritiskom na tipku “OK” nakon odabira stavke u okviru Popis prikazat će se informativna poruka o odabranoj stavci.

Molimo slijedite dolje za kôd

 Opcija Explicit Sub running () UserForm1.Show End Sub Sub ADODBrunning () UFADODB.Show End Sub 'Dodaj donji kod u UFADODB korisnički oblik Opcija Eksplicitna privatna podredba CommandButton1_Click () Dim name1 Kao String Dim age1 As Integer Dim i As Integer' Dodijelite odabrano vrijednost u okviru s popisom za varijablu name1 i age1 Za i = 0 Za ListBox1.ListCount - 1 Ako je ListBox1.Selected (i) Tada je name1 = ListBox1.Value age1 = ListBox1.List (ListBox1.ListIndex, 1) Izlaz za kraj ako je sljedeće ' Unload the userform Unload Me 'Prikaz izlaza MsgBox "Odabrali ste" & name1 & ". Njegova je dob" & age1 & "yrs." Završni pod -privatni pod -korisnički -korisnički -formatirani_inicijalizacijski () 'popunjavanje lista1 podacima iz zatvorene radne knjige zatamnjivanje polja kao varijanta' Pozivna funkcija ReadDataFromWorkbook za dobivanje podataka iz navedenog raspona u niz 'Promijenite putanju prema svojim zahtjevima, "Sample_data" se naziva definiranim rasponom tArray = ReadDataFromWorkbook ("D: \ Excelforum \ ExcelForum office \ excel tip stari kôd \ Dijeljena makro \ 23 \ 23SampleData.xls", "Sample_Data") 'Funkcija pozivanja FillListBox za dodavanje stavki u okvir s popisom' Dodijeli objekt okvira popisa i polje kao parametar FillListBox Me .ListBox1, tArray 'Oslobađanje varijabli niza i oslobađanje memorije koja se koristi za njihove elemente. Erase tArray End Sub Private Sub FillListBox (lb Kao MSForms.ListBox, RecordSetArray kao varijanta) 'Ispunjavanje okvira s popisom lb s podacima iz RecordSetArray Dim r As Long, c As Long With lb .Clear' Dodjeljivanje vrijednosti okviru s popisom za r = LBound (RecordSetArray , 2) U UBound (RecordSetArray, 2) .AddItem For c = LBound (RecordSetArray, 1) U UBound (RecordSetArray, 1) .List (r, c) = RecordSetArray (c, r) Sljedeće c Sljedeće r 'Odabir stavke u okviru Popis prema zadanim postavkama .ListIndex = -1 Završi s End Sub Privatna funkcija ReadDataFromWorkbook (SourceFile As String, _ SourceRange As String) As Variant 'zahtijeva referencu na knjižnicu Microsoft ActiveX Data Objects' (izbornik Alati> Reference u VBE -u ) Dim dbConnection Kao ADODB.Connection, rs Kao ADODB.Recordset Dim dbConnectionString As String 'Deklariranje niza veze i upravljačkog programa za uspostavu veze dbConnectionString = "DRIVER = {Microsoft Excel Driver (*.xls)}; ReadOnly = 1; DBQ = "& SourceFile 'Stvaranje nove ADODB veze Postavite dbConnection = Novi ADODB.Connection On Error GoTo InvalidInput 'Otvorite vezu s bazom podataka dbConnection.Open dbConnectionString' Dobivanje skupa zapisa iz definiranog imenovanog raspona Set rs = dbConnection.Execute ("[" & SourceRange & "]") On Error GoTo 0 'Vraća dva dimenzionalni niz sa svim zapisima u rs ReadDataFromWorkbook = rs.GetRows 'Zatvorite skup zapisa i vezu s bazom podataka rs.Zatvorite dbConnection.Close Set rs = Ništa nije postavljeno dbConnection = Ništa Izlazna funkcija' Kôd za rukovanje pogreškom InvalidInput: MsgBox "Izvorna datoteka ili izvorni raspon nije važeći! ", _ vbExclamation," Dobijte podatke iz zatvorene radne knjige "Kraj funkcije 'Dodajte donji kôd u UserForm1 Opcija Eksplicitna privatna podnaredba CommandButton1_Click () Dim name1 As String Dim i As Integer' Dodijelite odabranu vrijednost varijabli name1 Za i = 0 To ListBox1.ListCount - 1 If ListBox1.Selected (i) Then name1 = ListBox1.Value Exit For End If Next 'Unload the userform Unload Me' Prikažite odabrani naziv MsgBox "Izabrali ste" & name1 & "." Završetak pod -privatnog pod -korisničkog podforuma_inicijalizacije () prigušivanje stavki popisa kao varijante, i kao cijeli broj zatamnjenog izvoraWB Kao radna knjiga 'Isključivanje zaslona ažurira Application.ScreenUpdating = False With Me.ListBox1' Uklonite postojeće unose iz okvira s popisom. Obriši 'Otvorite izvornu radnu knjigu kao ReadOnly Set SourceWB = Radne knjige.Open ("D: \ Excelforum \ ExcelForum office \ excel tip stari kôd \ Dijeljena makro \ 23 \ 23SampleData.xls", _ Netačno, Tačno) 'Dobijte raspon vrijednosti koje želite ListItems = SourceWB.Worksheets (1 ) .Range ("A2: A10"). Vrijednost 'Zatvorite izvornu radnu knjigu bez spremanja promjena SourceWB.Zatvorite lažno postavljanje IzvorWB = Ništa Application.ScreenUpdating = True' Pretvorite vrijednosti u okomiti niz ListItems = Application.WorksheetFunction.Transpose (ListItems) Za i = 1 Za UBound (ListItems) 'Popunite okvir s popisom .AddItem ListItems (i) Sljedeće i' Odabirom nijedne stavke prema zadanim postavkama, postavite na 0 za odabir prve stavke. ListIndex = -1 End With End Sub 

Ako vam se dopao ovaj blog, podijelite ga sa svojim prijateljima na Facebooku. Također, možete nas pratiti na Twitteru i Facebooku.

Voljeli bismo vas čuti, javite nam kako možemo poboljšati svoj rad i učiniti ga boljim za vas. Pišite nam na web stranici e -pošte