» schneegans.de » Microsoft FrontPage » FrontPage und VBA » Nützliche VBA-Prozeduren
Diese Prozeduren werden verwendet, um per VBA die HTML-Dokumente eines FrontPage-Webs zu verwalten.
Es gibt einige gegenseitige Abhängigkeiten – etwas Ausprobieren ist also angesagt...
Oft steht man vor dem Problem, sämtliche Dateien eines Webs durchlaufen zu müssen. Das ist leicht, solange es in dem Web keine Unterverzeichnisse gibt. Mit Unterverzeichnissen ist aber Rekursion über die Folders-Auflistung eines WebFolder-Objekts nötig. Das ist zwar nicht besonders schwierig, aber umständlich.
So geht es einfacher:
Private Sub GetFilesFromFolder(ByRef myWebFolder As WebFolder, _
ByVal HTMLFilesOnly As Boolean, _
ByRef FilesCollection As Collection)
Dim myWebFile As WebFile
Dim myLoopFolder As WebFolder
'Die Dateien im aktuellen Ordner aufnehmen.
For Each myWebFile In myWebFolder.Files
If Not HTMLFilesOnly Or IsHTMLFile(myWebFile.Name) Then
FilesCollection.Add myWebFile
End If
Next
'Die Unterordner rekursiv durchlaufen.
For Each myLoopFolder In myWebFolder.Folders
If Not myLoopFolder.IsWeb Then
GetFilesFromFolder myLoopFolder, HTMLFilesOnly, _
FilesCollection
End If
Next
End Sub
Function GetAllFiles(ByRef myweb As Web, _
ByVal HTMLFilesOnly As Boolean) As Collection
Dim FilesCollection As New Collection
GetFilesFromFolder myweb.RootFolder, HTMLFilesOnly, _
FilesCollection
Set GetAllFiles = FilesCollection
End Function
Man könnte dann folgendes schreiben, um alle HTML-Dokumente eines Webs zu durchlaufen:
Dim wf As WebFile
For Each wf In GetAllFiles(ActiveWeb, True)
Debug.Print wf.Url
Next In FrontPage 2002 ist diese Funktion bereits integriert – als Auflistung AllFiles des Web-Objekts.
Bei den wichtigen Methoden insertAdjacentHTML und insertAdjacentText legt man mit einem String-Parameter fest, wo der neue Text eingefügt werden soll. Man kann sich das Leben etwas erleichtern, wenn man folgende Deklarationen in ein Modul einfügt und dann die Konstanten anstelle der String-Literale verwendet:
Public Const BeforeEnd = "BeforeEnd"
Public Const AfterEnd = "AfterEnd"
Public Const BeforeBegin = "BeforeBegin"
Public Const AfterBegin = "AfterBegin"
Public Function IsExternalLink(ByVal Href As String) As Boolean
IsExternalLink = ( _
Left(Href, 7) = "http://" Or _
Left(Href, 8) = "https://" Or _
Left(Href, 6) = "ftp://" Or _
Left(Href, 5) = "news:")
End Function
Die Funktion bestimmt, ob ein Anchor-Element ein externes Ziel referenziert. Solche Links könnte man etwa mit einer eigenen CSS-Klasse kennzeichnen:
Dim pw As PageWindow
Set pw = ActivePageWindow
Dim anchorTag As IHTMLAnchorElement
For Each anchorTag In pw.Document.all.tags("A")
If IsExternalLink(anchorTag.Href) Then
anchorTag.className = "Offsite"
End If
Next
Das W3C verwendet in den Core Styles ebenfalls eine solche Auszeichnung.
Public Function IsHTMLFile(ByVal Filename As String) As Boolean
IsHTMLFile = ( _
LCase(Right(Filename, 4)) = "html" Or _
LCase(Right(Filename, 3)) = "htm" Or _
LCase(Right(Filename, 3)) = "asp")
End Function
Die Files-Auflistung des RootFolder-Objekts umfaßt auch Dateien, die keine HTML-Dokumente sind, etwa Stylesheets oder Grafiken. Mit der Funktion IsHTMLFile läßt sich leicht überprüfen, ob eine Datei zum Bearbeiten im Editor geöffnet werden kann. Bei ASP-Dateien muß man aber vorsichtig sein; unter Umständen nämlich führt FrontPage ASP-Code aus.
Außerdem pflegt Valdet Beqiraj eine umfangreiche Liste mit Links zu FrontPage-Add-Ins, die von Microsoft herausgegeben wurden. Auch ein Blick ins FrontPage Add-in Center kann sich lohnen.