VBA in FrontPage

Scanning all pages in the site

Event WebPage(aPage As PageWindow)

Private m_bRecursive As Boolean

Public Property Let Recursive(bValue As Boolean)
    m_bRecursive = bValue
End Property

Public Property Get Recursive() As Boolean
    Recursive = m_bRecursive
End Property

Public Sub EnumPageWindows()
    If ActiveWebWindow.Web Is Nothing Then
        MsgBox "Please open a web before running this macro.", _
            vbOKOnly + vbExclamation
        Exit Sub
    End If
    If ActiveWeb.ActiveWebWindow.PageWindows.Count <> 0 Then
        MsgBox "Please close all files before running this macro.", _
            vbOKOnly + vbExclamation
        Exit Sub
    End If
    Dim myTempFolder As WebFolder
    Set myTempFolder = ActiveWeb.RootFolder
    
    GetPages myTempFolder
End Sub

Private Sub GetPages(myWebFolder As WebFolder)
    Dim myFiles As WebFiles
    Dim myFile As WebFile
    
    Set myFiles = myWebFolder.Files
    
    For Each myFile In myFiles
        If UCase(myFile.Extension) = "HTM" _
            Or UCase(myFile.Extension) = "HTML" Or _
            UCase(myFile.Extension) = "ASP" Then
        
            myFile.Open
            
            Dim myPage As PageWindow
            Set myPage = ActivePageWindow
            myPage.ViewMode = fpPageViewNormal
            
            RaiseEvent WebPage(myPage)
            
        End If
        
    Next myFile
    
    If m_bRecursive Then
        Dim mySubFolder As WebFolder
        
        For Each mySubFolder In myWebFolder.Folders
            If mySubFolder.IsWeb = False Then
                GetPages mySubFolder
            End If
        Next mySubFolder
    End If
End Sub


Private Sub Class_Initialize()
    m_bRecursive = True
End Sub

This code is in a Class module called SiteScanner.  The problem with using RaiseEvent, is that this class must be used from within another class or a form.  It is not usable in regular code modules.

Here is a class which shows how to use SiteScanner.

Private WithEvents mySiteScanner As SiteScanner

Private Sub mySiteScanner_WebPage(aPage As PageWindow)
    Dim myString As String
    myString = aPage.ActiveDocument.Title
    UserForm1.ListBox1.AddItem myString
    aPage.Close True
End Sub

Public Sub GiveMePages()
    Set mySiteScanner = New SiteScanner
    mySiteScanner.Recursive = True
    mySiteScanner.EnumPageWindows
End Sub

This code resides in a class module called ScanPages.  The processing that you want to do on each file goes in the mySiteScanner_WebPage subroutine.  For example you could call the ChangeMenuTitle subroutine that I show above.

You can use this from a code module like this:

Sub GoForIt()
    Dim myScanner As ScanPages
    Set myScanner = New ScanPages
    UserForm1.ListBox1.Clear
    myScanner.GiveMePages
    UserForm1.Show
End Sub

You might also like...

Comments

Contribute

Why not write for us? Or you could submit an event or a user group in your area. Alternatively just tell us what you think!

Our tools

We've got automatic conversion tools to convert C# to VB.NET, VB.NET to C#. Also you can compress javascript and compress css and generate sql connection strings.

“Computer science education cannot make anybody an expert programmer any more than studying brushes and pigment can make somebody an expert painter” - Eric Raymond