Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema CheckBox
BildScreenshot zu CheckBox CheckBox-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema CommandButton
BildScreenshot zu CommandButton CommandButton-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema Userform
BildScreenshot zu Userform Userform-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema Label
BildScreenshot zu Label Label-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema TextBox
BildScreenshot zu TextBox TextBox-Seite mit Beispielarbeitsmappe aufrufen

Userform Maske

Betrifft: Userform Maske von: Petersdorff
Geschrieben am: 20.05.2008 10:32:13

Hallo, ich möchte mit der Formular schauen ob in Spate E Zeile 5 was steht und dann in die darunterliegene Zeile schreiben. Er fängt aber immer von der Spalte A an.
In der ersten Maske geben wir die daten von Sparte A -D an und in der 2 Maske geben wir dann 10 oder 20 dazugehörige daten an. Die sollen aber abwärts in Spalte E-M. Wenn ich aber wieder in die erste maske gehe möchte ich dann unterhalb von der letzten eingabe Spalte E anfange (Spalte A-D).
Viele Dank für die Bemühungen.
anbei den bisherigen VBA Code.

Option Explicit

Private Sub CommandButton1_Click()

    Dim liZeile As Integer
    Dim lcTXTbox As Control, liSpalte As Integer
    
    liZeile = 5
    
        Do Until Sheets("Verpackungsdaten").Range("E" & liZeile) = ""
            liZeile = liZeile + 1
        Loop
    
    liSpalte = 65
    
        For Each lcTXTbox In Controls
            If TypeName(lcTXTbox) = "TextBox" Then
                    If IsNumeric(lcTXTbox) = True And Not IsDate(lcTXTbox) = True Then
                            Sheets("Verpackungsdaten").Range(Chr(liSpalte) & liZeile).Value =  _
Val(lcTXTbox)
                        Else
                            Sheets("Verpackungsdaten").Range(Chr(liSpalte) & liZeile).Value =  _
lcTXTbox
                    End If
                lcTXTbox = ""
                liSpalte = liSpalte + 1
            End If
        Next

End Sub



Private Sub CommandButton2_Click()
Unload Me
End Sub



Private Sub CommandButton3_Click()
Unload Me
End Sub



Private Sub UserForm_Click()
End Sub



Grüße Andreas

  

Betrifft: AW: Userform Maske von: fcs
Geschrieben am: 20.05.2008 11:24:48

Hallo Andreas,

du hast im Code liSpalte auf 65 gesetzt das ist dann mit Chr(liSpalte) = Spalte A
Zeilenvariablen sollten immer als Long und nicht als Integer deklariert werden. bei mehr als 32000 ungerad Zeilen gibt es sonst Probleme wegen des Wertebereichs für Integer-Variablen.

Es ist im VBA-Code meistens einfacher und übersichtlicher mit "Cells" statt mit "Range" zu arbeiten, um Daten in Zellen zu schreiben. Das ist einfacher zu programmieren und auch ein wenig schneller bei der Verarbeitung der Daten.

Dein Code schaut dann wie folgt aus, wobei ich aus Gründen der Vereinfachung das Tabellenblatt einer Variablen zugewiesen hab.

Für das andere Userform kannst du dann den gleichen Code zur Ermittlung der nächsten freien Zeile für die Eintrage in A bis D verwenden wie hier.

Gruß
Franz

Private Sub CommandButton1_Click()

    Dim liZeile As Long
    Dim lcTXTbox As Control, liSpalte As Integer
    Dim objWksVerp As Worksheet
    Set objWksVerp = Sheets("Verpackungsdaten")
    
    With objWksVerp
        'Nächste freie Zeile in Spalte 5 (E) suchen
        If .Cells(.Rows.Count, 5).End(xlUp).Row < 5 Then
          liZeile = 5 '1. Auszufüllende Zeile
        Else
          liZeile = .Cells(.Rows.Count, 5).End(xlUp).Row + 1
        End If
    End With
    
    liSpalte = 5 'Spalte E - Startspalte für das Eintragen der

    For Each lcTXTbox In Controls
        If TypeName(lcTXTbox) = "TextBox" Then
            If IsNumeric(lcTXTbox) = True And Not IsDate(lcTXTbox) = True Then
                    objWksVerp.Cells(liZeile, liSpalte).Value = Val(lcTXTbox)
                Else
                    objWksVerp.Cells(liZeile, liSpalte).Value = lcTXTbox
            End If
            lcTXTbox = ""
            liSpalte = liSpalte + 1
        End If
    Next
End Sub




 

Beiträge aus den Excel-Beispielen zum Thema "Userform Maske"