MS Access HyperlinkAddress 保留上次使用的 URL

Posted

技术标签:

【中文标题】MS Access HyperlinkAddress 保留上次使用的 URL【英文标题】:MS Access HyperlinkAddress carries over the last used URL 【发布时间】:2021-04-05 13:15:41 【问题描述】:

我有一个表单,用户可以在其中将公司的网站 (URL) 输入到文本框中。文本框旁边有一个命令按钮,以便可以在浏览器中打开输入的 URL。当文本框中有 URL 时,它可以完美运行。但是,当文本框为空白时,会出现“重试”的 MsgBox(应该如此),但不是在用户单击 OK 后停止子例程,而是打开最近打开的 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 

【问题讨论】:

【参考方案1】:

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

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

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

Me!cmd_websitelink.HyperlinkAddress = ""

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

【讨论】:

感谢您添加行以空白 URL 的建议。像魅力一样工作。【参考方案2】:

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

我猜测问题的原因是如果用户更改了文本框中的文本但尚未保存,并且当文本框失去焦点时您没有自动保存,那么表单仍在使用文本框中的 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”之前,您正在运行“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

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

Me!cmd_websitelink.HyperlinkAddress = sitestring

试试这个:

explorer.exe sitestring

【讨论】:

我无法从您的代码中看出 Me.Website 的设置位置(是否来自数据库字段? 是的,来自名为 tbl_company_record1 的表。全部此代码在链接到记录的表单中? 是的。SELECT tbl_company_record1.*, tbl_company_location1.[Street 1] FROM tbl_company_record1 LEFT JOIN tbl_company_location1 ON tbl_company_record1.[Company ID] = tbl_company_location1.[Company ID]; Me.Website 是链接到您说用户在其中放置文本的文本框的字段名吗? 是的。但是,由于您的回复,我已将文本框的名称从 Website 更改为 txtWebsite,并且它链接到名为 Website 的表字段。我尝试了以下方法:您建议的 vba,添加了 Me.txtWebsite.SetFocus(以避免运行时错误 2185),并将文本框名称更改为 txtWebsite。它的行为方式仍然相同。 嗯。因此,您正在为正在按下的按钮设置 .hyperlink,但它仍在打开旧按钮……我怀疑 _Click() 事件正在访问 shell“explorer.exe URL”的旧值。不要使用 Me!cmd_websitelink.HyperlinkAddress = sitestring ,而是尝试 shell “explorer.exe sitestring”。一秒钟后,我将其添加到答案中。 感谢您的帮助!我已经为此苦苦挣扎了太久。通过添加该行,如下所示的 Me!cmd_websitelink.HyperlinkAddress = "" 解决了 URL 结转的问题。

以上是关于MS Access HyperlinkAddress 保留上次使用的 URL的主要内容,如果未能解决你的问题,请参考以下文章

MS ACCESS, VBA 将外部 MS Access 表导入 SQL server 表

MS Access:突出显示 MS Access 报告中的特定字段

MS access 使用相对路径查询多个 MS Access 数据库

连接 MS Access 而另一个应用程序使用相同的 MS Access 文件

将 MS Access 用作 Winform 或 WPF 的后端时如何避免损坏 MS Access

如何让 ms-access 以其他用户身份连接到 ms-sql?