VBA auf imae.src geht nicht

VBA auf imae.src geht nicht

am 13.07.2007 20:17:47 von frank

Wer nutzt noch Frontpage/SharepointDesigner/EW VBA Markso ?

Ich habe folgendes

Dim img As IHTMLImgElement
Dim anchor As FPHTMLAnchorElement
Dim wf As WebFile
Dim pw As PageWindow
Dim count As Integer

For count = 0 To ActiveWeb.AllNavigationNodes.count - 1
Set wf = ActiveWeb.AllNavigationNodes.Item(count).file
Set pw = wf.Edit(fpPageViewNoWindow)
For Each img In pw.Document.images
If img.src <> LCase(img.src) Then
img.src = LCase(img.src)
End If

Next
If pw.IsDirty Then
pw.Save
End If
pw.Close
Next


Scheint soweit alles zu passen. Nur in der Zeile "img.scr = lcase(img.scr)"
tut erst einfach nicht.
d.h. selbst im debugger sehen ich dass LCASE(img.scr) den richtigen INhalte
hat
aber das zurückschreiben geht einfach nicht

Selbst wen ich im Debugger eine Überwachung addieren und selbst dort den
Imagenamen manuell ändere wird immer wieder das original draus.
Als wenn es "readOnly" wäre oder ich in eine Kopie nur schreibe.

Ich bin wohl betriebsblind... Hat jemand nen Tipp ?

--
Frank Carius MS Exchange MVP
Exchange FAQ auf http://www.msxfaq.de
Support siehe http://www.netatwork.de/msxfaq.htm
--

Re: VBA auf imae.src geht nicht

am 14.07.2007 06:42:04 von Frank.Mueller

Hallo Frank,

> Wer nutzt noch Frontpage/SharepointDesigner/EW VBA Markso ?

Ich unter FP2003 und EW

> Ich habe folgendes

> img.src = LCase(img.src)
> pw.Save

> Scheint soweit alles zu passen. Nur in der Zeile "img.scr =
> lcase(img.scr)" tut erst einfach nicht.

Der Code ist OK, dein Problem kann ich aber nachvollziehen.

> d.h. selbst im debugger sehen ich dass LCASE(img.scr) den richtigen
> INhalte hat
> aber das zurückschreiben geht einfach nicht

Weil du da nur im Quelltext änderst aber nicht wirklich den
Namen des Bildes.

> Selbst wen ich im Debugger eine Überwachung addieren und selbst dort
> den Imagenamen manuell ändere wird immer wieder das original draus.
> Als wenn es "readOnly" wäre oder ich in eine Kopie nur schreibe.

So wie das aussieht scheint das nur zu funktionieren wenn
das Bild auch genau so existiert. Ich habe mir grade mal
folgendes Kurzszenario gemacht um dein Problem zu prüfen:

Eine Seite mit einem Bild: TEST.jpg

Dann das Makro drüber laufen lassen, woraus dann im Quelltext
test.jpg geworden ist. Hat einwandfrei funktioniert. Aber genau
dann ist Ende, selbst wenn ich das Makro so ändere:

MsgBox img.scr ' Zeigt richtig das test.jpg.
img.src = "blabla.jpg"
das pw.Save hat dann keinerleie Auswirkung mehr.
Schiebe ich aber vorher ein blabla.jpg ins Web geht es wieder.
Sehr seltsam, aber scheint wirklich so zu sein, dass das nur beim
ersten Durchlauf funktioniert und anschließend nur noch dann
wenn die Bilder auch wirklich vorhandenn sind.

> Ich bin wohl betriebsblind... Hat jemand nen Tipp ?

Wahrscheinlich hat Christoph da noch einen besseren Tipp.
Wie gesagt, habe es nur mal kurz getestet, hat mich interessiert
weil ich darüber schon vor einiger Zeit mal gestolpert bin
als ich FP aus VB "ferngesteuert" habe und fast das gleiche
Problem hatte. Habe mir damals damit geholfen, dass ich vorher
auch gleich die Bilddatein physikalisch umbenannt hatte falls
die Namen nicht stimmten.

Gruß,
Frank

Re: VBA auf imae.src geht nicht

am 14.07.2007 11:15:43 von frank

Frank Müller wrote:

> Der Code ist OK, dein Problem kann ich aber nachvollziehen.

Puh

> Weil du da nur im Quelltext änderst aber nicht wirklich den
> Namen des Bildes.

Frontpage und EW und SPD haben alle sdas Problem, dass sie nicht wirklich
"Gro/KLeinschrift" sauber unterscheiden.
wenn man nun in Frontpage eine Datei von "bild.GIF" nach "bild.gif"
umbenenne, dann ändert er den Source nicht !!!
was auf einem Apache unter Unix dann natürlich einen defekten link gibt.
Macht man aber

bild.GIF -> bildtemp.GIF -> bild.gif
dann geht es. Source wird aktualisiert.

Um meine "dekekten Links" zu fixen habe ich mich nun entschieden, ALLES in
Kleinbuchstaben zu machen.
d.h. die Dateien sind schon alel klein.


> folgendes Kurzszenario gemacht um dein Problem zu prüfen:
> Eine Seite mit einem Bild: TEST.jpg
> Dann das Makro drüber laufen lassen, woraus dann im Quelltext
> test.jpg geworden ist. Hat einwandfrei funktioniert. Aber genau
> dann ist Ende, selbst wenn ich das Makro so ändere:

Na wenn deine Annahme stiommt, dann müsste aber "TEST.jpg" draus werden.


> Sehr seltsam, aber scheint wirklich so zu sein, dass das nur beim
> ersten Durchlauf funktioniert und anschließend nur noch dann
> wenn die Bilder auch wirklich vorhandenn sind.

Das Problem bei mir ist: Das Bild gibt es in der "Kleinschreibweise" aber
nicht mit Großbuchstaben !
> Problem hatte. Habe mir damals damit geholfen, dass ich vorher
> auch gleich die Bilddatein physikalisch umbenannt hatte falls
> die Namen nicht stimmten.

Wenn alles nichts hilft, dann werde ich halt alle Bilder einmal auch im
namen "umbennennen". damit FP endlich ruhe gibt ..

Das Problem (Klein/Groß) gibt es ja auch beim Fp Upload per FTP.
wernn ich lokal bild.GIF habe und auf dem FTp Server ein "bild.GIF", dann
ist alles ok
benenne ich nun lokal "bild.GIF" nach "bild.gif" um, dann klappt er upload
nicht mehr,
Daher lade ich ja schon nicht mehr mit Frontpage hoch sondern mit
SyncBackSE.



--
Frank Carius MS Exchange MVP
Exchange FAQ auf http://www.msxfaq.de
Support siehe http://www.netatwork.de/msxfaq.htm
--

Re: VBA auf imae.src geht nicht

am 15.07.2007 02:03:22 von Frank.Mueller

Hallo Frank,

> Frontpage und EW und SPD haben alle sdas Problem, dass sie nicht
> wirklich "Gro/KLeinschrift" sauber unterscheiden.

Weil sie halt unter Windows laufen und das
da halt kein Problem ist. Die Programme greifen
da wahrscheinlich auf die Vorgaben bzw. Eigenheiten
von Windows zurück.

> wenn man nun in Frontpage eine Datei von "bild.GIF" nach "bild.gif"
> umbenenne, dann ändert er den Source nicht !!!
> was auf einem Apache unter Unix dann natürlich einen defekten link
> gibt. Macht man aber

> bild.GIF -> bildtemp.GIF -> bild.gif
> dann geht es. Source wird aktualisiert.

Eben, weil es für Windows egal ist, ob der
Dateiname nun "gleich" lautet bzw. als solcher angesehen
wird wenn er sich nur durch die Groß- bzw. Kleinschreibung
unterscheidet.

>> folgendes Kurzszenario gemacht um dein Problem zu prüfen:
>> Eine Seite mit einem Bild: TEST.jpg
>> Dann das Makro drüber laufen lassen, woraus dann im Quelltext
>> test.jpg geworden ist. Hat einwandfrei funktioniert. Aber genau
>> dann ist Ende, selbst wenn ich das Makro so ändere:

> Na wenn deine Annahme stiommt, dann müsste aber "TEST.jpg" draus
> werden.

Nein warum? das Ursprungsbild war in Großbuchstaben, da wurde
dann halt test.jpg draus beim ersten Durchlauf wie gewünscht.
Nur dann geht es nicht mehr wenn das Bild nicht existiert.

>> Sehr seltsam, aber scheint wirklich so zu sein, dass das nur beim
>> ersten Durchlauf funktioniert und anschließend nur noch dann
>> wenn die Bilder auch wirklich vorhandenn sind.

> Das Problem bei mir ist: Das Bild gibt es in der "Kleinschreibweise"
> aber nicht mit Großbuchstaben !

Und wie ist dann die "Großschreibweise" in den Quellcode gekommen?
Gab es das Bild schon mal vorher in der "Großschreibweise"? Das kann
ich jetzt auf die Schnelle nicht ganz nachvollziehen, dass da FP oder EW
beim einfügen / importieren anschließendem Verlinken die Schreibweise
ändern.

>> Problem hatte. Habe mir damals damit geholfen, dass ich vorher
>> auch gleich die Bilddatein physikalisch umbenannt hatte falls
>> die Namen nicht stimmten.
>
> Wenn alles nichts hilft, dann werde ich halt alle Bilder einmal auch
> im namen "umbennennen". damit FP endlich ruhe gibt ..
>
> Das Problem (Klein/Groß) gibt es ja auch beim Fp Upload per FTP.
> wernn ich lokal bild.GIF habe und auf dem FTp Server ein "bild.GIF",
> dann ist alles ok
> benenne ich nun lokal "bild.GIF" nach "bild.gif" um, dann klappt er
> upload nicht mehr,

Ok da kann ich jetzt nicht wirlich mitreden, da ich ausschließlich
mit Windows Servern (IIS) arbeite und auch nicht über FTP
die Webs veröffentliche.

> Daher lade ich ja schon nicht mehr mit Frontpage hoch sondern mit
> SyncBackSE.

Auch wenn der Upload auf den Indianer damit klappt ist das
ja schön und gut, aber dein Problem nicht wirklich gelöst.
Sonst hättest du ja gar nicht erst versuchen müssen da die
Schreibweise zu ändern.

Quick and dirty würde ich das so angehen:
Mach dir ein kleines VB Programm unabhängig von Frontpage.
Damit wandelst du alle Dateinamen der Bilder in Kleinbuchstaben
um, gehst gleichzeitig das physikalische Verzeichnis des Webs
durch und wandelst im Quelltext falls notwendig ebenfalls um.

Dann das Web öffnen / aktualisieren und das Problem sollte
erledigt sein. Ausser der Frage natürlich wie die Bilder
bzw. Dateinamen in "Großschreibweise" in das Web
gekommen sind bzw. ob sie zukünftig wieder rein kommen
können.

Aber vielleicht bin ich ja auch völlig auf dem Holzweg
und Christoph hat noch einen viel besseren Tipp.
Schließlich ist er hier der VBA-Experte.

Gruß,
Frank

Re: VBA auf imae.src geht nicht

am 15.07.2007 15:14:51 von frank

> Nein warum? das Ursprungsbild war in Großbuchstaben, da wurde
> dann halt test.jpg draus beim ersten Durchlauf wie gewünscht.
> Nur dann geht es nicht mehr wenn das Bild nicht existiert.

Das Bild war mal "gross" geschiieben und der Link im HTML auch.
insofern hätte alles funktioniert.

wenn man aber nun das Bild "klein" macht, dann wird der Code nicht geändert.
Irgenwann hab ich so ein Bild "ausserhalb" von Frontpage mit einem
Grafikprogramm geändert und wieder gespeichert.
und dann war es "klein" und der Link BAD.

DAmit so was nicht weiter passiert wollte ich nun eben alles "klein" machen
Ein VBA Makro, was die Datei per Frontpage umbennen läuft aber hat das
Problem, dass die Datei eben "klein" wird aber der Link nicht.
(wäre wohl schlauer gewesen die Datei zweimal umzubenennne

ein VBScript, welche die Dateien "umbennent" habe ich schon gemacht und geht
also muss ich nun nur nochdie SRC-Links klein bekommen

die meisten Dateien lauteten auf "*.GIF" und das konnte ich per RegEx schon
klein schreiben.
Aber Etwas wie "OutlookPCS.GIF" wurde dann "OutlookPCS.gif" ud das hilft
nicht weiter.


>> Das Problem (Klein/Groß) gibt es ja auch beim Fp Upload per FTP.
>> wernn ich lokal bild.GIF habe und auf dem FTp Server ein "bild.GIF",
>> dann ist alles ok
>> benenne ich nun lokal "bild.GIF" nach "bild.gif" um, dann klappt er
>> upload nicht mehr,
>
> Ok da kann ich jetzt nicht wirlich mitreden, da ich ausschließlich
> mit Windows Servern (IIS) arbeite und auch nicht über FTP
> die Webs veröffentliche.

Ich denke einfach an die millionen 1und1, Strato und andere Kunden


>
>> Daher lade ich ja schon nicht mehr mit Frontpage hoch sondern mit
>> SyncBackSE.
>
> Auch wenn der Upload auf den Indianer damit klappt ist das
> ja schön und gut, aber dein Problem nicht wirklich gelöst.
> Sonst hättest du ja gar nicht erst versuchen müssen da die
> Schreibweise zu ändern.

> Quick and dirty würde ich das so angehen:
> Mach dir ein kleines VB Programm unabhängig von Frontpage.
> Damit wandelst du alle Dateinamen der Bilder in Kleinbuchstaben
> um, gehst gleichzeitig das physikalische Verzeichnis des Webs
> durch und wandelst im Quelltext falls notwendig ebenfalls um.

Ich denke da es sich um eine einmalige Aktion handelt werden ich einfach per
Regular Expression ein replace machen.



--
Frank Carius MS Exchange MVP
Exchange FAQ auf http://www.msxfaq.de
Support siehe http://www.netatwork.de/msxfaq.htm
--

Re: VBA auf imae.src geht nicht

am 15.07.2007 15:23:17 von Christoph Schneegans

Frank Carius schrieb:

> bild.GIF -> bildtemp.GIF -> bild.gif
> dann geht es. Source wird aktualisiert.

Und genauso funktioniert auch die Harmonisierung in VBA. Geh nicht von ImgElement.src
aus, sondern von WebFile.Name bzw. WebFile.Url. Die Anpassung der Verweise im Code
erledigt das Programm dann automatisch:

Sub MakeAllPathsLowerCase()

'Ordnernamen auf Kleinschreibung ändern.
Dim wfol As WebFolder
For Each wfol In ActiveWeb.AllFolders
If wfol <> ActiveWeb.RootFolder Then
RenameLastSegmentToLower wfol
End If
Next

'Dateinamen auf Kleinschreibung ändern.
Dim wfil As WebFile
For Each wfil In ActiveWeb.AllFiles
RenameLastSegmentToLower wfil
Next

End Sub

Private Sub RenameLastSegmentToLower(o As Object)

Dim pos As Integer
pos = InStrRev(o.url, "/")
Dim name As String
name = Mid(o.url, pos + 1)
If name = LCase(name) Then
Exit Sub
End If

Dim tempUrl As String
tempUrl = Left(o.url, pos) & "temp"
o.Move tempUrl

Dim newUrl As String
newUrl = Left(o.url, pos) & LCase(name)
o.Move newUrl

End Sub

Habe ich nicht ausführlich getestet, tut aber in einer kleinen Website.

--
· Die häufigsten Fragen zu FrontPage

Re: VBA auf imae.src geht nicht

am 17.07.2007 21:26:25 von frank

Christoph Schneegans wrote:

> Und genauso funktioniert auch die Harmonisierung in VBA. Geh nicht
> von ImgElement.src aus, sondern von WebFile.Name bzw. WebFile.Url.
> Die Anpassung der Verweise im Code erledigt das Programm dann
> automatisch:

Aber das ist ja das Problem.
Wenn ich per WebFile eine Datei umbenne "MischCase zu Lowercase" dann wird
der Link in der Source eben nicht korrigiert.
Es sei denn ich mach wie in deinem Beispiel "zwe" renames.

Da ich aber die Datene schon alle mit "einmal Rename" auf Lowercase habe und
nun tot links, wollte ich eben die Links manuell mit LCASE ändern.
und das geht nicht.
aber ich habe einen "umweg"gefunden

link.outerHTML = Replace(link.outerHTML, link.Href, LCase(link.Href))

das lässt er (eben ohne jegliche validierung) zu. aber mir hilft es aufs
erste und ist besser hunderte Links manuell im Source zu ändern.
Und das nächste mal werde ich SICHER zweimal "rename" machen :-)



--
Frank Carius MS Exchange MVP
Exchange FAQ auf http://www.msxfaq.de
Support siehe http://www.netatwork.de/msxfaq.htm
--