AW: VBA Inhalt aus Textbox in Zelle schreibe
06.03.2020 13:25:15
MCO
Hallo Marc!
Das kann ja auch nicht anders:
For Each ctrl In Me.Controls
If TypeOf ctrl Is MSForms.TextBox Then
e = e + 1
... bedeutet, dass alle elemente durchgegangen werden und bei Textbox zählt er einen hoch.
Da in der Userform schon zwei Textboxen drin stehen (Produkt u. Prozess 1) ist der Zähle schon bei 2 und damit der nächste bei 3.
Das ganze kannst du jetzt schön umschiffen, indem du entweder Variable vor dem hochzählen schon mit -1 (aktuell ist e = 0) belegst, oder indem du nach dem durchzählen der Textboxen einen Zähler zurückzählst.
e = e-1
(oder in der Benennung nicht e+1 schreibst, sondern nur e)
Alles in allem erscheint mir nicht alles so richtig sinnvoll, das wesentliche sollte aber so aussehen:
Private Sub New_Process_Click()
'=============================================================================================== _
' 1. Neuen Prozess hinzufügen.
'=============================================================================================== _
Dim e, links As Long, a As Long, abstand As Long
Proz_max = 40
Proz_spalt = 3
abstand = 15
e = -1
links = Number1.Left
For Each ctrl In Me.Controls
If TypeOf ctrl Is MSForms.TextBox Then
e = e + 1
a = WorksheetFunction.Max(ctrl.Top, a)
End If
Next ctrl
If e >= Proz_max Then MsgBox ("max. Anzahl Prozesse erreicht"): Exit Sub
a = a + 25
neues_feld e, links, a, abstand
End Sub
Sub neues_feld(e, links As Long, oben As Long, abstand As Long)
Set NewLabel = Raw_Data.Frame1.Controls.Add("Forms.Label.1", True)
With NewLabel
.Name = "Number" & e + 1
.ForeColor = &H0&
.Caption = e + 1
.Left = links
.Top = oben + abstand
.Width = 15
.Height = 18
End With
Set NewTextBox = Raw_Data.Frame1.Controls.Add("Forms.TextBox.1", Visible)
With NewTextBox
.Name = "Prozess" & e + 1
.Left = links + 24
.Top = oben + abstand - 3
.Width = 300
.Height = 18
.SetFocus
End With
Me.New_Process.Top = oben + abstand + 20
End Sub
Das mit dem Scrollen mußt du wieder anhängen / ergänzen...
Gruß, MCO
So einfach kann das sein :-)