Inhalte aus Tabelle über Comboboxen verändern

Hallo,

nach einigen diletantischen Versuchen muss ich mir doch eingestehen, dass ich VBA nicht wirklich drauf habe. Folgendes Problem:

Ich habe eine Tabelle mit mehreren Datensätzen. Diese bestehen zum Teil aus Freitext, z.T. aus vorgegebenen Werten/ Wörtern (z.B. bestimmte Personen oder Stati).
Die Datensätze sollen nacheinander in einer Maske (Userform) über einen SpinButton aufgerufen werden. Dabei soll es möglich sein, sämtliche Angaben in den Feldern zu verändern und diese Änderungen wieder in die Tabelle rückzuübertragen.
Für einen versierten Anwender wahrscheinlich relativ einfach:wink:
Ich habe bislang nur die Maske erstellt. Der Programmiertext fehlt mir leider noch…
Ich weiß auch nicht, in welche der vielen PrivateSubs () der Programmiertext eingegeben werden muss.

Vielen Dank für jegliche Hilfe!

Hallo.

Falls noch Interesse besteht, hier eine kleines Beispiel zum nachbauen (am besten erst einmal eine neue Datein nehmen):

Auf dem Tabellenblatt Tabelle1

Bitte schreibe in den Zellen A1 bis E1 den Text „Überschrift A1“ bis „Überschrift E1“.

Bitte schreibe in den Bereich A2 bis E20 die Texte „Wert A2“ bis „Wert E20“.

Füge dem Tabellenblatt eine Befehlsschaltfläche aus der Steuerelemente-Toolbox hinzu mit dem Namen „CommandButton1“

Im VisualBasic Editor

Füge dem Projekt ein UserForm mit dem Namen „UserForm1“ hinzu.

Füge UserForm1 fünf Bezeichnungsfelder hinzu mit den Namen „Label1“ bis „Label5“

Füge UserForm1 fünf Textfelder hinzu mit den Namen „TextBox1“ bis „Textbox5“

Füge UserForm1 eine Befehlsschaltfläche hinzu mit dem Namen „CommandButton1“.

Lege die Caption-Eigenschaft von CommandButton1 fest auf „Ok“.
Lege die Accelerator-Eigenschaft von CommandButton1 fest auf „o“.

Füge UserForm1 eine Befehlsschaltfläche hinzu mit dem Namen „CommandButton2“

Lege die Caption-Eigenschaft von CommandButton2 fest auf „Abbrechen“.
Lege die Accelerator-Eigenschaft von CommandButton2 fest auf „a“.
Lege die Cancel-Eigenschaft von CommandButton2 fest auf True.

Füge UserForm1 einen SpinButton hinzu mit dem Namen „SpinButton1“.

Kopiere folgenden Code in das Codefenster von UserForm1:

Private Sub CommandButton1\_Click()
 Unload Me
End Sub

Private Sub CommandButton2\_Click()
 Data.Changed = False
 Unload Me
End Sub

Private Sub SpinButton1\_Change()
 Call WriteDataValues(SpinButton1.Value)
End Sub

Private Sub UserForm\_Initialize()
 SpinButton1.Min = Data.FirstRow
 SpinButton1.Max = Data.LastRow
 SpinButton1.SmallChange = 1
 Call WriteDataCaptions
 Call WriteDataValues(SpinButton1.Min)
End Sub

Private Sub WriteDataCaptions()
 For i = Data.FirstCol To Data.LastCol
 Me.Controls("Label" & CStr(i)).Caption = Data.Captions(i)
 Next
End Sub

Private Sub WriteDataValues(Optional ByVal r As Integer = 1)
 For c = Data.FirstCol To Data.LastCol
 Me.Controls("TextBox" & CStr(c)).Text = Data.Values(r, c)
 Next
End Sub

Füge dem Projekt ein Modul hinzu.

Kopiere folgenden Code in das Codefenster des Moduls:

Public Type typData
 Changed As Boolean
 FirstCol As Integer
 LastCol As Integer
 FirstRow As Integer
 LastRow As Integer
 Captions() As String
 Values() As String
End Type

Public Data As typData

Kopiere den folgenden Code in das Codefenster von Tabelle1:

Private Sub CommandButton1\_Click()
 Call DataEdit
End Sub

Private Sub DataEdit()
 Data.FirstCol = 1
 Data.LastCol = 5
 Data.FirstRow = 2
 Data.LastRow = 20
 ReDim Data.Captions(Data.FirstCol To Data.LastCol)
 For i = Data.FirstCol To Data.LastCol
 Data.Captions(i) = CStr(Tabelle1.Cells(1, i))
 Next
 ReDim Data.Values(Data.FirstRow To Data.LastRow, Data.FirstCol To Data.LastCol)
 For r = Data.FirstRow To Data.LastRow
 For c = Data.FirstCol To Data.LastCol
 Data.Values(r, c) = CStr(Tabelle1.Cells(r, c))
 Next c
 Next r
 Dim nf As New UserForm1
 nf.Show vbModal
 If Data.Changed = False Then Exit Sub
 MsgBox "Die Daten wurden verändert"
 'ToDo: Code schreiben, der die veränderten Daten ins Tabellenblatt zurückschreibt 
End Sub

Klicke im Menü „Debuggen“ auf „Kompilieren“ (Wenn keine Fehler-Meldung angezeigt wird, sollte die ganze Geschichte funktionieren).

Deaktiviere gegebenenfalls den Entwurfsmodus

Gehe bitte zurück nach Excel in Tabelle1 und klicke auf CommandButton1.

Es sollte jetzt UserForm1 angezeigt werden. Du kannst dort mit dem SpinButton durch die Zeilen 2 bis 20 navigieren.

Soweit vorerst. Ich lasse den gesamten Code erstmal unerklärt, da ich nicht genau weiß, ob die Funktionalität Deinen Vorstellungen entspricht. Du kannst Dich ja 'mal dazu äußern.

VG
Carsten