Kezdőlap › Fórumok › Excel programozás › UserForm › Hozzászólás: UserForm
Na, egy kicsit körbejártam a problémát, mert valóban volt itt egy olyan gond, amivel még nem foglalkoztam Én sem. Ahogy a tanfolyamon is említettem, eddig élesben nem nagyon foglalkoztam userform-os alkalmazásokkal.
Volt két alap hiba. Az egyik, hogy miután bemásoltad a kódot a fórum weboldaláról, nem vetted észre, hogy a range(„adatok”) dupla idézőjelei nem egyenesek, hanem ferdék, azaz nem a VBA szintaxisának felelnek meg. Ezeket kézzel vagy cserével cserélni kell. Ezt valószínűleg a WP editor rontotta el.
A másik, amit Én is elmulasztottam kezelni, hogy ha választasz valamit a Combi panelben, akkor az szöveges lesz, de a Kód oszlopban számok vannak,ezért még egy Val függvényt be kell iktatni. Enélkül a Vlookup nem fog találni semmit, és hibával elszáll.
A lényegi problémát viszont nem ezek, hanem a következő okozta:
Miközben az Initialize rutin fut, és eléri a BoundColumn=1 sort, az kiváltja a Combobox1 Change eseményét. A Change-ben pedig van egy Vlookup, ami keresi a Combobox1.value értéket a tartomány első oszlopában. de mi van éppen a Combipanelben? Egy nagy semmi, mert még el sem értünk a "<válassz>"
stringet keresné. Nem találja, ezért hibát dob.
Megoldás
Van Combobox-nak egy ListIndex tulajdonsága, ami megmondja, hogy hányadik elemet választották. Nullától kezdődik a sorszámozása. Ha nem a listáról való a benne lévő aktuális tartalom, akkor pedig -1-et tartalmaz. na ezt kell figyelni a Change-ben.
Private Sub ComboBox1_Change()
If ComboBox1.ListIndex > -1 Then
TextBox1.Value = WorksheetFunction.VLookup(Val(ComboBox1.Value), Sheets(1).Range("adatok"), 2, 0)
TextBox2.Value = WorksheetFunction.VLookup(Val(ComboBox1.Value), Sheets(1).Range("adatok"), 3, 0)
End If
End Sub
Nézd meg, nálam működött.
Volt még kérdésed.
A Show metódus mielőtt megjeleníti az űrlapot, kiváltja az Initialize eseményt. ez gyárilag van így, pont azért, hogy a form egyes elemeinek tulajdonságait még a megjelenítés előtt, dinamikusan meg tudjuk határozni. Tehát a Show hívja meg az Initialize-t.
Imre
- A hozzászólás módosításra került: 9 years telt el-horvimi.