VBA Werte speichern, wenn Textfeld sichtbar
#1
Hallo,

ich habe hier eine Userform mit mehreren Textfeldern "TextBox 1-12) in die ich Zahlen eingebe.

Ich habe einen Button "alles übernehmen" der die Daten von der Userform in eine Arbeitsmappe speichert.

Gespeichert werden sollen allerdings nur die Werte aus Textfeldern die auch visible sind. Sind die Felder invisible soll beim klick auf "alles übernehmen" der Wert "" (leer) gespeichert werden.

Code:
Private Sub TextBox1_Change()
Worksheets("Input").Activate
Range("C30").Value = TextBox1.Value
End Sub

Code:
Private Sub AllesUebernehmen_click()    
    Dim i As Integer
   For i = 1 To 12
   If Controls("TextBox" & i).Visible = True Then
   Controls ("TextBox" & i & "_Change")
   Else: Controls("TextBox" & i).Value = ""
   End If
    Next
End Sub
Bei dem Aufruf der Change-Methode Controls ("TextBox" & i & "_Change") sagt er aber Syntaxfehler.

Wie bekomme ich das so hin, dass er dort die jeweilige Change Methode aufruft?

Und generell - funktioniert meine Logik? :50: --> konkret: ruft das hier Controls("TextBox" & i).Value = "" automatisch die Change Methode auf, so dass es den Wert auch in die Arbeitsmappe übernimmt?
Top
#2
So funktioniert das nicht.

Code:
Private Sub TextBox1Aenderung()
Worksheets("Input").Activate
Range("C30").Value = TextBox1.Value
End Sub
Code:
Private Sub TextBox1_Change()
Call TextBox1Aenderung
End Sub
Code:
Private Sub AllesUebernehmen_click()    
Dim i As Integer
For i = 1 To 12
   If Controls("TextBox" & i).Visible = True Then
       Call TextBox1Aenderung
   Else
        Controls("TextBox" & i).Value = ""
   End If
Next
End Sub


Wobei sich mir ja eine Frage aufdrängt: Wie (und wieso) gibt man einen Wert in eine nicht sichtbare Textbox ein?
Schöne Grüße
Berni
[-] Folgende(r) 1 Nutzer sagt Danke an MisterBurns für diesen Beitrag:
  • StrammerMax
Top
#3
Hallo MisterBurns,

vielen Dank - ich probiere es gleich mal aus.

1. Die Textboxen ziehen Initial den Wert aus der Arbeitsmappe - falls bereits etwas steht ziehen sie erstmal die Werte
2. Die TextBoxen können ein und ausgeblendet werden.

Wenn jetzt jemand so schlau ist, sie einblendet, etwas rein schreibt und sich dann überlegt, dass er den Bereich doch nicht braucht und ihn wieder ausblendet sollen die Werte natürlich auch nicht in die Arbeitsmappe übernommen werden.

Bzw. falls vorher etwas drin stand soll dieser Wert gelöscht werden.

Das ist der Sinn dahinter.
Top
#4
Funktioniert einwandfrei :)
Top
#5
Aber eine Frage noch.

Ich habe 12 TextBoxen - die jeweils in unterschiedliche Zellen des Arbeitsblattes schreiben.

dann kann ich doch nicht einfach jedes mal Call TextBox1Aenderung aufrufen?

ich müsste doch jedes mal spezifisch bei i = 1 Textbox1Aenderung, bei i = 2 Textbox2Aenderung usw. aufrufen?
Top
#6
Zitat:ich müsste doch jedes mal spezifisch bei i = 1 Textbox1Aenderung, bei i = 2 Textbox2Aenderung usw. aufrufen?
ja, das ist richtig.
Schöne Grüße
Berni
Top
#7
Und wie?

Call TextBox1Aenderung
--->
Call ("TextBox" & i & "Aenderung")  

Funktioniert so leider nicht.


Keine Ahnung wieso - aber es funktioniert auch so genau so wie ich das möchte.
Top
#8
Hi

Textbox1 ist in deinem Bsp. mit C30 verknüpft. Welche Zelle ist den mit Textbox2 verknüpft und so weiter.
Evtl. brauchst du die Change Prozeduren gar nicht.
Code:
Private Sub AllesUebernehmen_click()
Dim i As Integer
Worksheets("Input").Activate
For i = 1 To 12
   If Controls("TextBox" & i).Visible = True Then
       Cells(30, i + 2).Value = Controls("TextBox" & i).Value
   Else
       Cells(30, i + 2).Value = ""
   End If
Next
End Sub
[-] Folgende(r) 1 Nutzer sagt Danke an Elex für diesen Beitrag:
  • StrammerMax
Top
#9
TextBox2 = C31
TextBox3 = C32
..

So ist die Logik.

Die Change Methode brauche ich, da ich dort Werte eingebe, die direkt übernommen werden soll.
Top
#10
Schreibe zB

Code:
Private Sub TextBox1Aenderung()
Worksheets("Input").Activate
Range("C30").Value = TextBox1.Value
End Sub
 in ein allgemeines Modul (ich denke, in der Userform wird es nicht funktionieren, wäre aber zu testen). Dann kannst du mit
Code:
Private Sub AllesUebernehmen_click()
Dim i As Integer
Worksheets("Input").Activate
For i = 1 To 12
    If Controls("TextBox" & i).Visible = True Then
        Application.Run "TextBox" & i & "Aenderung"
    Else
        Cells(30, i + 2).Value = ""
    End If
Next
End Sub
die Prozeduren aufrufen.
Schöne Grüße
Berni
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste