Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1856to1860
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Zahl mit fixer Ziffernzahl als String

Zahl mit fixer Ziffernzahl als String
23.11.2021 12:14:16
CoAdmiral
Hallo liebes Forum,
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.

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zahl mit fixer Ziffernzahl als String
23.11.2021 12:49:34
Daniel
HI
das liegt an der impliziten Typumwandlung von Excel.
jeder Wert, den du in eine Zelle schreibst, ist nunächst mal immer ein Text bzw eine Zeichenfolge.
Excel schaut sich dann diese Zeichenfolge an und prüft, ob diese eine Formel, eine Zahl, Datum/Zeit oder ein Wahrheitswert sein könnte und wandelt dann die Zeichenfolge in das entsprechende um.
Die Zeichenfolge "00216" erkennt Excel trotz der führenden Nullen als Zahl und macht dann eben die Zahl 216 daraus.
um diese Implizite Typumwandlung auszuschalten gibt es verschiedene Wege:
a) man stellt der übergebenen Zeichenfolge das Texterkennungzeichen ' voran (also das Hochkomma)

shLog.Cells(lngLastRow + 1, 1).Value = "'" & Format(strRGNR, "00000")
b) man formatiert die Zelle vor der Übergabe mit dem Zahlenformat TEXT

shLog.Cells(lngLastRow + 1, 1).Numberformat = "@"
shLog.Cells(lngLastRow + 1, 1).Value =  Format(strRGNR, "00000")
c) man übergibt den Werte als Formel

shLog.Cells(lngLastRow + 1, 1).Value = "=""" & Format(strRGNR, "00000") & """"
dann könnte man ihn kopieren und an gleicher Stelle als Wert einfügen (mit Copy + PasteSpecial xlpastevalues), aber das ist unsicher, dann macht Excel sofort eine Zahl daraus, wenn man einmal in die Zelle klickt und mit Enter abschließt.
Gruß Daniel
Anzeige
AW: Zahl mit fixer Ziffernzahl als String
23.11.2021 13:35:11
CoAdmiral
Danke Daniel! :)

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige