1.9k Aufrufe
Gefragt in Tabellenkalkulation von little-key Mitglied (333 Punkte)
Hallo an alle,

heute nur ein kleines Problem:

<code>
Dim strDatei As Variant
Dim strQuelle1 As String
Dim strQuelle2 As String
Dim strZiel As String
Dim i, MAX As Integer
MAX = ActiveSheet.Cells(Rows.Count, 6).End(xlUp).Row
For i = 1 To MAX
Range("F" & i).Select
Selection.Replace What:="MON", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
Selection.Replace What:=" /*.jpg", Replacement:=".jpg", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
strDatei = ActiveCell
strQuelle1 = "U:\Grosser\Bilder\Monacor\" & strDatei
strQuelle2 = "U:\Grosser\Bilder\No_Image.jpg"
strZiel = "U:\Projekte\Websites\_Grosser\Cart\" & strDatei
If Dir("U:\Grosser\Bilder\Monacor\" & strDatei) = "" Then
ActiveCell = "No_Image.jpg"
Else
FileCopy strQuelle1, strZiel
End If
Next
FileCopy strQuelle2, strZiel
</code>

Warum wird in der letzten Zeile das Bild nicht kopiert? Es existiert definitiv auf Quelle2. Was ist da falsch?

4 Antworten

0 Punkte
Beantwortet von hajo_zi Experte (9.1k Punkte)
Hi,

ich habe mir den Code nicht angesehen und ich habe den Sachverhlat auch nicht geprüft, darum nur Vermutung. Das Bild ist größer als eine Zelle?

Gruß Hajo
0 Punkte
Beantwortet von
Hi,

Du meinst sicher, dass das Bild in Quelle1 (also "U:\Grosser\Bilder\Monacor\" existiert. Und wenn es das tut, dann wird es auch kopiert. Du hast im Code nur einen LogikFehler eingebaut.

btw: Freut mich ja, dass Du zumindest meinen Hinweis auf den Code-Tag beherzigst. Wenn Du nun statt der spitzen Klammern <> noch die eckigen Klammern [ ] benutzen würdest, dann klappt das auch mit dem Code. ;-)

Zurück zum LogikFehler:
Du läufst durch Deine For-Schleife und kommst beim letzten Bild an. Dieses wird kopiert. Nun kommst Du aus der For-Schleife raus und was passiert? Genau, es wird mit dem Bild aus strQuelle2 überschrieben, also mit No_Image.jpg. Füge hinter der Zeile mit Next einmal ein Stop ein, wie im folgenden zu sehen:
Sub test()
Dim strDatei As Variant
Dim strQuelle1 As String
Dim strQuelle2 As String
Dim strZiel As String
Dim i, MAX As Integer
MAX = ActiveSheet.Cells(Rows.Count, 6).End(xlUp).Row
For i = 2 To MAX
Range("F" & i).Select
Selection.Replace What:="MON", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
Selection.Replace What:=" /*.jpg", Replacement:=".jpg", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
strDatei = ActiveCell
strQuelle1 = "U:\Grosser\Bilder\Monacor\" & strDatei
strQuelle2 = "U:\Grosser\Bilder\_NoImage.jpg"
strZiel = "U:\Projekte\Websites\_Grosser\Cart\" & strDatei
If Dir("U:\Grosser\Bilder\Monacor\" & strDatei) = "" Then
ActiveCell = "_NoImage.jpg"
Else
FileCopy strQuelle1, strZiel
End If
Next
Stop
FileCopy strQuelle2, strZiel
End Sub


Leere Dein Zielverzeichnis und starte Deinen Code. Dieser wird dann bei Stop, wie zu erwarten anhalten. Nun schau mal ins Zielverzeichnis. Da ist das letzte Bild nun drin. Wechsle wieder auf den VBEditor und drücke die Taste F5. Nachkontrolle im Ziel: letztes Bild überschrieben.

Abhilfe, wenn Ich Dein Vorhaben noch richtig im Gedächtnis habe:
strQuelle1 = "U:\Grosser\Bilder\Monacor\" & strDatei
strQuelle2 = "U:\Grosser\Bilder\_NoImage.jpg"
strZiel = "U:\Projekte\Websites\_Grosser\Cart\" & strDatei
If Dir("U:\Grosser\Bilder\Monacor\" & strDatei) = "" Then
ActiveCell = "_NoImage.jpg"
FileCopy strQuelle2, strZiel
Else
FileCopy strQuelle1, strZiel
End If
Next
End Sub


bye
malSchauen
0 Punkte
Beantwortet von
Hi,

@little-key
Ups...
Ich habe im Code den ich grad gepostet habe, das No_Image.jpg in _NoImage.jpg geändert, weil ich die Verzeichnisstruktur zum Testen eben mit dieser Bezeichnung noch auf der Platte hatte. Bitte beim Copy&Paste berücksichtigen.

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

mit den Klammern bekomme ich auch noch hin...

Zum Code:
Deine Version funktioniert auch nicht. Da ich das von Dir nicht kenne, nochmals alles genau angesehen.
Kann ja nicht funktionieren, habe wir wohl alle übersehen:
strZiel ist ja schon mit einem Dateinamen belegt undzwar mit ActiveCell.
Da ja "No_Image" nur einmal ins Zielverzeichnis kopiert werden muss, wa es ganz einfach:

FileCopy strQuelle2, "U:\Projekte\Websites\_Grosser\Cart\No_Image.jpg"

Sehe ich doch richtig, oder??

Da lässt man andere für sich nachdenken und es ist doch so einfach....
Trotzdem vielen, vielen Dank.

Schönen Sonntag noch Mario
...