Anzeige
Archiv - Navigation
1956to1960
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

VBA kopiert Zahlen in falschem Format

VBA kopiert Zahlen in falschem Format
04.01.2024 14:06:42
logistiker123
Hallo zusammen,

Ich will mittels VBA daten aus einer Datei (SAP Report mit dem Typ Microsoft Excel 97-2003-Arbeitsblatt) in eine andere Excel Datei kopieren. Die Daten enthalten Texte und Zahlen. Die Zahlen in der Quelldatei sind so formatiert, dass es 1000er-Trennpunkte gibt, aber die Zelle trotzdem als Standard formatiert ist. Dafür habe ich nachfolgende VBA erstellt. Das Problem ist allerdings, dass beim kopieren der Daten bspw. die Zahl 2.000 als 2,000 eingefügt wird - . Mit meiner Schleife mache ich das Komma weg, so bleibt aber nur eine 2 als Ergebnis übrig, was ja falsch ist. Alle Zahlen die eine Null am Ende haben, werden ohne die Null kopiert: Bsp.: 2.000 wird zu 2; 1500 wird zu 1,5; 3.350 wird zu 335 usw. Was mache ich falsch? Auch eine Formatierung der Zellen in der Ursprungsdatei in "Genaral" bringt nichts.. Danke für eure Hilfe. Beispieldateien anbei.

Sub TP_Edit()

'T+P aus Drive Ordner kopieren und in Data einfügen
Dim ZBU3Date As String
Dim quelleDatei As Workbook
Dim zielDatei As Workbook
Dim quelleBereich As Range
Dim zielBereich As Range
Dim folderPath As String
Dim CurrentDate As String
Dim CurrentWeek As String
Dim EndDate As String

folderPath = ActiveWorkbook.ActiveSheet.Range("C9").Value
ZBU3Date = ActiveWorkbook.ActiveSheet.Range("C18").Value
CurrentDate = ActiveWorkbook.ActiveSheet.Range("C14").Value
CurrentWeek = ActiveWorkbook.ActiveSheet.Range("C6").Value
EndDate = ActiveWorkbook.ActiveSheet.Range("C19").Value

Application.ScreenUpdating = False

Application.DisplayAlerts = False
'T+P Daten extrahieren

' Setzen Sie den Pfad zur Quelldatei ein
Dim quellePfad As String
quellePfad = folderPath & "\" & "ZBU3_" & ZBU3Date & ".XLS"

' Setzen Sie den Pfad zur Zieldatei ein
Dim zielPfad As String
zielPfad = folderPath & "\" & "ZBU3W_Master.xlsb"

' Öffnen Sie die Quelldatei
Set quelleDatei = Workbooks.Open(quellePfad)

Range("F3:O5").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.NumberFormat = "General"

' Öffnen Sie die Zieldatei
Set zielDatei = Workbooks.Open(zielPfad)

' Setze den Quellbereich auf der Quelldaten bis zur letzten Zeile
LetzteZeile = quelleDatei.Sheets("ZBU3_" & ZBU3Date).Cells(Rows.Count, 1).End(xlUp).Row

' Definieren Sie den Bereich, den Sie kopieren möchten (angenommen, es sind Daten in Spalte A bis C)
Set quelleBereich = quelleDatei.Sheets(1).Range("A3:I" & LetzteZeile)

'Zielbereich der neuen Spalte
Set zielBereich = zielDatei.Sheets("XLSB").Range("A3:I" & LetzteZeile)

' Kopiere den Quellbereich in den Zielbereich
quelleBereich.Copy Destination:=zielBereich

' Entferne Kommas aus den Zellen im Zielbereich
Dim cell As Range
For Each cell In zielBereich
If InStr(1, cell.Value, ",", vbTextCompare) > 0 Then
cell.Value = Replace(cell.Value, ",", "")
End If
Next cell

' Definieren Sie den Bereich, den Sie kopieren möchten (angenommen, es sind Daten in Spalte A bis C)
Set quelleBereich = quelleDatei.Sheets(1).Range("J3:S" & LetzteZeile)

'Zielbereich der neuen Spalte
Set zielBereich = zielDatei.Sheets("XLSB").Range("M3:V" & LetzteZeile)

' Kopiere den Quellbereich in den Zielbereich
quelleBereich.Copy Destination:=zielBereich

'Formeln runterziehen
Range("J3:L3").Select
Selection.AutoFill Destination:=Range("J3:L" & LetzteZeile), Type:=xlFillDefault

'Filter einsetzen
ActiveWorkbook.Sheets("XLSB").Range("A2:V2").AutoFilter Field:=12, Criteria1:=">0"

' Schließt ZBU3 Datei ohne zu speichern
quelleDatei.Close SaveChanges:=False

'Speichert ZBU3W P+T Datei
zielDatei.SaveAs folderPath & "\" & "ZBU3W_" & CurrentDate & " P+T " & CurrentWeek & "-" & EndDate & ".xlsb", FileFormat:=50

zielDatei.Close SaveChanges:=False
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub


https://www.file-upload.net/download-15248477/ZBU3Beispieldatei.xls.html

https://www.file-upload.net/download-15248476/ZBU3W_Master.xlsb.html

Danke euch im Voraus!

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA kopiert Zahlen in falschem Format
04.01.2024 14:17:07
ralf_b
ich wollte dir eigentlich in deinem Thread im vba-forum grad was schreiben aber hier ist auch gut.
und zwar liest sich dein Code irgendwie so als käme der von chat-gpt oder dergleichen.
Deine Formatprobleme sind die neu oder gabs die schon immer?
AW: VBA kopiert Zahlen in falschem Format
04.01.2024 14:51:10
logistiker123
Hallo ralf,

sorry, dachte mir: "Je mehr Foren, desto besser die Hilfe" :D

Also, tatsächlich hast du es gut erkannt.. ein bisschen Hilfe von ChatGPT ist mit dabei.. der Code, den ich hier teile ist ein Teil eines riesigen Makros, der ein Excel Report mit Daten aus verschiedenen Excel Dateien kopiere und in die Master-Datei einfüge. Alles samt SAP Downloads. Bei allen anderen Dateien habe ich keine Probleme nur eben bei diesem einzigen SAP-Download..

Anzeige
AW: VBA kopiert Zahlen in falschem Format
04.01.2024 14:28:11
Yal
Hallo,

es wäre am einfachste, zuerst die Trennzeichen wie in der Quelle zu setzen, die Datei öffnen, Trennzeichen auf Ziel umstellen, dann Datei speichern.
Unter "Optionen", "Erweitert" kann die "trennzeichene vom Betriebsystem übernehmen" anschalten und die eigene setzen.
Das unter Verwendung vom Makrorecording ergibt so etwas wie:
    Application.UseSystemSeparators = False 'Falls deutsches Windows, ignorieren und eigene verwenden:

Application.DecimalSeparator = "."
Application.ThousandsSeparator = ","
Application.UseSystemSeparators = True 'wieder auf Betriebssystem setzen


Ich schätze, Du bist in der Lagen etwas daraus zu machen...

VG
Yal
Anzeige
AW: VBA kopiert Zahlen in falschem Format
04.01.2024 15:08:50
logistiker123
Hey Yal,

das sieht interessant aus.. ich versuche mich mal daran. Danke dir!
AW: VBA kopiert Zahlen in falschem Format
04.01.2024 16:19:07
logistiker123
hat leider nichts gebracht.. egal wo ich die befehle eingefügt habe, das ergebnis bleibt gleich :(
AW: VBA kopiert Zahlen in falschem Format
04.01.2024 17:53:39
Yal
Hallo,

ich kann deine Quelldateien nicht öffnen, da Firmenrechner.

Ich nehme an, die Quelldatei beinhaltet nur ein Blatt. Man kann den Code wie folgt reduzieren:

Sub TP_Edit()

'T+P aus Drive Ordner kopieren und in Data einfügen
Dim Qwb As Workbook 'Q für Quelle
Dim Zwb As Workbook 'Z für Ziel
Dim LetzteZeile As Long


Application.ScreenUpdating = False
Application.DisplayAlerts = False
Set Qwb = QuellDatei_öffnen
Set Zwb = Workbooks.Open(Range("C9").Value & "\" & "ZBU3W_Master.xlsb") 'Zieldatei öffnen
'Kopiererei
With Qwb.Sheets("ZBU3_" & Range("C18").Value)
LetzteZeile = .Cells(Rows.Count, 1).End(xlUp).Row ' Setze den Quellbereich auf der Quelldaten bis zur letzten Zeile
.Range("A3:I" & LetzteZeile).Copy Destination:=Zwb.Sheets("XLSB").Range("A3")
.Range("J3:S" & LetzteZeile).Copy Destination:=Zwb.Sheets("XLSB").Range("M3")
End With
Qwb.Close SaveChanges:=False ' Schließt Quelldatei ohne zu speichern
'Formatierung in der Zieldatei
With Zwb.Sheets("XLSB")
.Range("J3:L3").AutoFill Destination:=Range("J3:L" & LetzteZeile), Type:=xlFillDefault 'Formeln runterziehen
.Range("A2:V2").AutoFilter Field:=12, Criteria1:=">0" 'Filter einsetzen
End With
'Speichern + schliessen
Zwb.SaveAs Range("C9").Value & "\ZBU3W_" & Range("C14").Value & " P+T " & Range("C6").Value & "-" & Range("C19").Value & ".xlsb", FileFormat:=50 'Speichert ZBU3W P+T Datei
Zwb.Close SaveChanges:=False

Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub

Function QuellDatei_öffnen() As Workbook

'Annahme: wir arbeiten mit einem deutschen Windows. Englische Trenner setzen
Application.UseSystemSeparators = False
Application.DecimalSeparator = "."
Application.ThousandsSeparator = ","
'Datei öffnen
Set QuellDatei_öffnen = Workbooks.Open(Range("C9").Value & "\ZBU3_" & Range("C18").Value & ".xls")
'Spalte F bis O als "General"-Formt setzen
QuellDatei_öffnen.Worksheets(1).Range("F:O").NumberFormat = "General"
'Deutsche Trenner setzen
Application.UseSystemSeparators = True 'wieder auf Betriebssystem setzen
End Function
Nicht getestet.

VG
Yal
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige