Hallo,
ich bin ziemlicher Laie, habe aber bereits angefangen.
Ich möchte Mitglieder (mit Name, Vorname, IBAN, Kontonummer und BLZ) per Button in eine zweite Tabelle aneinanderreihen
Zunächst einmal habe ich zwei
Buttons (Einzelnes Mitglied hinzufügen & Alle Mitglieder hinzufügen). Bei dem einzelnen Mitglied öffnet sich eine Userform.
Hier der
Tabelle1-Code:
Private Sub AlleMitglieder_Click()
Modul1.one_long = 0
Modul1.Daten_pruefen
End Sub
Private Sub EinMitglied_Click()
Modul1.one_long = 0
UserForm1.Show
End Sub
one_long benutze ich als reset-Wert, aber dazu später mehr.
Ich habe einige Teile kopiert, weil ich VBA nicht so gut kenne.
Userform-Code:
Private Sub Abbrechen_Click()
Unload Me
End Sub
Private Sub Speichern_Click()
For i = 2 To Tabelle1.UsedRange.Rows.Count
If Tabelle1.Cells(i, 1) = ComboBox1.List(ComboBox1.ListIndex) Then Modul1.one_long = i
Next i
Unload Me
Modul1.Daten_pruefen
End Sub
Private Sub UserForm_Initialize()
For i = 1 To Tabelle1.UsedRange.Rows.Count - 1
ComboBox1.AddItem
ComboBox1.List(i - 1) = Tabelle1.Cells(i + 1, 1)
Next i
With ComboBox1
again:
For i = 0 To .ListCount - 2
If .List(i + 1) < .List(i) _
Then
tmp = .List(i)
.List(i) = .List(i + 1)
.List(i + 1) = tmp
GoTo again
End If
Next i
.ListIndex = 0
End With
End Sub
Bei Speichern wird one_long auf i gesetzt, damit später auch nur das i-te Miglied hinzugefügt wird.
Dann kommt bei mir ein Sub Daten_pruefen...dort prüft der aber nur, ob die einzelnen Zellen einen Wert haben, wenn nicht läuft der erst gar nicht weiter.
Dann kommt der fehlerhafte Sub Daten_uebertragen.
Ich versuche da dann entweder
i oder halt alle Mitglieder bis Tabelle1.UsedRange.Rows.Count hinzuzufügen, deswegen auch:
If one_long > 0 Then
start = one_long
ende = one_long
Else
start = 2
ende = Tabelle1.UsedRange.Rows.Count
End If
Wenn es den Vor- und Nachnamen dann also in der zweiten Tabelle noch nirgends gibt, soll er die
ganze Zeile des Mitglieds i kopieren.
So circa nur dass Range falsch verwendet wurde:
Sub Daten_uebertragen()
Dim Range As Long
Dim a As Range
Range = Tabelle2.UsedRange.Rows.Count + 1
Set a = Range("A2:A100", 1)
For row = start To ende
For col = 1 To Tabelle1.UsedRange.Columns.Count
If Tabelle2.Range(a) = Tabelle1.Range(a) _
Then
MsgBox "Den Namen in Zeile " & row & " gibt es bereits" & vbCrLf & vbCrLf & _
"Bitte ändern/ löschen Sie den Namen"
End If
If Tabelle2.Cells(row, 2) <> Tabelle1.Cells(row, 2) And Tabelle2.Cells(row, 1) <> Tabelle1.Cells(row, 1) _
Then
MsgBox "Fügt " & Tabelle1.Cells(row, 2) & " " & Tabelle1.Cells(row, 1) & " hinzu."
Tabelle2.Cells(Range, col) = Tabelle1.Cells(row, col)
End If
Next col
Next row
End Sub
Nur leider kommt die MsgBox natürlich bei jeden Durchgang.
Ich hoffe das ist relativ verständlich, kenne halt nur ein paar Befehle.