• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

kolomkop als invoerwaarden combobox

Status
Niet open voor verdere reacties.

Symphysodon

Gebruiker
Lid geworden
14 dec 2012
Berichten
468
Beste forummers,

Ik heb een userform met een combobox die gevuld moet worden met de kolomkoptekst vanaf de derde kolom in een listobject.
Code:
Private Sub Verwerking_Initialize()
   ComboBox1.List = Application.Transpose(Sheets("Data").ListObjects("Tabel1").HeaderRowRange)
End Sub
Met deze code blijft het invoervak leeg.

mvg
Marco
 
Zet r eens .value achter
 
Verwerking_Initialize()?

Code:
Private Sub UserForm_Initialize() 
  With Sheets("data").ListObjects(1).HeaderRowRange
    ComboBox1.List = Application.Transpose(.Cells(1, 2).Resize(, .Columns.Count - 2))
  End With
End Sub
 
Laatst bewerkt:
Code:
With Sheets("Data").ListObjects(1)
 ComboBox1.List = Application.Transpose(.range(1, 3).resize(, .listcolumns.count - 2))
End With
 
VenA dit werkt goed bedankt. Ik weet nu ook waarom mijn code niet werkte. Ik had de userform Verwerking genoemd en deze dus ook zo aangeroepen ininitialisatie.
@HSV: Listcolumns pikt die niet.

Nog een toevoeging de verborgen kolommen mogen niet in het invoervak.
Code:
Private Sub Userform_Initialize()
    With Sheets("data").ListObjects("Tabel1").HeaderRowRange
        ComboBox1.List = Application.Transpose(.Cells(1, 4).Resize(, .Columns.Count - 2))
        For Each cl In Combolist1.SpecialCells(12).SpecialCells(4)
            
        Next
  End With
 
@HSV: Listcolumns pikt die niet.

Weddenschapje?

Of heb je alleen maar een listobject van een header?
Dan heeft het geen nut om daar een listobject van te maken.
 
Laatst bewerkt:
haha, ik ga met jou niet wedden. Ik ben al blij als ik dit soort code enigszins kan begrijpen.

Het listobject is de tabel1, de code is verder identiek aan die van VenA, op List na dan.
 
Zonder verborgen kolommen.
Code:
Private Sub UserForm_Initialize()
Dim sv, j As Long, s0 As String
With Sheets("data").ListObjects(1)
  sv = .HeaderRowRange
    For j = 3 To .ListColumns.Count
      If .Range.Columns(j).Hidden = False Then s0 = s0 & " " & j
    Next j
      If Len(s0) > 0 Then ComboBox1.List = Application.Index(sv, 0, Split(Mid(s0, 2)))
  End With
End Sub
 
Laatst bewerkt:
pff wat knap.
Ik heb zelf ook wat bedacht. In de laatste kolom van de tabel staat een opmerkingen kolom, die hoeft ook niet in het invoervak.
Code:
Private Sub UserForm_Initialize()
Dim sv, j, m As Long, s0 As String
With Sheets("data").ListObjects("Tabel1")
  sv = .HeaderRowRange
    m = .ListColumns.Count
    
    For j = 4 To .ListColumns.Count
      .Range.Columns(m).Hidden = True
      If .Range.Columns(j).Hidden = False Then s0 = s0 & " " & j
    Next j
    If Len(s0) > 0 Then ComboBox1.List = Application.Index(sv, 1, Split(Mid(s0, 2)))
    .Range.Columns(m).Hidden = False
  End With
  
End Sub
Via een omweg, maar het werkt wel.

Ik snap trouwens nog steeds niet waarom jou eerste code niet werkt. Heeft dat met de objectkwalificatie te maken?
 
Als de laatste kolom ook afvalt.
Code:
Private Sub UserForm_Initialize()
Dim sv, j As Long, s0 As String
With Sheets("data").ListObjects(1)
  sv = .HeaderRowRange
    For j =[COLOR=#ff0000] 4[/COLOR] To .ListColumns.Count [COLOR=#ff0000][/COLOR][COLOR=#ff0000]-1[/COLOR]
      If .Range.Columns(j).Hidden = False Then s0 = s0 & " " & j
    Next j
      If Len(s0) > 0 Then ComboBox1.List = Application.Index(sv, 0, Split(Mid(s0, 2)))
  End With
End Sub
 
Tuurlijk

Als ik de keuze wil koppelen met een tekstvak lukt dat zo:
Code:
Private Sub ComboBox1_Change()
With Sheets("Data")
    Set oSh = .ListObjects("Tabel1").DataBodyRange
    If Me.ComboBox1.Value = "Meetpunt 1" Then
        g = Application.Average(oSh.Columns(4))
        sd = Application.StDev(oSh.Columns(4))
        Me.Gemiddelde.Text = g
        Me.Standaardafwijking.Text = sd
    ElseIf Me.ComboBox1.Value = "Meetpunt 2" Then
        g = Application.Average(oSh.Columns(14))
        sd = Application.StDev(oSh.Columns(14))
        Me.Gemiddelde.Text = g
        Me.Standaardafwijking.Text = sd
    ElseIf Me.ComboBox1.Value = "Meetpunt 3" Then
        g = Application.Average(oSh.Columns(24))
        sd = Application.StDev(oSh.Columns(24))
        Me.Gemiddelde.Text = g
        Me.Standaardafwijking.Text = sd
    ElseIf Me.ComboBox1.Value = "Meetpunt 4" Then
        g = Application.Average(oSh.Columns(34))
        sd = Application.StDev(oSh.Columns(34))
        Me.Gemiddelde.Text = g
        Me.Standaardafwijking.Text = sd
    ElseIf Me.ComboBox1.Value = "Meetpunt 5" Then
        g = Application.Average(oSh.Columns(44))
        sd = Application.StDev(oSh.Columns(44))
        Me.Gemiddelde.Text = g
        Me.Standaardafwijking.Text = sd
    End If
End With
End Sub
Maar dit lijkt me niet efficient. Is het bijvoorbeeld niet mogelijk om het kolomnummer te veranderen in de header. Als ik in de sheet het gemiddelde van kolom 4 bereken dan krijg ik dit: =Gemiddelde(Tabel1[Meetpunt 1]). In vba lukt me dat niet.
 
Een combobox heeft een listindex doe daar wat slims mee

10 * listindex +4
 
Dat kan slimmer.

Code:
Private Sub ComboBox1_Change()
 with sheets("data").listobjects(1).databodyrange
   Standaardafwijking.Text= application.stdev(.columns(combobox1.text))
   gemiddelde.text = application.average(.columns(combobox1.text))
 end with
End Sub
 
Ik heb het nu zo opgelost:
Code:
Private Sub ComboBox1_Change()
With ComboBox1
    lb = 10 * .ListIndex + 4
        With Sheets("Data").ListObjects("Tabel1").DataBodyRange
            Standaardafwijking.Text = Application.StDev(.Columns(lb))
            Gemiddelde.Text = Application.Average(.Columns(lb))
        End With
End With
End Sub
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan