3k Aufrufe
Gefragt in Tabellenkalkulation von
Hallo Excel Gurus!

Ich hoffe es ist jemand da draussen der meine Anfrage versteht und mir weiterhelfen kann - vorab - DANKE für jede Hilfe die mich vor einem Wochenende mit Excel Listen verschont :)

Folgende Situation:
Ich habe 500 seperate Excel Arbeitsmappen - alle im gleichen Ordner (c:\testdaten) mit unterschiedlichen Namen.

Alle wurden nach dem gleichen Muster exportiert.
Blatt: Info | Blatt: PQ

Im Blatt PQ stehen in Zeile 1 (befüllt A1: AZ:1) Bezeichnungen und darunter ab Zeile 2 tausende Artikel. Leider sind die Bezeichnungen in der Zeile 1 falsch.

Ich habe nun eine bereinigte Excel Arbeitsmappe bereinigt.xlsm wo die Zeile 1 mit den richtigen Bezeichnungen drinnen steht.

Und nun muss ich alle Excel Mappen aufmachen > Copy / Paste (falsche Zeile 1 raus - richtige Zeile 1 überschreiben). Gibt es eine möglichkeit dies per VBA Script automatisch zu machen - sprich:

Öffne alle Excel Dateien im Ordner c:\testdaten und überschreibe die Zeile mit den richtigen Daten aus der geade offenen bereinigten Excel Datei (bereinigt.xlsm)


Ich stehe hier leider an (VBA ist "noch" nicht meine Stärke :)....

Danke!

7 Antworten

0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi all ^^

ein Beispiel

gruss nighty

Sub WorksheetCopyWerte()
Call EventsOff
Dim DateiName As String
DateiName = Dir("C:\testdaten\" & "*.xlsm")
Do While DateiName <> ""
If ThisWorkbook.Name <> DateiName Then
Workbooks.Open Filename:="C:\testdaten\" & DateiName
ThisWorkbook.Worksheets("WkstnameQuelle").Range("A1:Z1").Copy Workbooks(DateiName).Worksheets("WkstnameZiel").Range("A1")
Workbooks(DateiName).Close SaveChanges:=True
End If
DateiName = Dir
Loop
Call EventsOn
End Sub

Public Sub EventsOff()
With Application
.DisplayAlerts = False
.ScreenUpdating = False
.EnableEvents = False
.Calculation = xlCalculationManual
End With
End Sub

Public Sub EventsOn()
With Application
.DisplayAlerts = True
.ScreenUpdating = True
.EnableEvents = True
.Calculation = xlCalculationAutomatic
End With
End Sub
0 Punkte
Beantwortet von
Ohne viel Worte :)

DANKE!!!

Ich habs probiert und an und für sich passt es - nur komme ich bei Ausführen immer nur Schrittweise
weiter. Bei debuggen läuft es mit F8 immer weiter - am Ende habe ich jedoch nocj den Fehler beim Kopilieren > Nach End Sub, können nur
Kommentare stehen. Was übersehe ich? Irgendwo die Schleife falsch....?

Merci!
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi all ^^

sind die worksheetnamen angepasst ?
oder
verbundene zellen
oder
blattschutz
oder
Datei nur lesbar
oder
schreibfehler

gruss nighty
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi all ^^

oder lade mal eine dummydatei hoch,das ich drueber schauen koennte

fileupload oder aehnliche sind gratis ^^

im xls Format bitte

gruss nighty
0 Punkte
Beantwortet von
hi nighty - danke für deinen Einsatz!!

Den "Fehler" habe ich beim Debuggen gefunden und wäre soweit zufrieden. AAAABER ich hab ein DÄMLICHES Problem übersehen.
In den Original XLS / CSV (die Daten kommen aus SAP) sind anscheinend die KOMMA PUNKTE anders hinterlegt als gedacht.
Alle Spalten werden richtig befüllt ausser die PREIS Spalte :( - hier werden die Komma bei mehr als 2 Nachkommastellen rausgelöscht
usw. (aus 2,323 EUR werden 2323 EUR).

Nach langem testen habe ich mal die Original XLS/CSV Daten geöffnet und Punkt / Komma vertauscht (hier stehen in Spalte J und K die Preise mit Komma formatiert)

Sub komma_punkt()
Dim c As Range
For Each c In Sheets(1).UsedRange
If IsNumeric(c) Then
c.NumberFormat = "@"
c.Value = CStr(Replace(c.Value, ",", "."))
End If
Next
End Sub

Ergo: dein Import lädt die Zahlen nun mit Punkt als Trennzeichen und der Export in die TXT funktioniert.

Jetzt stelle ich die Frage ob ich tatsächlich alle Daten vorher "bereinigen" muss oder ob ich beim öffnen schon die Spalte AE richtig mit korreten Preisen
aus den XLS / CSV (Spalte J und Spalte K) einbinden kann.

Ich hoffe ich denke hier nicht zu kompliziert - stelle gerne 2 Testfiles am Server falls benötigt.

Vorab besten Dank, fkaB
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi fkaB ^^

setze dein makro unter die open zeile,davon die dim Anweisung unter die 3 zeile setzen

dann waeren alle Dateien korrigiert

wahrscheinlich versteh ich nur Bahnhof,ich bin zur zeit troll geschaedigt *g*

gruss nighty
0 Punkte
Beantwortet von
Ich möchte mit dem Makro auf Daten in einer anderen Datei zugreifen. Dazu habe ich die folgende Anweisung gefunden.
Obwohl diese bei den Usern in anderen Foren funktioniert, kriege ich immer den Laufzeitfehler 438 Objekt unterstützt diese Eigenschaft oder Methode nicht.

Ich denke, das sollte doch ausreichend definiert sein.
Windows("Datendatei.xlsx") die Datei wird angesprochen,
Sheets("Tabelle4") die Tabelle in der Datei
Range("D6:D17") der Bereich in der Tabelle.



Sub Test()
Windows("Datendatei.xlsx").Sheets("Tabelle4").Range("D6:D17").Copy
End Sub


Ich habe keine Ahnung was da falsch ist. Wer kann mir helfen?
...