HOWTO:通过 VBA 在 FrontPage 2003 中建立自定义 HTML 代码检查程序

来源:互联网 发布:微信广告制作软件 编辑:程序博客网 时间:2024/05/21 08:50

在 FrontPage 中提供了 HTML 代码检查功能,它可以方便提高您网页的辅助功能(主要是检查您的网页是否符合全部人群浏览,详细信息请参阅 FrontPage 帮助)。同样的,我们也可以利用 VBA 轻松的自定义一套自己的 HTML 规则检测程序。(此程序只适用于 FrontPage 2003 版本,因为对于 SearchInfo 其它版本不支持)
我们在模块中建立一个过程,这是我们这套自定义程序的主体:

Public Function CustomSearchInfo(ByVal strFindTxt As String, ByVal autoSelect As Boolean, ByVal msgFound As String, ByVal msgNotFound As String) As String
'02/13/2006 陈炜 (谨以此程序纪念我和她分手一周年)
On Error GoTo CannotDo
'--------
'变量声明
'--------

Dim objSearchInfo As SearchInfo
Dim objRange As IHTMLTxtRange
Dim objDoc As FPHTMLDocument
Dim bIsExs As Boolean
'-----------------------------------------------------------------------------
'对变量的赋值
'注:对于 Set objRange = objDoc.Selection.createRange 这句赋值语句,如果在代
'码页内修改了 HTML 代码并且没有保存文件的话,就会出现权限访问问题(错误代码70)。
'对于 Set objDoc = ActiveDocument 这句赋值语句,如果在无窗口模式下运行宏,就会
'出现变量无法赋值的问题(错误代码91)。
'-----------------------------------------------------------------------------

Set objDoc = ActiveDocument
Set objSearchInfo = Application.CreateSearchInfo
Set objRange = objDoc.Selection.createRange

objSearchInfo.Find = strFindTxt
'使用 HTML 标记查询方法(该方法属于 FpSearchAction)
objSearchInfo.Action = fpSearchFindTag
'这里可以使用 objSearchInfo.Options = (FpSearchOptions 中的方法), 来设置搜索选项
'如区分大小写: objSearchInfo.Options = fpSearchMatchCase


bIsExs = objDoc.Find(objSearchInfo, Null, objRange)

If bIsExs = True Then
MsgBox msgFound, vbApplicationModal + vbInformation, "自定义 HTML 检测"
If autoSelect = True Then objRange.Select
Else
MsgBox msgNotFound, vbApplicationModal + vbExclamation, "自定义 HTML 检测"
End If

'返回指定的搜索到的所有文本内容: CustomSearchInfo = objRange.Text
'返回指定的搜索到的所有 HTML 标记内容
'如果中途出现错误那么会返回空值

CustomSearchInfo = objRange.htmlText
Exit Function

CannotDo:
If Err.Number = 70
Then
MsgBox "如果在代码页内修改了 HTML 代码并且没有保存文件的话,就会出现权限访问问题。" & vbNewLine & "请保存后再重新运行此宏。", vbApplicationModal + vbExclamation, "错误"
ElseIf Err.Number = 91
Then
MsgBox "如果您在无窗口情况下下运行此宏命令,那么会出现变量无法赋值的错误。(但不排除会有其他变量问题出现)" & vbNewLine & "请打开至少一个网页后再运行此宏。", vbApplicationModal + vbExclamation, "错误"
Else
If MsgBox("[ " & Err.Number & " ] " & Err.Description & vbNewLine & "发生如上错误,是否重试?", vbApplicationModal + vbCritical + vbRetryCancel, "错误") = vbRetry Then Resume
End If
End Function

对于以上过程中的代码我已在相关部分标写了注释,如仍有不解之处或错误的地方请予以指出,我会及时加以改正。下面我们来建立一个单独的宏(也可以插入到您的宏中),并调用此代码:

Sub MySearchInfo()
'这里使用 MsgBox 返回函数运行结果
MsgBox CustomSearchInfo("center", True, "已找到预定的旧的 HTML 标记", "没有找到预定的标记")
End Sub

这样我们便可以轻松的通过建立菜单项或工具栏按钮来直接调用函数了。有关问题请参阅我关于如何在 FrontPage 中建立宏并指派到菜单项的文章( http://blog.csdn.net/frontgoggle/archive/2006/02/11/597023.aspx )。

最后要提到的是对于 CustomSearchInfo 函数及其参数的一些说明:
strFindTxt 字符串类型,为想要搜索的 HTML 标记,如搜索 <center>...</center>,只需键入 center 即可。
autoSelect 布尔值,表示是否自动选中标记(自动选定:True,不自动选定:False)
msgFound 字符串类型,表示当寻找到相关字符串时所弹出的对话框中所显示的内容
msgNotFound 字符串类型,表示当未寻找到相关字符串时所弹出的对话框中所显示的内容
该函数成功运行后会返回包含相关标记和标记内容的字符串,可以被 MsgBox 等函数调用,也可赋值给 TextBox.Text