Computerhilfen.de Logo
Forum
Tipps
News
Frage stellen

VBA Code, Fehler beim kompilieren

Guten Abend, komme mit Fehler beim Kompilieren nicht weiter. Mir fehlt ein wenig Unterstützung. Ich erlaube mir mal den Text hier zu veröffentlichen.
Der Fehler steckt in der Zeile: "  If Trim(CStr(txtPosNr.Text)) = "" Then  "

Nun mal der Text meines Codes:
Private Sub cmdSave_Click()

    Dim txtPosNr As Integer  '   String
    Dim txtNummer As String
    Dim txtNachname As String 'lang
    Dim txtVorname As String 'lang
    Dim txtStrasse As String
    Dim txtPLZ As String
    Dim txtWohnort As String
    Dim txtTelefon As String
    Dim txtGemarkung As String
    Dim txtJagdbezirk As String
    Dim txtFlurstueck As String
    Dim txtFlursurstueckNr As String, txtFlaeche As String, txtGemarkung2 As String, txtJagdbezirk2 As String, txtFlurstueck2 As String, _
    txtFlurstueckNr2 As String, txtFlaeche2 As String, txtGemarkung3 As String, txtJagdbezirk3 As String, txtFlurstueck3 As String, _
    txtFlurstueckNr3 As String, txtFlaeche3 As String, txtGemarkung4 As String, txtJagdbezirk4 As String, txtFlurstueck4 As String, _
    txtFlurstueckNr4 As String, TxTFlaeche4 As String, TxTZahlung As String

    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    If lstData.ListIndex = -1 Then Exit Sub
    If Trim(CStr(txtPosNr.Text)) = "" Then
        MsgBox "Sie müssen mindestens eine Nummer eingeben!", vbCritical + vbOKOnly, "FEHLER!"
    Exit Sub
    End If
    ausuf = True
    If seekArb(txtPosNr, rngRow) Then
    Worksheets("Tabelle1").Unprotect
    ThisWorkbook.RefreshAll
    If rngRow.Cells(, colAtPosNr).Value <> CLng(Trim(CStr(txtPosNr.Text))) Then mvntWert = rngRow.Cells(, colAtPosNr).Value: rngRow.Cells(, colAtPosNr).Value = Trim(CStr(txtPosNr.Text))
    If rngRow.Cells(, colAtNummer).Value <> txtNummer.Text Then mvntWert = rngRow.Cells(, colAtNummer).Value: rngRow.Cells(, colAtNummer).Value = txtNummer.Text
    If rngRow.Cells(, colAtAnrede).Value <> cboAnrede.Text Then mvntWert = rngRow.Cells(, colAtAnrede).Value: rngRow.Cells(, colAtAnrede).Value = cboAnrede.Text
    If rngRow.Cells(, colAtNachname).Value <> txtNachname.Text Then mvntWert = rngRow.Cells(, colAtNachname).Value: rngRow.Cells(, colAtNachname).Value = txtNachname.Text
    If rngRow.Cells(, colAtVorname).Value <> txtVorname.Text Then mvntWert = rngRow.Cells(, colAtVorname).Value: rngRow.Cells(, colAtVorname).Value = txtVorname.Text

Der Code geht natürlich noch weiter, aber bis der Fehler markiert wird wenn ich starte ist hier vielleicht schon ersichtlich.  Einer erklärenden Nachricht sehe ich mit Dank entgegen. Lisa



Antworten zu VBA Code, Fehler beim kompilieren:

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Hallo Lisa,

du hast in der ersten Zeile die Variable txtPosNr als Integer definiert:

Dim txtPosNr As Integer  '   String
Die Funktionen "Trim(CStr(txtPosNr.Text))" sind aber String-Funktionen. Entweder lässt du die beiden Funktionen weg, oder deklarierst txtPosNr als String:

Dim txtPosNr As String  '   String

Klappt das dann?

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Hallo und Danke für die Antwort. Jetzt habe ich einiges im Code verändert, was allerdings ein neues Problem aufwirft (Das alte Problem behoben). Wenn ich einen neuen Datensatz eingebe, wird der in der ersten Zeile wo eigentlich die Überschriften sind, eingetragen. Das Einfügen als "nächsten" Datensatz funktioniert nicht. Vielleicht ist jemand so nett und schaut sich den Code mal an. Hier mal beide Code-Abschnitte, die ich denke, hier von Bedeutung sind.

Private Sub cmdNew_Click()
    Dim lZeile As Long, I As Long, eintrag As Long, rngRow As Range, antwort, indextb, ufelemente
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    ufelemente = Array("txtPosNr", "txtnummer", "txtAnrede", "txtNachname", "txtVorname", "txtStrasse", "txtPlz", "txtWohnort", "txtTelefon", _
    "txtGemarkung", "txtJagdbezirk", "txtFlurstueck", "txtFlurstueckNr", "txtFlaeche", _
    "txtGemarkung2", "txtJagdbezirk2", "txtFlurstueck2", "txtFlurstueckNr2", "txtFlaeche2", _
    "txtGemarkung3", "txtJagdbezirk3", "txtFlurstueck3", "txtFlurstueckNr3", "txtFlaeche3", _
    "txtGemarkung4", "txtJagdbezirk4", "txtFlurstueck4", "txtFlurstueckNr4", "TxTFlaeche4", _
    "TxTZahlung")
    indextb = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30)
    lZeile = wsat.Cells(Rows.Count, 1).End(xlUp).Row + 1
    eintrag = 0
    If seekArb(txtPosNr, rngRow) Then
        Else
            Exit Sub
    End If
    For I = 0 To UBound(ufelemente)
        If Trim(Me.Controls(ufelemente(I))) <> Trim(rngRow.Cells(, indextb(I)).Value) Then
            mvntWert = Trim(rngRow.Cells(, indextb(I)).Value)
            eintrag = eintrag + 1
        End If
    Next I
    If eintrag > 0 Then cmdSave_Click
    antwort = MsgBox("Wollen Sie einen neuen Datensatz anlegen?", 4, "Neuer Datensatz")
    If antwort = 6 Then
        lstData.ListIndex = lstData.ListCount - 1
        eintrag = 0
        For I = 2 To UBound(ufelemente)
            If Trim(Me.Controls(ufelemente(I))) <> "" Then eintrag = eintrag + 1
        Next I
        If txtPosNr = lZeile - 1 And txtnummer = "NeuMtgld" And eintrag = 0 Then
            MsgBox "Es liegt noch ein unbearbeiter neuer Datensatz vor!" & vbNewLine & "Es wird keine neuer Satz erstellt!", , "Abbruch Datensatzerstellung"
            Exit Sub
        End If
        neusatz = True
        wsat.Cells(lZeile, 1) = CStr(lZeile)
        wsat.Cells(lZeile, 2) = CStr("NeuMtgld")
        wsat.Cells(lZeile, 1) = WorksheetFunction.Max(wsat.Columns(1)) - 1
        lstData.AddItem
        lstData.List(lstData.ListCount - 1, 1) = CStr("NR" & lZeile)
        lstData.ListIndex = lstData.ListCount - 1
        neusatz = False
    End If
    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic
    Call Calculate
End Sub

Und folgender Code

Private Sub ListboxLaden()
    Dim arrSp(): arrSp = Array(0, 30, 47, 49, 95, 55, 80, 85, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
    Dim arrTab(), arrList(), I&, j&
    If ArbTab.ListObjects(1).DataBodyRange Is Nothing Then
        lstData.Clear
        Exit Sub
    End If
    arrTab = Tabelle1.ListObjects(1).DataBodyRange.Value
    ReDim arrList(1 To UBound(arrTab, 1), 1 To UBound(arrTab, 2) + 1)
    For I = 1 To UBound(arrList)
        arrList(I, 1) = I
        For j = 2 To UBound(arrList, 2)
            arrList(I, j) = arrTab(I, j - 1)
        Next j
    Next I
    With lstData
        .ColumnCount = UBound(arrSp) + 1
        .ColumnWidths = Join(arrSp, "; ")
        .List = arrList
    End With
End Sub

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Ohne den Code jetzt getestet zu haben, wäre meine Vermutung deine Zeilenzuweisung:

lZeile = wsat.Cells(Rows.Count, 1).End(xlUp).Row + 1
Ersetze die mal zum Testen durch diese 2 Zeilen:

lZeile = wsat.Cells(Rows.Count, 1).End(xlUp).Row
lZeile = IIf(lZeile < 2, 2, lZeile + 1)


Klappt das?

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Schade, das funktioniert leider auch nicht. Ohne die Datei einzusehen ist das wahrscheinlich nicht möglich, aber das ist ja im Forum nicht möglich. Danke und Gruß


« Programme deinstallieren McAfee und AviraFirefox 121.0 / 121.0.1 »
 

Schnelle Hilfe: Hier nach ähnlichen Fragen und passenden Tipps suchen!

Fremdwörter? Erklärungen im Lexikon!
Hypertext
Hypertext ( zu Deutsch: Übertext) ein ein von dem Informatiker Theodore L. Nelson in den sechziger Jahren geprägter Begriff für Text, der dreidimensional g...

Textur
Unter einer Textur versteht man eine Oberflächenstrukur, die ein bestimmtes Material simuliert, wie Holz, Tapete oder Metall. Bei der 3D-Computeranimation bezeichnet...

Private Session
Private Session ist ein Modus, in dem kein Verlauf oder Chronik angelegt wird. Diese Funktion gibt es bei den üblichen Internet Browsern wie Internet Explorer, Apple...