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...

Rekursion vermeiden

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.

Konstanten deklarieren

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"

Externe Links bestimmen

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.

HTML-Dokumente bestimmen

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.

Mehr Makros

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.