4.8k Aufrufe
Gefragt in Tabellenkalkulation von little-key Mitglied (333 Punkte)
Mein nächstes für mich unlösbares Problem:

In Spalte D stehen Einträge wie z.B. :
U:\Projekte\Websites\_ZooZemke\Cart\EXO360020.jpg

Nun möchte ich per Makro im Verzeichnis U:\GROSSER\BILDER\ nach diesem Dateinamen (EXO360020.jpg) suchen lassen, findet er die Datei, soll diese in das Verzeichnis U:\Projekte\Websites\_ZooZemke\Cart\ kopiert bzw. überschrieben werden, findet er diese nicht, soll die Datei in _NoImage.jpg umbenannt werden.

Und das Zeile für Zeile, also gesamte Spalte D.

Hierzu versagt mein ganzes Wissen, bitte dringend...., Kaffee gibts gratis, wenn ihr mal in der Nähe seid.

Gruß Mario

12 Antworten

0 Punkte
Beantwortet von little-key Mitglied (333 Punkte)
Hi malSchauen,

die csv-Datei wird ausgewählt mit Doppelklick und öffnet sich im eigenen Fenster.

Zu Deinen Fragen:
Es ist immer nur eine csv.
Wo und in welcher Tabelle ist egal.
Die Spaltenanzahl ist immer gleich.
Die Preise stehen immmer in "E".

Die Startdatei wo das "Private Sub Workbook_Open()" aufgerufen wird, muss offen bleiben, da dort noch mehr Makros aufgerufen werden, die die geöffnete/eingelesene csv weiter verarbeitet.

Mir geht es darum, dass der Preis in Spalte E erhalten bleibt, dann erfolgt eine Weiterverarbeitung mit div. Makros (aut. jpg-Suche, Umbenenungen und einiges mehr). Zum Schluss wird die csv wieder als csv abgespeichert unter anderm Namen und Pfad, aber als csv. Die Datei wird fürs Shopsystem im Internet benötigt, um Artikel automatisch einzulesen und Bilder zuzuordnen.

Hoffe, hab mich gut ausgedrückt.

Herzliche Grüße.

PS. Hab Dir hohhentlich nicht das Wochenende versaut.
0 Punkte
Beantwortet von
Hi,

Wenn Du jetzt die Preise in "E" mit Komma hast, und diese Datei dann als CSV dem ShopSystem vorlegst, kann dieses dann auch damit um? Oder will dieses dann den Preis wieder mit einem Punkt haben? Btw: Deine ExcelVersion hast Du mir noch nicht verraten (XL2000, 2003, ...?).

malSchauen ob folgender Code Dein Problem mit dem Einlesen lösen kann.
Wie bei Deiner bisherigen Version tauchen die Werte der CSV in einer neuen Mappe auf.
Unterschied: Es ist eine neue, ungespeicherte Mappe.

Sub CSV_Import()
'Variablen
'=========
Dim varFileNames As Variant
Dim strCurDir As String
Dim varScratch As Variant
Dim varArrCSV As Variant
Dim varArrOut As Variant
Dim lngCount As Long
Dim lngFF As Long
Dim wbkTarget As Workbook
'Konstanten
'==========
Const strPath As String = "U:\Grosser\WWG\WWG_WSTA" '<<<<<<anpassen!!!


'Dialog aufrufen
'==========================================
strCurDir = CurDir 'aktuellen Pfad auslesen
ChDrive strPath 'LW für GOFN-Dialog wechseln
ChDir strPath 'Pfad für GOFN-Dialog wechseln
varFileNames = Application _
.GetOpenFilename("CSV-Dateien (*.csv), *.csv", 1, "Datei wählen", , False) 'Filenamen holen
ChDrive strCurDir 'LW wiederherstellen
ChDir strCurDir 'Pfad wiederherstellen
If VarType(varFileNames) = vbBoolean Then 'bei Abbruch
'MsgBox "Keine Datei gewählt!" 'kleine Meldung
Exit Sub 'Makro Ende
End If

'CSV zu Array
'==========================================
lngFF = FreeFile 'FreeFileNummer holen
ReDim varArrCSV(1 To 5, 1) 'Array vorbereiten
Open varFileNames For Input As #lngFF 'Datei öffnen
Do While Not EOF(lngFF) 'bis EOF
Line Input #lngFF, varScratch 'Zeile einlesen
varScratch = Split(varScratch, ";") 'Zeile an ";" trennen
ReDim Preserve varArrCSV(1 To 5, 1 To UBound(varArrCSV, 2) + 1) 'Array vergrössern
For lngCount = 1 To UBound(varScratch) + 1 'Zeilenteile durchlaufen
'Wenn Zahl dann ersetze "." durch "," und wandle zu Zahl
'sonst wie gelesen ins Array
If IsNumeric(varScratch(lngCount - 1)) Then _
varArrCSV(lngCount, UBound(varArrCSV, 2) - 1) = CDbl(Replace(varScratch(lngCount - 1), ".", ",")) _
Else _
varArrCSV(lngCount, UBound(varArrCSV, 2) - 1) = varScratch(lngCount - 1)
Next lngCount
Loop
Close #lngFF 'Datei Schliessen

'OutArray in neue Mappe
'==========================================
Set wbkTarget = Application.Workbooks.Add(1) 'Neues Workbook (eine Tabelle)
varArrOut = WorksheetFunction.Transpose(varArrCSV) 'Array drehen
With wbkTarget.ActiveSheet.Range("A1").Resize(UBound(varArrOut, 1), UBound(varArrOut, 2))
.Value = varArrOut 'Array am Stück in Tabelle
.Columns.AutoFit 'SpaltenBreite auf Auto
.Columns(.Columns.Count).NumberFormat = "0.00" 'Format letzte Spalte auf Zahl
End With

Set wbkTarget = Nothing 'ObjectVerweis aufheben
End Sub


bye
malSchauen
... und um mein Wochenende mach Dir keine Sorgen ;-) Noch ist das SN ja freiwillig...
...