Avatar billede mrkr Juniormester
26. august 2008 - 21:22 Der er 12 kommentarer og
1 løsning

Ændre combobox2 automatisk i userform efter valgtet at combobox1

Jeg har følgende kode i en userform

Private sub userform.activate()
me.combobox1.AddItem "navn1"
me.combobox1.AddItem "navn2"
me.combobox1.AddItem "navn3"
end sub

Jeg kunne godt godt tænke mig at hvis jeg vælger navn1 i combobox1 så skal der automatisk blive udfyldt en titel i combobox2. feks.
navn 1 = titel A
navn 2 = titel B
navn 3 = titel C

Osv.
Avatar billede jakobdo Ekspert
26. august 2008 - 21:28 #1
Kan du ikke oprette noget kode på event niveau ?
onchange eller onselect eller lign ?
Avatar billede mrkr Juniormester
26. august 2008 - 21:33 #2
Det vil jeg tro, men jeg er ikke helt med på hvordan koden ser ud.
Avatar billede jakobdo Ekspert
26. august 2008 - 21:39 #3
Jeg formoder vi snakker VBA i Word ikke ?
Avatar billede mrkr Juniormester
26. august 2008 - 21:43 #4
jo det var det jeg regnede med.
En eller anden form for kode som skal ligge under "userformen"
Avatar billede jakobdo Ekspert
26. august 2008 - 21:49 #5
Det må være noget i stil med:

Private Sub ComboBox1_Change()
  ActiveDocument.FormFields("Text1").Result = ComboBox1.Value
End Sub
Avatar billede jakobdo Ekspert
26. august 2008 - 21:49 #6
Det skal så bare ikke være Text1, men combobox2
Avatar billede mrkr Juniormester
26. august 2008 - 22:04 #7
Fandt en løsning som ser således ud

Private Sub combobox1_Change()
If combobox1.Value = "navn1" Then
combobox2.Value = "titela"
End If
If combobox1.Value = "navn2" Then
combobox2.Value = "titelb"
End If
' osv
End Sub
Avatar billede jakobdo Ekspert
26. august 2008 - 22:18 #8
Du kunne måske overveje at smide dine navn1 og titela osv... i et array og så bruge det videre.
Det er måske lidt mere elegant.
Men du får et svar.
Avatar billede mrkr Juniormester
26. august 2008 - 22:31 #9
Mange tak for hjælpen.
det med array er for kompliceret til mig, men hvis du har et bud vil jeg da gerne se hvordan det kan gøres. :-)

Jeg kan sagtens se at min kode ikke er så elegant :-)
Avatar billede jakobdo Ekspert
26. august 2008 - 22:46 #10
Jeg troede arrays var ligesom i php, hvor man kan bruge key og value.
Men kan ikke lige finde noget god doc på array og vba.
Så det må komme senere, hvis jeg lige falder over det. :o)
Avatar billede jakobdo Ekspert
26. august 2008 - 22:48 #11
Og glemte helt, takker for point.
26. august 2008 - 23:02 #12
Et lille eksempel med en userform med to combobokse på eller en combobox og en textbox

'Læs mere om arrays her http://www.eksperten.dk/artikler/522
Dim mvntPersons(2, 1) As Variant

Private Sub ComboBox1_Change()
    With Me.ComboBox2
        .Clear
        .AddItem FindTitle(.Text)
    End With
    'Hvis der altid kun er EN tekst i ComboBox1,
    'så ville jeg nok lave det til en TextBox i stedet,
    'og nøjes med denne ene linie heri
    'Me.TextBox1.Text = FindTitle(Me.ComboBox1.Text)
End Sub

Private Sub UserForm_Initialize()
    Dim iItem As Integer
   
    'Smid noget i dit array
    mvntPersons(0, 0) = "Navn 1"
    mvntPersons(0, 1) = "Title A"
    mvntPersons(1, 0) = "Navn 3"
    mvntPersons(1, 1) = "Title B"
    mvntPersons(2, 0) = "Navn 3"
    mvntPersons(2, 1) = "Title C"
   
    'Smid Navn i ComboBox1
    For iItem = 0 To UBound(mvntPersons, 1)
        Me.ComboBox1.AddItem mvntPersons(iItem, 0)
    Next iItem
End Sub

Public Function FindTitle(ByVal sName As String) As String
    Dim sRetVal As String
    Dim iItem As Integer
   
    For iItem = 0 To UBound(mvntPersons, 1)
        If mvntPersons(iItem, 0) = sName Then
            sRetVal = mvntPersons(iItem, 0)
            Exit For
        End If
    Next iItem
   
    FindTitle = sRetVal
End Function
26. august 2008 - 23:04 #13
Ahh - jeg skulle have testet først :-) denne her virker

'Læs mere om arrays her http://www.eksperten.dk/artikler/522
Dim mvntPersons(2, 1) As Variant

Private Sub ComboBox1_Change()
    With Me.ComboBox2
        .Clear
        .AddItem FindTitle(Me.ComboBox1.Text)
    End With
    'Hvis der altid kun er EN tekst i ComboBox1,
    'så ville jeg nok lave det til en TextBox i stedet,
    'og nøjes med denne ene linie heri
    'Me.TextBox1.Text = FindTitle(Me.ComboBox1.Text)
End Sub

Private Sub UserForm_Initialize()
    Dim iItem As Integer
   
    'Smid noget i dit array
    mvntPersons(0, 0) = "Navn 1"
    mvntPersons(0, 1) = "Title A"
    mvntPersons(1, 0) = "Navn 2"
    mvntPersons(1, 1) = "Title B"
    mvntPersons(2, 0) = "Navn 3"
    mvntPersons(2, 1) = "Title C"
   
    'Smid Navn i ComboBox1
    For iItem = 0 To UBound(mvntPersons, 1)
        Me.ComboBox1.AddItem mvntPersons(iItem, 0)
    Next iItem
End Sub

Public Function FindTitle(ByVal sName As String) As String
    Dim sRetVal As String
    Dim iItem As Integer
   
    For iItem = 0 To UBound(mvntPersons, 1)
        If mvntPersons(iItem, 0) = sName Then
            sRetVal = mvntPersons(iItem, 1)
            Exit For
        End If
    Next iItem
   
    FindTitle = sRetVal
End Function
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Tag et kursus i Word og øg effektiviteten

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester