MS Access HyperlinkAddress 携带上次使用的 URL

问题描述

我有一个表单,用户可以在其中将公司的网站 (URL) 输入到文本框中。命令按钮位于文本框旁边,以便可以在浏览器中打开输入的 URL。当文本框中有一个 URL 时,它工作得很好。但是,当文本框为空时,会出现“再试一次”的 MsgBox(应该如此),但它不会在用户单击“确定”后停止子例程,而是打开最近打开的 URL。当单击 MsgBox OK 按钮时,如何让子例程简单地停止?我猜 URL 被存储在某个地方。在哪里?我该如何清除它?

Private Sub cmd_websitelink_Click()

'***********************************************
'** Opens browser for Website Link
'***********************************************

DoCmd.SetWarnings False

Dim sitestring As String

sitestring = Me.Website & vbNullString

If Len(sitestring) = 0 Then GoTo ErrorHandler

On Error GoTo ErrorHandler
    
    Dim ctl As CommandButton
    Set ctl = Me!cmd_websitelink
    With ctl
        .HyperlinkAddress = sitestring
    End With

Exit Sub

GoTo Finish

ErrorHandler:

MsgBox "Enter a valid URL in the website Box and try again."

Finish:

End Sub 

解决方法

您在过程中设置按钮的 .HyperlinkAddress 属性。

此属性将保持设置,直到您关闭表单或覆盖该属性。

所以你需要把这个添加到错误案例中:

Me!cmd_websitelink.HyperlinkAddress = ""

您可以简单地在 Click 事件中打开超链接,而不是所有这些,请参见此处:
How to open a URL from MS Access with parameters

,

我无法从您的代码中分辨出 Me.Website 的设置位置(是否来自 DB 字段?所有这些代码都在表单中链接到记录吗?Me.Website 是否是链接到您说的文本框的字段名用户正在输入文本?)

我猜测问题的原因是,如果用户更改了文本框中的文本但尚未保存,并且当 txtbox 失去焦点时您没有自动保存,那么表单仍在使用文本框中的 原始 值。要修复它,请使用 .text 而不是 .value 。

取而代之的是:

sitestring = Me.Website & vbNullString

这样做:

sitestring = nz(Me.Website.text,"")

.text 捕获文本框中的当前文本,无论它是否已提交,而 .value 仅检索提交的值。并且上面的代码还覆盖了针对具有空值的表单或记录,通过使用 nz 将空值替换为空字符串。

此外,当您处理字符串时,不妨使用字符串逻辑。而不是这样:

If Len(sitestring) = 0 Then GoTo ErrorHandler

这样做:

If sitestring = "" Then GoTo ErrorHandler

此外:在点击“Goto Finish”之前,您正在运行“Exit Sub”;删除退出子的这两种方法之一。

此外,如果您所做的只是设置超链接地址,那么几乎所有代码都可以简化为这样,使用适当的缩进使其整洁:

Private Sub cmd_websitelink_Click()
    '***********************************************
    '** Opens browser for Website Link
    '***********************************************
    Me.txtWebsite.SetFocus              'Else VBA errors when accessing .text
    sitestring = nz(Me.Website.text,"") 'NZ to replace null values with ""
    if sitestring = "" Then
        MsgBox "Enter a valid URL in the website box and try again."
    else
        Me!cmd_websitelink.HyperlinkAddress = sitestring
    end if
end sub

(来自评论)测试 _Click() 命令按钮是否使用旧版本的 .HyperlinkAddress 作为其源,而不是这个:

Me!cmd_websitelink.HyperlinkAddress = sitestring

试试这个:

explorer.exe sitestring