FP2000: (Interne) Textmarken kontrollieren
Hallo zusammen,
wenn ich in einem Web interne Textmarken auf Aktualität überprüfen
möchte, dann sehe ich im Moment als einzige Möglichkeit, dies per Suchen
/ Ersetzen '#textmarke' zu tun.
Hat jemand einen Tip zur komfortableren Vorgehensweise für mich?
--
Gruß Jürgen
***
Windows 2000 SP4 - Alle Updates - 08.10.06
http://home.arcor.de/jterlinden/index.htm
Re: FP2000: (Interne) Textmarken kontrollieren
Juergen Terlinden schrieb:
> wenn ich in einem Web interne Textmarken auf Aktualität überprüfen
> möchte, dann sehe ich im Moment als einzige Möglichkeit, dies per
> Suchen / Ersetzen '#textmarke' zu tun.
Folgendes Makro testet die Links _einer_ Seite:
Sub CheckFragments()
Dim a As FPHTMLAnchorElement
For Each a In ActiveDocument.all.tags("a")
'"href"-Attribut vorhanden?
If a.href = "" Then GoTo NextAnchor
'Interner Link?
If Left(a.href, 7) = "http://" Then GoTo NextAnchor
'Fragmentbezeichner vorhanden?
Dim pos As Integer
pos = InStr(a.href, "#")
If pos < 1 Then GoTo NextAnchor
'Fragmentbezeichner extrahieren.
Dim hash As String
hash = mid(a.href, pos + 1)
If hash = "" Then GoTo NextAnchor
'Zielseite bestimmen.
Dim targetUrl As String
targetUrl = FrontPage.MakeAbs(ActiveDocument.url, Left(a.href, pos - 1))
'Zielseite laden.
Dim pw As PageWindowEx
Set pw = FrontPage.LocatePage(targetUrl, fpPageViewNoWindow)
'Fragment suchen.
Dim targetElement
Set targetElement = pw.Document.all.item(hash)
If targetElement Is Nothing Then
Debug.Print "Textmarke '" & hash & "' ist in '" & targetUrl & "' nicht vorhanden."
End If
NextAnchor:
Next
End Sub
Das Makro testet Site-interne Links, insbesondere also auch Seiten-interne
Links, und unterstützt
<p id="tm1">...</p>
und
<p><a name="tm2"></a>...</p>
bei der Definition von Textmarken.
--
<http://schneegans.de/sv/> - XML Schema Validator |
<http://schneegans.de/xp/> - XHTML Proxy |
<http://myblog.de/politicallyincorrect> - Mein Lieblings-Blog |
Re: FP2000: (Interne) Textmarken kontrollieren
'Christoph Schneegans' wrote:
>> wenn ich in einem Web interne Textmarken auf Aktualität überprüfen
>> möchte, dann sehe ich im Moment als einzige Möglichkeit, dies per
>> Suchen / Ersetzen '#textmarke' zu tun.
>
> Folgendes Makro testet die Links _einer_ Seite:
Hier fehlen mir leider Kenntnisse. Ich kann *.CMDs erstellen. Das war es
dann aber auch.
Aber: Habe das Skript als Makro in FP angelegt. Dann öffne ich mein Web
und rufe dort eine Seite auf. Dann starte ich das Makro und es kommt ...
> Sub CheckFragments()
>
> Dim a As FPHTMLAnchorElement
>
> For Each a In ActiveDocument.all.tags("a")
>
> '"href"-Attribut vorhanden?
> If a.href = "" Then GoTo NextAnchor
>
> 'Interner Link?
> If Left(a.href, 7) = "http://" Then GoTo NextAnchor
>
> 'Fragmentbezeichner vorhanden?
> Dim pos As Integer
> pos = InStr(a.href, "#")
> If pos < 1 Then GoTo NextAnchor
>
> 'Fragmentbezeichner extrahieren.
> Dim hash As String
> hash = mid(a.href, pos + 1)
> If hash = "" Then GoTo NextAnchor
>
> 'Zielseite bestimmen.
> Dim targetUrl As String
> targetUrl = FrontPage.MakeAbs(ActiveDocument.url, Left(a.href,
> pos - 1))
>
> 'Zielseite laden.
> Dim pw As PageWindowEx
> Set pw = FrontPage.LocatePage(targetUrl, fpPageViewNoWindow)
.... hier bei "pw As PageWindowEx" zu einem 'Fehler beim Kompilieren:'
"Benutzerdefinierter Typ nicht definiert".
Muß ich etwas anpassen?
> 'Fragment suchen.
> Dim targetElement
> Set targetElement = pw.Document.all.item(hash)
> If targetElement Is Nothing Then
> Debug.Print "Textmarke '" & hash & "' ist in '" & targetUrl &
> "' nicht vorhanden." End If
>
> NextAnchor:
> Next
>
> End Sub
Vielen Dank einstweilen.
--
Gruß Jürgen
***
Windows 2000 SP4 - Alle Updates - 08.10.06
http://home.arcor.de/jterlinden/index.htm
Re: FP2000: (Interne) Textmarken kontrollieren
Juergen Terlinden schrieb:
> ... hier bei "pw As PageWindowEx" zu einem 'Fehler beim Kompilieren:'
> "Benutzerdefinierter Typ nicht definiert".
"PageWindowEx" durch "PageWindow" ersetzen und nochmal probieren. Ich habe
unter 2003 entwickelt und getestet, möglicherweise erhältst du weitere
Fehlermeldungen. Prinzipiell sollte es unter 2000 aber gehen.
--
<http://schneegans.de/sv/> - XML Schema Validator |
<http://schneegans.de/xp/> - XHTML Proxy |
<http://myblog.de/politicallyincorrect> - Mein Lieblings-Blog |
Re: FP2000: (Interne) Textmarken kontrollieren
'Christoph Schneegans' wrote:
>> ... hier bei "pw As PageWindowEx" zu einem 'Fehler beim Kompilieren:'
>> "Benutzerdefinierter Typ nicht definiert".
>
> "PageWindowEx" durch "PageWindow" ersetzen und nochmal probieren. Ich
> habe unter 2003 entwickelt und getestet, möglicherweise erhältst du
> weitere Fehlermeldungen.
So ist es:
Laufzeitfehler '-2147467259' (80004005)':
Serverfehler: Parameter "document_name" für Funktion "get document"
fehlt.
Nach [Debuggen] wird dann diese Zeile gelb markiert:
Set pw = FrontPage.LocatePage(targetUrl, fpPageViewNoWindow)
Wäre schön, wenn Du da auch noch eine passende Korrektur hättest.
"PageWindow" scheint jedenfalls gefruchtet zu haben.
> Prinzipiell sollte es unter 2000 aber gehen.
Das macht mir Mut :-)
--
Gruß Jürgen
***
Windows 2000 SP4 - Alle Updates - 08.10.06
http://home.arcor.de/jterlinden/index.htm
Re: FP2000: (Interne) Textmarken kontrollieren
Juergen Terlinden schrieb:
> Nach [Debuggen] wird dann diese Zeile gelb markiert:
> Set pw = FrontPage.LocatePage(targetUrl, fpPageViewNoWindow)
Hm, offenbar konnte man LocatePage unter 2000 noch nicht mit leerem String
aufrufen. Nächster Versuch:
Sub CheckFragments()
Dim a As FPHTMLAnchorElement
For Each a In ActiveDocument.all.tags("a")
'"href"-Attribut vorhanden?
If a.href = "" Then GoTo NextAnchor
'Interner Link?
If Left(a.href, 7) = "http://" Then GoTo NextAnchor
'Fragmentbezeichner vorhanden?
Dim pos As Integer
pos = InStr(a.href, "#")
If pos < 1 Then GoTo NextAnchor
'Fragmentbezeichner extrahieren.
Dim hash As String
hash = mid(a.href, pos + 1)
If hash = "" Then GoTo NextAnchor
'Zielseite bestimmen.
Dim targetUrl As String
targetUrl = FrontPage.MakeAbs(ActiveDocument.url, Left(a.href, pos - 1))
'Link auf dieselbe Seite?
If targetUrl = "" Then targetUrl = ActiveDocument.url
'Zielseite laden.
Dim pw As PageWindow
Set pw = FrontPage.LocatePage(targetUrl, fpPageViewNoWindow)
'Fragment suchen.
Dim targetElement
Set targetElement = pw.Document.all.item(hash)
If targetElement Is Nothing Then
Debug.Print "Textmarke '" & hash & "' ist in '" & targetUrl & "' nicht vorhanden."
End If
NextAnchor:
Next
End Sub
--
<http://schneegans.de/sv/> - XML Schema Validator |
<http://schneegans.de/xp/> - XHTML Proxy |
<http://myblog.de/politicallyincorrect> - Mein Lieblings-Blog |
Re: FP2000: (Interne) Textmarken kontrollieren
'Christoph Schneegans' wrote:
>> Nach [Debuggen] wird dann diese Zeile gelb markiert:
>> Set pw = FrontPage.LocatePage(targetUrl, fpPageViewNoWindow)
>
> Hm, offenbar konnte man LocatePage unter 2000 noch nicht mit leerem
> String aufrufen. Nächster Versuch:
Dieser Versuch läuft nun fehlerfrei durch. Aber er findet wohl keine
Fehler. Zumindest wird mir nichts am Bildschirm angezeigt, was ich
erwarten würde. Oder muß ich Ergebnisse irgendwo nachsehen?
Ansonsten belassen wir es dabei. Ich werde die Prüfung weiterhin manuell
machen.
Besten Dank für Deine Mühe :-)
--
Gruß Jürgen
***
Windows 2000 SP4 - Alle Updates - 11.10.06
http://home.arcor.de/jterlinden/index.htm
Re: FP2000: (Interne) Textmarken kontrollieren
Juergen Terlinden schrieb:
> Zumindest wird mir nichts am Bildschirm angezeigt, was ich erwarten
> würde. Oder muß ich Ergebnisse irgendwo nachsehen?
Im VBA-Editor "Ansicht > Direktfenster" aktivieren und das Makro mit F5
starten, während eine Seite im FrontPage-Editor möglichst in der
Normalansicht geöffnet ist. Kaputte Links sollten dann im Direktfenster
angezeigt werden.
--
<http://schneegans.de/sv/> - XML Schema Validator |
<http://schneegans.de/xp/> - XHTML Proxy |
<http://myblog.de/politicallyincorrect> - Mein Lieblings-Blog |
Re: FP2000: (Interne) Textmarken kontrollieren
'Christoph Schneegans' wrote:
>> Zumindest wird mir nichts am Bildschirm angezeigt, was ich erwarten
>> würde. Oder muß ich Ergebnisse irgendwo nachsehen?
>
> Im VBA-Editor "Ansicht > Direktfenster" aktivieren und das Makro mit
> F5 starten, während eine Seite im FrontPage-Editor möglichst in der
> Normalansicht geöffnet ist. Kaputte Links sollten dann im
> Direktfenster angezeigt werden.
Getestet, klappt! Herzlichen Dank :-)
--
Gruß Jürgen
***
Windows 2000 SP4 - Alle Updates - 12.10.06
http://home.arcor.de/jterlinden/index.htm
Re: FP2000: (Interne) Textmarken kontrollieren
'Juergen Terlinden' wrote:
>>> Zumindest wird mir nichts am Bildschirm angezeigt, was ich erwarten
>>> würde. Oder muß ich Ergebnisse irgendwo nachsehen?
>>
>> Im VBA-Editor "Ansicht > Direktfenster" aktivieren und das Makro mit
>> F5 starten, während eine Seite im FrontPage-Editor möglichst in der
>> Normalansicht geöffnet ist. Kaputte Links sollten dann im
>> Direktfenster angezeigt werden.
>
> Getestet, klappt! Herzlichen Dank :-)
Hm, muß doch noch was nachtragen. Bei meinem Test hatte ich wohl das
Glück, zwei Textmarken zu erwischen, die mit Buchstaben begannen. Ich
habe in meinem Web jedoch einen haufen Textmarken, die aus Ziffern
bestehen (MS KB-Nummern).
Verantwortlich ist wohl diese Passage
'Fragmentbezeichner extrahieren.
Dim hash As String
hash = mid(a.href, pos + 1)
If hash = "" Then GoTo NextAnchor
mit "As String". Gibt es da noch eine Möglichkeit, auch
Ziffern-Textmarken abzufangen? Ich habe schon die VB-Hilfe bemüht, bin
aber mit meinen Versuchen gescheitert.
Danke nochmals vorab!
--
Gruß Jürgen
***
Windows 2000 SP4 - Alle Updates - 12.10.06
http://home.arcor.de/jterlinden/index.htm
Re: FP2000: (Interne) Textmarken kontrollieren
Juergen Terlinden schrieb:
> Bei meinem Test hatte ich wohl das Glück, zwei Textmarken zu
> erwischen, die mit Buchstaben begannen. Ich habe in meinem Web
> jedoch einen haufen Textmarken, die aus Ziffern bestehen (MS
> KB-Nummern).
Dann ändere das besser, bspw. von "1234" in "kb1234". "id"-Attribute
dürfen nicht mit Ziffern beginnen, vgl.
<http://www.w3.org/TR/html401/types.html#type-name>.
--
<http://schneegans.de/sv/> - XML Schema Validator |
<http://schneegans.de/xp/> - XHTML Proxy |
<http://myblog.de/politicallyincorrect> - Mein Lieblings-Blog |
Re: FP2000: (Interne) Textmarken kontrollieren
'Christoph Schneegans' wrote:
>> Bei meinem Test hatte ich wohl das Glück, zwei Textmarken zu
>> erwischen, die mit Buchstaben begannen. Ich habe in meinem Web
>> jedoch einen haufen Textmarken, die aus Ziffern bestehen (MS
>> KB-Nummern).
>
> Dann ändere das besser, bspw. von "1234" in "kb1234". "id"-Attribute
> dürfen nicht mit Ziffern beginnen, vgl.
> <http://www.w3.org/TR/html401/types.html#type-name>.
Gemacht! 40 min. Arbeit. Alle Links korrigiert und geprüft. Die
Textmarken sind nun alle up to date.
Danke für Deine Unterstützung :-)
--
Gruß Jürgen
***
Windows 2000 SP4 - Alle Updates - 12.10.06
http://home.arcor.de/jterlinden/index.htm
Re: FP2000: (Interne) Textmarken kontrollieren
Hallo Christoph,
[VB-Makro 'CheckFragments']
sehe ich es richtig, daß das Makro in der Datei
Microsoft FrontPage.fpm
im Userordner
...\Anwendungsdaten\Microsoft\FrontPage\Macros
gespeichert wird?
Und kann man nach einer FP-/Office-Neuinstallation einfach diese Datei
zurückspielen und das Makro steht wieder zur Verfügung?
--
Gruß Jürgen
***
Windows 2000 SP4 - Alle Updates - 22.10.06
http://home.arcor.de/jterlinden/index.htm
Re: FP2000: (Interne) Textmarken kontrollieren
Juergen Terlinden schrieb:
> sehe ich es richtig, daß das Makro in der Datei
> Microsoft FrontPage.fpm (...) gespeichert wird?
Ja.
> Und kann man nach einer FP-/Office-Neuinstallation einfach diese Datei
> zurückspielen und das Makro steht wieder zur Verfügung?
Theoretisch schon. Ich ziehe es vor, die Module einzeln zu exportieren.
Hin und wieder exportiere ich auch alle Module, lösche sie im Editor und
importiere sie dann wieder. Die "Microsoft FrontPage.fpm" ist danach
üblicherweise kleiner als vorher; diese Komprimierung sollte der
Datenintegrität zugute kommen.
Einfach unter "Extras > Verweise..." die Bibliothek "Microsoft Visual
Basic for Application Extensibility 5.3" aktivieren und bei Bedarf
folgende Makros ausführen:
Option Explicit
Sub Export_All_Modules()
Const EXPORT_PATH = "C:\Backup\"
Dim VBComp As VBComponent
Dim Sfx As String
For Each VBComp In VBE.VBProjects.item(1).VBComponents
Select Case VBComp.Type
Case vbext_ct_ClassModule, vbext_ct_Document
Sfx = ".cls"
Case vbext_ct_MSForm
Sfx = ".frm"
Case vbext_ct_StdModule
Sfx = ".bas"
Case Else
Sfx = ""
End Select
If Sfx <> "" Then
VBComp.Export filename:=EXPORT_PATH & VBComp.name & Sfx
End If
Next
End Sub
Sub Import_All_Modules()
Const EXPORT_PATH = "C:\Backup\"
Dim fso As New FileSystemObject
Dim f As Scripting.file
Dim Sfx As String
For Each f In fso.GetFolder(EXPORT_PATH).files
Sfx = mid(f.name, InStrRev(f.name, "."))
If Sfx = ".frm" Or Sfx = ".bas" Or Sfx = ".cls" Then
Debug.Print f.path
VBE.VBProjects.item(1).VBComponents.Import f.path
End If
Next
End Sub
--
<http://schneegans.de/sv/> - XML Schema Validator |
<http://schneegans.de/xp/> - XHTML Proxy |
<http://myblog.de/politicallyincorrect> - Mein Lieblings-Blog |
Re: FP2000: (Interne) Textmarken kontrollieren
'Christoph Schneegans' wrote:
>> sehe ich es richtig, daß das Makro in der Datei
>> Microsoft FrontPage.fpm (...) gespeichert wird?
>
> Ja.
OK.
>> Und kann man nach einer FP-/Office-Neuinstallation einfach diese
>> Datei zurückspielen und das Makro steht wieder zur Verfügung?
>
> Theoretisch schon. Ich ziehe es vor, die Module einzeln zu
> exportieren. Hin und wieder exportiere ich auch alle Module, lösche
> sie im Editor und importiere sie dann wieder. Die "Microsoft
> FrontPage.fpm" ist danach üblicherweise kleiner als vorher; diese
> Komprimierung sollte der Datenintegrität zugute kommen.
Ok. Aber ich habe ja nur ein einziges Modul im Einsatz :-)
> Einfach unter "Extras > Verweise..." die Bibliothek "Microsoft Visual
> Basic for Application Extensibility 5.3" aktivieren und bei Bedarf
> folgende Makros ausführen:
>
> Option Explicit
>
> Sub Export_All_Modules()
>
> Const EXPORT_PATH = "C:\Backup\"
>
> Dim VBComp As VBComponent
> Dim Sfx As String
>
> For Each VBComp In VBE.VBProjects.item(1).VBComponents
>
> Select Case VBComp.Type
> Case vbext_ct_ClassModule, vbext_ct_Document
> Sfx = ".cls"
> Case vbext_ct_MSForm
> Sfx = ".frm"
> Case vbext_ct_StdModule
> Sfx = ".bas"
> Case Else
> Sfx = ""
> End Select
>
> If Sfx <> "" Then
> VBComp.Export filename:=EXPORT_PATH & VBComp.name & Sfx
> End If
>
> Next
>
> End Sub
>
> Sub Import_All_Modules()
>
> Const EXPORT_PATH = "C:\Backup\"
>
> Dim fso As New FileSystemObject
> Dim f As Scripting.file
> Dim Sfx As String
>
> For Each f In fso.GetFolder(EXPORT_PATH).files
>
> Sfx = mid(f.name, InStrRev(f.name, "."))
>
> If Sfx = ".frm" Or Sfx = ".bas" Or Sfx = ".cls" Then
> Debug.Print f.path
> VBE.VBProjects.item(1).VBComponents.Import f.path
> End If
>
> Next
>
> End Sub
Habe ich dann doch mit aufgenommen. Danke!
--
Gruß Jürgen
***
Windows 2000 SP4 - Alle Updates - 22.10.06
http://home.arcor.de/jterlinden/index.htm