folgende Situation: Ich erstelle für die Arbeit ein Excel-Sheet, wo in einer Zelle (Range"RGNR") die sich darin befindliche Zahl fortlaufend mit jedem öffnen um 1 erhöht (automatisch, daher alles in ThisWorkbook). Diese Zahl soll als Rechnungsnummer für die Kollegen dienen. Im Normalablauf wird die Zelle kopiert und in ein andere Mappe eingfügt. Die Rechnungsnummer soll als String im Format "00000" kopiert werden, also zB.: "00216" wenn die Zahl 216 ist. Beim Schließen wird die die Zahl in derselben Mappe zusätzlich auf ein anderes Sheet fürs Protokoll kopiert.
hier der verwendete Code:
Option Explicit
Public strRGNR As String
Private Sub Workbook_Open()
strRGNR = WorksheetFunction.NumberValue(Worksheets("RG-Nr").Range("RGNR").Value, ".", ",")
strRGNR = strRGNR + 1
strRGNR = Format(strRGNR, "00000") 'korrekte Darstellung als "00216" ist aber dennoch ein Zahl
Worksheets("RG-Nr").Range("RGNR").Value = strRGNR
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim lngLastRow As Integer
Dim shLog As Worksheet
Set shLog = Worksheets("Log")
lngLastRow = shLog.Cells(shLog.Rows.Count, "A").End(xlUp).Row
shLog.Cells(lngLastRow + 1, 1).Value = Format(strRGNR, "00000") '216 wird trotz Formatvorgabe abgespeichert
shLog.Cells(lngLastRow + 1, 2).Value = Format(Now, "mm/dd/yyyy HH:mm:ss")
shLog.Cells(lngLastRow + 1, 3).Value = Application.UserName
ThisWorkbook.Save
End Sub
Mein Problem bzw. Frage:"RGNR" wird zwar korrekt dargestellt (also "00216"), beim kopieren als Wert in eine andere Mappe wird aber deutlich das es eine Zahl ist, also statt "00216" wird 216 kopiert. Und auf dem Protokollsheet wird dirket als Nummer gespeichert. Ich konnte es final dadurch lösen, dass ich "RGNR" und das Protokoll-Sheet in Excel als Text-Felder formatierte. Ich würde aber dennoch gerne verstehen, warum es nicht mit dem Code allein funktioniert? Ich dachte wenn ich Format(...) verwerwende, wird die Zahl als String so oder so gespeichert? Hatte auch Varianten probiert, wo die Zahl mit CStr konvertiert wird, auch ohne Erfolg.