Microsoft Excel

Herbers Excel/VBA-Archiv

Komische Fehlermeldung


Betrifft: Komische Fehlermeldung
von: Blangmantl
Geschrieben am: 10.12.2018 16:40:27

Hallo ich habe folgendes Problem:

in einem Modul berechne ich eine Mitgliedernummer, die dann mit einem Präfix in eine Tabelle eingetragen wird.

Den Code des Moduls habe ich begefügt, das merkwürdige, wenn in der Case Select Anweisung der erste Strang abgearbeitet wird (Dort wird als Mitgliedsnummer in die Tabelle FR-0001 eingetragen, da funktioniert es genau so wie ich es möchte.

Wen der zweite Case Strang ausgeführt wird, dann springt er bei genau der gleichen Anweiung (dort soll das Präfix FRE lauten, also FRE-0001 immer in eine Fehlermeldung und zeigt mir den Errorcode 1004 mit der Beschreibung: Die Numberformat Eigenschaft des Range Objects kann nicht festgelegt werden!

Ich verstehe das nicht, da die Zeilen ja bis auf den einen zusätzlichen Buchstabe identisch sind. Wer kann mir das erklären warum er da diesen Feher macht und wie kann ich das fixen:

Dim intMitgliedsNummerAlt As String, intMitgliedsNummerNeu As String, intLetzteZeile As String, intLetzteSpalte As String
Dim strAbfrageMB As String
Const bytErsteZeile As Byte = 8
Const intErsteMitgliedsnummer As Integer = 1

Sub MitgliedsnummerErstellen()
On Error GoTo err

Call BoxenFormularTexte

'Variablen deklarieren
Set ws = ThisWorkbook.Worksheets("Mitgliederliste")
intLetzteZeile = ws.Cells(Rows.Count, 2).End(xlUp).Row
intLetzteSpalte = ws.Cells(bytErsteZeile - 1, Columns.Count).End(xlToLeft).Column

'Abfragen welches Mitglied erstellt werden soll
Select Case strMitgliedsart
    'FR Mitglied anlegen
    Case Is = "FRMitglied"
        'Abfrage ob schon ein Mitglied vorhanden ist
        If intLetzteZeile < bytErsteZeile Then
            intMitgliedsNummerNeu = intErsteMitgliedsnummer 'nein
            strAbfrageMB = MsgBox("Es ist noch kein FR Mitglied vorhanden" _
            & vbCrLf & vbCrLf & "Soll jetzt ein neues FR Mitglied mit der" _
            & vbCrLf & "Mitgliedsnummer: FR-" & Format(intMitgliedsNummerNeu, "0000") _
            & vbCrLf & "erstellt werden?", vbYesNo + vbInformation, strVereinsname)
            'Abfragen ob erstellt werden soll oder nicht
            Select Case strAbfrageMB
                Case Is = 6
                    Call ZeileNachUnten
                    With ws.Cells(intLetzteZeile + 1, 2)
                        .Value = intMitgliedsNummerNeu 'Mitgliedsnummer in die Tabelle  _
schreiben
                        .NumberFormat = "FR-" & "0000" ' Format zuordnen, so dass mit Wert noch  _
gerechnet werden kann
                        .HorizontalAlignment = xlLeft  ' Horizontal Linksbündig und
                        .VerticalAlignment = xlCenter  ' Vertikal Mittig aurichten
                    End With
                Case Else
                    Exit Sub
            End Select
        Else
            intMitgliedsNummerAlt = ws.Cells(intLetzteZeile, 2).Value 'ja
            intMitgliedsNummerNeu = intMitgliedsNummerAlt + 1
            strAbfrageMB = MsgBox("Soll jetzt ein neues FR Mitglied mit der" _
            & vbCrLf & "Mitgliedsnummer: FR-" & Format(intMitgliedsNummerNeu, "0000") _
            & vbCrLf & "erstellt werden?", vbYesNo + vbInformation, strVereinsname)
            'Abfragen ob erstellt werden soll oder nicht
            Select Case strAbfrageMB
                Case Is = 6
                    Call ZeileNachUnten
                    With ws.Cells(intLetzteZeile + 1, 2)
                        .Value = intMitgliedsNummerNeu 'Mitgliedsnummer in die Tabelle  _
schreiben
                        .NumberFormat = "FR-" & "0000" ' Format zuordnen, so dass mit Wert noch  _
gerechnet werden kann
                        .HorizontalAlignment = xlLeft  ' Horizontal Linksbündig und
                        .VerticalAlignment = xlCenter  ' Vertikal Mittig aurichten
                    End With
                Case Else
                    Exit Sub
            End Select
        End If
        
        
    'Ehrenmitglied anlegen
    Case Is = "Ehrenmitglied"
        'Abfrage ob schon ein Mitglied vorhanden ist
        If intLetzteZeile < bytErsteZeile Then
            intMitgliedsNummerNeu = intErsteMitgliedsnummer 'nein
            strAbfrageMB = MsgBox("Es ist noch kein Ehrenmitglied vorhanden" _
            & vbCrLf & vbCrLf & "Soll jetzt ein neues Ehrenmitglied mit der" _
            & vbCrLf & "Mitgliedsnummer: FRE-" & Format(intMitgliedsNummerNeu, "0000") _
            & vbCrLf & "erstellt werden?", vbYesNo + vbInformation, strVereinsname)
            'Abfragen ob erstellt werden soll oder nicht
            Select Case strAbfrageMB
                Case Is = 6
                    Call ZeileNachUnten
                    With ws.Cells(intLetzteZeile + 1, 2)
                        .Value = intMitgliedsNummerNeu 'Mitgliedsnummer in die Tabelle  _
schreiben
                        .NumberFormat = "FRE-" & "0000" ' Format zuordnen, so dass mit Wert  _
noch gerechnet werden kann
                        .HorizontalAlignment = xlLeft  ' Horizontal Linksbündig und
                        .VerticalAlignment = xlCenter  ' Vertikal Mittig aurichten
                    End With
                Case Else
                    Exit Sub
            End Select
        End If
    Case Else
        Exit Sub
End Select

Exit Sub
err:
MsgBox "Es ist ein Fehler aufgetreten mit der Nummer: " _
& err.Number & vbCrLf & " und der Beschreibung:" & vbCrLf _
& err.Description & vbCrLf & "aufgetreten", vbExclamation, strFehlerInfo
End Sub



http://www.herber.de/bbs/user/125997.xlsm

  

Betrifft: AW: Komische Fehlermeldung
von: Daniel
Geschrieben am: 10.12.2018 17:15:14

Hi

manche Buchstaben und Zeichen haben im Textstring eine bestimmte Funktion.
so steht bspw der Punkt dafür, dass an dieser Stelle das Dezimalzeichen erscheinen soll und das "Y" dafür, dass an dieser Stelle eine Ziffer der Jahrszahl des Datum erscheinen soll.

Dein "E" ist der Indikator dafür, dass die Zahl in wissenschaftlicher Schreibweise mit Mantisse (vor dem E) und Exponent (nach dem E) dargestellt werden so.
da du aber keine Nullen für die Mantisse vor dem "E" stehen hast, ist dieses Zahlenformat nicht zulässig und daher der Fehler.

Wenn du solche "Funktionszeichen" als normale Zeichen einsetzen willst, musst du den Text in Anführungszeichen setzen oder das "\" voranstellen, um anzuzeigen das jetzt das "E" eine "E" sein soll und nicht das Zeichen für Exponent.

.NumberFormat = """FRE-""0000"
.Numberformat = "FR\E-0000"
Gruß Daniel


  

Betrifft: AW: Komische Fehlermeldung
von: BLangmantl
Geschrieben am: 10.12.2018 17:34:39

Hallo Daniel, danke für deine Erklärung werde das später testen und dann Feedback geben, da ich zur Zeit nicht am Rechner bin. Das mit der Funktion, da muss man erstmal drauf kommen. Leider findet man bei den Microsofterklärungen keine brauchbaren Hinweise darauf, zumindest habe ich nix gefunden.Aber Ansicht erscheint mir deine Erklärung plausibel.

Danke daher gebe heute Nacht noch Feedback


  

Betrifft: AW: Komische Fehlermeldung
von: BLangmantl
Geschrieben am: 11.12.2018 16:35:30

Danke Daniel es funktioniert jetzt siper