Telefonszámunk: 1-472-0679

Hozzászólás: UserForm

Kezdőlap Fórumok Excel programozás UserForm Hozzászólás: UserForm

#2430
horvimi
Adminisztrátor

    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 rész betöltéséig. ha meg eljutottunk volna, akkor pedig 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: 8 years, 6 months telt el-horvimi.