ich programmiere aktuell eine UserForm mit der ich neue Projekte anlegen und bestehende bearbeiten möchte.
Teil dieser Daten sind Meilensteine bzw. Phasen (Projektklärung, Konstruktion, Beschaffung, Montage etc.) die sich abhängig von einem Startdatum und der per Dropdown Menu ausgewählten zu bauenden Maschine berechnen. Die dazu gehörigen Informationen wie lang die einzelnen Phasen dauern sind im Namensmanager hinterlegt und werden über die INDIREKT Funktion abgerufen.
Da die Datei aufgrund der Menge an Daten unübersichtlich und vor allem in der Diskussion mit mehreren Teilnehmern schwer zu nutzen ist habe ich die UserForm angelegt, um alle Informationen auf einen Blick zu haben und diese auch einfach bearbeiten zu können. Generell funktioniert die UserForm gut leider aber werden beim Speichern die Formeln überschrieben.
Anbei einmal meine Speicherroutine:
'Speichern Schaltfläche Ereignisroutine
Private Sub CommandButton3_Click()
Dim lZeile As Long
'Wenn kein Datensatz in der ListBox markiert wurde, wird die Routine beendet
If ListBox1.ListIndex = -1 Then Exit Sub
'Wir müssen prüfen, ob die ID Spalte auch gefüllt ist!!
If Trim(CStr(TextBox1.Text)) = "" Then
'Meldung ausgeben
MsgBox "Sie müssen mindestens einen Namen eingeben!", vbCritical + vbOKOnly, "FEHLER!"
'Abbrechen der Speicherroutine
Exit Sub
End If
'Ausbauoption: Prüfen, ob die ID in Tabelle1 Spalte 2 schon vorhanden ist!
'Zum Speichern benötigen wir die Zeilennummer des ausgewählten Datensatzes
lZeile = 8 'Start in Zeile 8, darüber lediglich Überschriften etc.
'Schleife solange etwas in der zweiten Spalte in Tabelle 1 drin steht
Do While Trim(CStr(Tabelle1.Cells(lZeile, 2).Value)) ""
'Datensatz ID Spalte mit selektiertem Eintrag der ListBox vergleichen
If ListBox1.Text = Trim(CStr(Tabelle1.Cells(lZeile, 2).Value)) Then
'Eintrag gefunden, TextBoxen in die Zellen schreiben
Tabelle1.Cells(lZeile, 2).Value = Trim(CStr(TextBox1.Text))
Tabelle1.Cells(lZeile, 3).Value = TextBox2.Text
Tabelle1.Cells(lZeile, 7).Value = TextBox3.Text
Tabelle1.Cells(lZeile, 5).Value = TextBox4.Text
Tabelle1.Cells(lZeile, 6).Value = TextBox5.Text
Tabelle1.Cells(lZeile, 8).Value = TextBox6.Text
Tabelle1.Cells(lZeile, 9).Value = TextBox7.Text
Tabelle1.Cells(lZeile, 10).Value = TextBox8.Text
Tabelle1.Cells(lZeile, 11).Value = TextBox9.Text
Tabelle1.Cells(lZeile, 12).Value = TextBox10.Text
Tabelle1.Cells(lZeile, 13).Value = Format(TextBox11.Value, "dd.mm.yyyy")
Tabelle1.Cells(lZeile, 14).Value = Format(TextBox12.Value, "dd.mm.yyyy")
Tabelle1.Cells(lZeile, 15).Value = Format(TextBox13.Value, "dd.mm.yyyy")
Tabelle1.Cells(lZeile, 16).Value = Format(TextBox14.Value, "dd.mm.yyyy")
Tabelle1.Cells(lZeile, 17).Value = Format(TextBox15.Value, "dd.mm.yyyy")
Tabelle1.Cells(lZeile, 18).Value = Format(TextBox16.Value, "dd.mm.yyyy")
Tabelle1.Cells(lZeile, 19).Value = Format(TextBox17.Value, "dd.mm.yyyy")
Tabelle1.Cells(lZeile, 20).Value = Format(TextBox18.Value, "dd.mm.yyyy")
Tabelle1.Cells(lZeile, 21).Value = Format(TextBox19.Value, "dd.mm.yyyy")
Tabelle1.Cells(lZeile, 22).Value = Format(TextBox20.Value, "dd.mm.yyyy")
Tabelle1.Cells(lZeile, 23).Value = Format(TextBox21.Value, "dd.mm.yyyy")
Tabelle1.Cells(lZeile, 24).Value = Format(TextBox22.Value, "dd.mm.yyyy")
Tabelle1.Cells(lZeile, 25).Value = Format(TextBox23.Value, "dd.mm.yyyy")
Tabelle1.Cells(lZeile, 26).Value = Format(TextBox24.Value, "dd.mm.yyyy")
Tabelle1.Cells(lZeile, 27).Value = Format(TextBox25.Value, "dd.mm.yyyy")
Tabelle1.Cells(lZeile, 32).Value = Format(TextBox26.Value, "dd.mm.yyyy")
Tabelle1.Cells(lZeile, 33).Value = Format(TextBox27.Value, "dd.mm.yyyy")
Tabelle1.Cells(lZeile, 34).Value = Format(TextBox28.Value, "dd.mm.yyyy")
Tabelle1.Cells(lZeile, 35).Value = Format(TextBox29.Value, "dd.mm.yyyy")
Tabelle1.Cells(lZeile, 28).Value = Format(TextBox30.Value, "dd.mm.yyyy")
Tabelle1.Cells(lZeile, 29).Value = Format(TextBox31.Value, "dd.mm.yyyy")
Tabelle1.Cells(lZeile, 30).Value = Format(TextBox32.Value, "dd.mm.yyyy")
Tabelle1.Cells(lZeile, 31).Value = Format(TextBox33.Value, "dd.mm.yyyy")
Tabelle1.Cells(lZeile, 36).Value = TextBox34.Text
'Die ListBox muss nun neu geladen werden
'allerdings nur, wenn sich die Projektnummer (ID) geändert hat
If ListBox1.Text Trim(CStr(TextBox1.Text)) Then
Call UserForm_Initialize
If ListBox1.ListCount > 0 Then ListBox1.ListIndex = 0
End If
Exit Do 'Vorzeitiges Ende, da der Datensatz schon gefunden ist
End If
lZeile = lZeile + 1 'Nächste Zeile bearbeiten
Loop
End Sub
Gibt es eine Möglichkeit das überschriben der Formeln zu verhindern?Vielen Dank schon einmal im Voraus!
Viele Grüße
Luca