MS Access HyperlinkAddress 继承上次使用的 URL

MS Access HyperlinkAddress carries over the last used 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 

我无法从你的代码中看出 Me.Website 是在哪里设置的(它来自数据库字段吗?所有这些代码都以表格形式链接到记录吗?Me.Website 是否链接了一个字段名到你说用户输入文本的文本框?)

我猜测问题的原因是,如果用户更改了文本框中的文本但尚未保存,并且当 txtbox 失去焦点时您没有自动保存,那么,表单仍在使用文本框中的 original 值。要修复它,请使用 .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”之前运行“退出子程序”;删除这两种退出子程序的方法之一。

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

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

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

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

因此您需要将此添加到错误案例中:

Me!cmd_websitelink.HyperlinkAddress = ""

除此之外,您只需在 Click 事件中打开超链接,请参见此处: