Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema CommandButton
BildScreenshot zu CommandButton CommandButton-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema Userform
BildScreenshot zu Userform Userform-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema TextBox
BildScreenshot zu TextBox TextBox-Seite mit Beispielarbeitsmappe aufrufen

Zeile finden und überschreiben VBA

Betrifft: Zeile finden und überschreiben VBA von: Anne
Geschrieben am: 10.09.2020 13:26:21

Hallo,

diese Anfrage schließt sich an das folgende Thema an:

https://www.herber.de/forum/archiv/1776to1780/1777714_Zeile_finden_und_ueberschreiben_VBA.html#1778025

Anbei die angepasste Datei. Wenn man die Userform (Schaltfläche dazu befindet sich auf Tabelle1) aufruft habe ich alles genau erklärt und auch mein Problem geschildert, welches ich habe:

https://www.herber.de/bbs/user/140170.xlsm

Grob gesagt, möchte ich mit Hilfe einer Userform eine Tabelle nach einem Wert durchsuchen. Diesen Wert in einer Combobox(1) ausgeben und die dazugehörigen Spalten in andere Comboboxen und Textboxen übernehmen. Einzelne Comboboxen sollen nur mit einem Dropdown, der vorgegeben ist, abgeändert werden können oder Textboxen die einfach überschrieben werden. Abschließend möchte ich die Änderungen, die in der Userform gemacht wurden, in den Comboboxen mit Dropdown oder im Textfeld mit der Überschreibung, mit einem Button in die Tabelle überschreiben.

In den Comboboxen dürfen für die Änderung nur die Werte aus dem Dropdown genommen werden und nicht einfach irgendwelche.

Ich hoffe, nun habe ich mein Problem ausführlich und zu eurer Zufriedenheit geschildert. Über eure Hilfe, wäre ich mehr als Dankbar!!

Vielen lieben Dank und liebe Grüße

Anne

Betrifft: AW: Zeile finden und überschreiben VBA
von: fcs
Geschrieben am: 10.09.2020 17:22:10

Hallo Anne,

nachfolgend der Code des Userforme etwas aufgeräumt.

Die Combobox4 hab ich mal außen vor gelassen, da du sie ja nur zum Testen hast.

Meine Frage noch: Was soll mit dem Wert in der Combobox5 passieren, wenn du auf Anpassen klickst?
Ich habe hier erst einmal eine Prüfung eingebaut, ob ein Wert gewählt wurde.

LG
Franz
Option Explicit
Dim bAnpassenClick As Boolean

Private Sub UserForm_initialize()
  
  Dim werte As Object
  Dim i, lngZeileMax, lngZeileMaxMA As Long
  
  lngZeileMax = Tabelle1.UsedRange.Rows.Count
      With Me.ComboBox1
          .RowSource = "Tabelle1!A2:E" & lngZeileMax
          .ColumnCount = 5
          .Style = fmStyleDropDownList
          .ListIndex = -1
          .ListRows = 8
      End With
  
  lngZeileMaxMA = Tabelle2.UsedRange.Rows.Count
      With Me.ComboBox2
          .RowSource = "Tabelle2!A2:B" & lngZeileMaxMA
          .ColumnCount = 2
          .Style = fmStyleDropDownList
          .ListRows = 5
      End With
      
  Set werte = CreateObject("Scripting.Dictionary")
  
  With Worksheets("Tabelle3")
      For i = 2 To .Cells(.Rows.Count, 1).End(xlUp).Row
          If .Cells(i, 3) = "F" Then
              werte(.Cells(i, 2).Text) = 0
          End If
      Next
  End With
  
  Me.ComboBox3.List = Application.Transpose(werte.Keys)
  ComboBox5.Style = fmStyleDropDownList
  
  Set werte = Nothing
      
End Sub

Private Sub ComboBox1_Change()
Dim i As Long

  With ComboBox1
    If .ListIndex = -1 Or .Text = "" Then
    
        ComboBox2.Value = ""
        ComboBox3.Value = ""
        ComboBox5.Value = ""
        TextBox1.Value = ""
    
    Else
    
        If bAnpassenClick = False Then
            ComboBox2.Value = .List(.ListIndex, 1)
            ComboBox3.Value = .List(.ListIndex, 2)
            TextBox1.Value = .List(.ListIndex, 3)
        End If
    
    End If
  End With

End Sub

Private Sub ComboBox3_Change()
  
  Dim i As Long
  
  With Worksheets("Tabelle3")
      Me.ComboBox5.Clear
      For i = 2 To .Cells(.Rows.Count, 1).End(xlUp).Row
          If Me.ComboBox3 = .Cells(i, 2) And .Cells(i, 3) = "F" Then
              Me.ComboBox5.AddItem .Cells(i, 1)
          End If
      Next i
  End With
  
End Sub

Private Sub CommandButton1_Click()

  Dim r As Long
  If Me.ComboBox5.ListIndex = -1 Then
    MsgBox "Es ist noch kein Wert in Combobox5 gewählt!", vbOKOnly, "Prüfung Dateneingabe"
    Exit Sub
  End If
  
  bAnpassenClick = True
  With Sheets("Tabelle1")
  
      r = ComboBox1.ListIndex + 2

      .Cells(r, 2).Value = ComboBox2
      .Cells(r, 3).Value = ComboBox3
      .Cells(r, 4).Value = TextBox1
  
  End With
  
  bAnpassenClick = False
End Sub


Beiträge aus dem Excel-Forum zum Thema "Zeile finden und überschreiben VBA"