Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1404to1408
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Code umstellen

Code umstellen
21.01.2015 08:39:50
Andreas
Hallo Excelprofis
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

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Code umstellen
21.01.2015 14:22:17
fcs
Hallo Andreas,
dadurch, dass du den Wert der Combobox innhalb des Change-Ereignismakros änderst wird das Makro nochmals gestarte, so dass die Combobox1-Liste 2-mal gefüllt wird.
Das Problem mit RowHeight kann ich an hand des geposteten Codes nicht erkennen.
Gruß
Franz
'Modulweite Variable im Userform-Code-Modul
Private bolAktion As Boolean 'Merker, dass eine Aktion bereits ausgeführt wird
Private Sub ComboBoxAendern_Change()
Dim wks As Worksheet
If ComboBoxAendern.ListIndex = -1 Then Exit Sub
If bolAktion = True Then Exit Sub
bolAktion = True
ComboBox1.Clear
Set wks = Sheets(Format(ComboBoxAendern.Value, ("dd.mm.yyyy")))
ComboBoxAendern.Value = Format(ComboBoxAendern.Value, ("dd.mm.yyyy"))
wks.Activate
With ComboBox1
.ColumnCount = 2
.ColumnWidths = ";0"
For a = 4 To 43
Select Case a
Case 4 To 19, 24 To 43
If wks.Rows(a).RowHeight > 0 Then  ' Hier wird der Laufzeitfehler angezeigt
.AddItem
.List(.ListCount - 1, 0) = wks.Cells(a, 4) & " - " & wks.Cells(a, 6)
.List(.ListCount - 1, 1) = a
End If
End Select
Next a
End With
bolAktion = False
End Sub

Anzeige
Zum Teil gelöst!
21.01.2015 14:57:37
Andreas
Hallo Franz,
vielen, vielen Dank für die Hilfe, dein Code klappt super. Leider ist der Laufzeitfehler immer noch vorhanden.
Die Codezeile

If Rows(a).RowHeight > 0 Then  ' Hier wird der Laufzeitfehler angezeigt
Laufzeitfehler 1004
Die RowHeight-Eigenschaft des Range-Objektes kann nicht zugeordnet werden
legt fest, dass nur eingeblendete Zeilen (leere Zeilen werden ausgeblendet) in der ComboBox1 angezeigt werden.
Vieleicht hat noch Jemand eine Idee.
Vielen Dank!
mfg, Andreas

Zum Teil gelöst!
21.01.2015 15:05:21
Andreas
Der Laufzeitfehler tritt bei CommandButton1_Click() auf
Da steht unter anderem

a = ComboBox1.Column(1)
vieleicht hat es damit etwas zu tun.
mfg, Andreas

Anzeige
AW: Zum Teil gelöst!
21.01.2015 16:43:15
fcs
Hallo Andreas,
probiere mal eine der folgenden Alternativen. a muss ein nummerischer Wert sein. Evtl. steht die Zeilennummer als Text in der Auswahlliste. Val konvertiert eine Text-Ziffernfolge in eine Zahl.
'          a = ComboBox1.Column(1)
a = Val(ComboBox1.Column(1))
'oder
With ComboBox1
a = ComboBox1.List(.ListIndex, 1)
'oder
a = Val(ComboBox1.List(.ListIndex, 1))
End With

Gruß
Franz

AW: Zum Teil gelöst!
21.01.2015 17:15:15
Andreas
Hallo Franz,
danke für die Mühe und Hilfe. Leider funktioniert keine der Varianten. Ich werde mal eine Testdatei basteln, vieleicht ist es dann besser nach zu vollziehen. Dauert etwas.
mfg, Andreas

Anzeige
AW: Zum Teil gelöst! Beispeldatei!
21.01.2015 18:22:46
Andreas
Habe mal ein Beispiel gebaut.
Beim 1. Formular wird automatisch das aktive Blatt benutzt (Ausgangssituation).
Beim 2. Formular habe ich die Änderungen eingepflegt.
https://www.herber.de/bbs/user/95146.xlsm
mfg, Andreas

AW: Zum Teil gelöst! Beispeldatei!
21.01.2015 19:34:57
Christian
Hallo Andreas,
wenn du die "ComboBoxAendern" nicht per "RowSource" sondern per "List" füllst:

With Me.ComboBoxAendern
.List = Thisworkbook.Sheets("Userform").Range("A4:A44").Value
'.RowSource = "Userform!A4:A44"
.ListIndex = -1
End With
tritt der Fehler nicht auf.
Was in deinem Code genau passiert, habe ich jetzt nicht nachvollzogen. Teste mal, ob der Rest dann so läuft, wie er soll.
Gruß
Christian

Anzeige
AW: Zum Teil gelöst! Beispeldatei!
21.01.2015 20:06:12
Andreas
Vielen Dank euch beiden für die Gedult und Hilfe. Jetzt klappt es wie es soll. Kann ich weiter basteln.
Einen schönen Abend noch.
mfg, Andreas

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige