Code umstellen
21.01.2015 08:39:50
Andreas
mit nachfolgendem Code ( etwas gekürzt ) lese ich per ComboBox1 - Auswahl den Inhalt einer Zeile des aktiven Blattes in ein UserForm, verändere bestimmte Textbox- und ComboBox-Inhalte und trage die Werte per Commandbutton wieder in die Zeile ein.
Bisher habe ich das Blatt immer vor dem Start des UserForm ausgewählt. Da aber später noch mehr Funktionen eingebaut werden sollen, müsste ich das Blatt per ComboBoxAendern_Change() auswählen.
Das heisst, jedesmal wenn per ComboBoxAendern_Change() ein Blatt aktviert wird, soll sich auch der Inhalt der ComboBox1 ändern. Auch wenn man mal hin und her schaltet.
Dazu habe ich den Code für die ComboBox1 aus dem UserForm_Initialize() - Ereignis auskommentiert und in das ComboBoxAendern_Change() eingefügt.
Leider funktioniert es wohl nicht so einfach.
1. In der ComboBox1 erscheint jede Zeile 2 mal
2. bei klick des CommandButton1 erscheint folgender Fehler
Laufzeitfehler 1004
Die RowHeight-Eigenschaft des Range-Objektes kann nicht zugeordnet werden
Kann mir bitte Jemand weiterhelfen, verstehe leider nicht allzu viel von VBA.
eintragen der Werte per CommandButton
Private wks As Worksheet
Private Sub CommandButton1_Click()
Dim iCbx As Integer
If ComboBox1 "" Then
a = ComboBox1.Column(1)
With ActiveSheet
If MsgBox("Die Änderungen übernehmen?", vbYesNo, "Nachgefragt") = vbYes _
Then
ActiveSheet.Unprotect Password:=""
.Cells(a, 9).ClearContents
.Cells(a, 10) = Me.ComboBox6.List(ComboBox6.ListIndex, 0)
.Cells(a, 4) = Me.TextBox1.Text
.Cells(a, 5) = Me.TextBox2.Text
.Cells(a, 11) = Me.TextBox7.Text
.Cells(a, 22).Value = Me.ComboBox21.Text
.Cells(a, 23).Value = Me.ComboBox22.Text
For iCbx = 21 To 40
If Me.Controls("ComboBox" & iCbx).Value "" Then
.Cells(a, 9) = .Cells(a, 9) & Me.Controls("ComboBox" & iCbx).Value & " "
End If
Next iCbx
.Cells(a, 9) = Left(.Cells(a, 9).Text, Len(.Cells(a, 9).Text) - 1)
End If
End With
End If
Range("C1").Select
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True, Password:=""
Unload Auftrag_ändern
'FormulareAufrufen.Show
ActiveWorkbook.Save
End Sub
UserForm füllen (in der funktionierenden Version war natürlich nichts auskommentiert)
Private Sub UserForm_Initialize()
'With ComboBox1
' .ColumnCount = 2
' .ColumnWidths = ";0"
' For a = 4 To 43
' Select Case a
' Case 4 To 19, 24 To 43
' If Rows(a).RowHeight > 0 Then
' .AddItem
' .List(.ListCount - 1, 0) = Cells(a, 4) & " - " & Cells(a, 6)
' .List(.ListCount - 1, 1) = a
' End If
' End Select
' Next a
'End With
With Me.ComboBoxAendern
.RowSource = "Userform!A4:A44"
.ListIndex = -1
End With
With Me.ComboBox6
.RowSource = "Dauer"
.ListIndex = -1
End With
With Me.ComboBox21
.RowSource = "Artikel"
.ListIndex = -1
End With
End Sub
Durch Auswahl werden die Daten der Zeile in die Text- und ComboBoxen eingelesen
Private Sub ComboBox1_Change()
If ComboBox1 "" Then
a = ComboBox1.Column(1)
With ActiveSheet
TextBox8.Text = Cells(a, 1).Text
TextBox9.Text = Cells(a, 3).Text
ComboBox6 = Cells(a, 10)
TextBox1 = Cells(a, 4)
TextBox2 = Cells(a, 5)
TextBox3 = Cells(a, 6)
TextBox4 = Cells(a, 7)
TextBox5 = Cells(a, 8)
TextBox7 = Cells(a, 11)
TextBox13.Text = Cells(a, 13).Text
TextBox14.Text = Cells(a, 14).Text
TextBox15.Text = Cells(a, 16).Text
TextBox16.Text = Cells(a, 17).Text
TextBox17.Text = Cells(a, 19).Text
TextBox18.Text = Cells(a, 20).Text
TextBox19.Text = Cells(a, 21).Text
ComboBox21 = Cells(a, 22)
ComboBox22 = Cells(a, 23)
End With
End If
End Sub
Hier nun mein Versuch, der aber nicht so funktioniert
Private Sub ComboBoxAendern_Change()
ComboBox1.Clear
ComboBoxAendern.Value = Format(ComboBoxAendern.Value, ("dd.mm.yyyy"))
Sheets(ComboBoxAendern.Value).Activate
With ComboBox1
.ColumnCount = 2
.ColumnWidths = ";0"
For a = 4 To 43
Select Case a
Case 4 To 19, 24 To 43
If Rows(a).RowHeight > 0 Then ' Hier wird der Laufzeitfehler angezeigt
.AddItem
.List(.ListCount - 1, 0) = Cells(a, 4) & " - " & Cells(a, 6)
.List(.ListCount - 1, 1) = a
End If
End Select
Next a
End With
End Sub
Danke fürs lesen und die Hilfe!mfg, Andreas