【问题标题】:open file from path stored in access db when user clicks button on form当用户单击表单上的按钮时,从存储在访问数据库中的路径打开文件
【发布时间】:2010-07-22 22:34:43
【问题描述】:

我是 Access VBA 开发的新手,我被要求调试 Access 2007 应用程序并为其添加功能,该应用程序是前两位开发人员开发的。

表单显示数据库中的记录并为每条记录显示一个按钮。该按钮应该使用适当的路径打开文件。但是当用户点击按钮时,它总是使用表单显示的第一条记录的文件路径,而不是正确记录的文件路径。

代码看起来像是在尝试使用书签打开正确的文件,但如上所述,这不起作用。这是按钮单击事件的相关代码。当我尝试 Debug.Print form.Bookmark 到即时窗口时,它只显示一个问号。

Dim rs As Recordset
Set rs = form.RecordsetClone
rs.Bookmark = form.Bookmark

编辑:根据@Remou 的要求添加更多代码。单击按钮时:

Private Sub OpenFile_Click()
    Form_FilingProcess.Subform_cmdOpenFile_Click Me
End Sub

调用者:

Public Sub Subform_cmdOpenFile_Click(frm As Form)
Set rs = frm.RecordsetClone
rs.Bookmark = frm.Bookmark

然后它继续打开文件。

【问题讨论】:

  • 也许在你的 Debug.Print 上你可以在 rs 记录集中显示一个标识字段的值?
  • @Jeff O - 我可以显示我想要的记录集中的任何值,但这并不能帮助我打开与正确记录相关的文件,如果这有意义的话。我需要确定哪条记录与用户想要打开的文件相关。

标签: ms-access ms-access-2007 vba bookmarks


【解决方案1】:

如果按钮是针对每条记录的,则不需要对记录集进行任何处理。可以使用控件的名称来获取文件:

TheFile=Me.MyControl

您似乎既有表单又有子表单。我从您的回答中猜测设置是这样的:

   |------------------------------|
   |  Main Form                   |
   --------------------------------
    Sub form
   --------------------------------
    Row                     Button
   --------------------------------
    Row                     Button
   --------------------------------

如果按钮名称是OpenFile,试试:

Private Sub OpenFile_Click()
    MsgBox Me.NameOfAContolHere & ""
    'Form_FilingProcess.Subform_cmdOpenFile_Click Me
End Sub

这可以用来像这样打开一个文件:

Private Sub OpenFile_Click()
    FollowHyperlink Me.NameOfControlWithPathToFile
    'Form_FilingProcess.Subform_cmdOpenFile_Click Me
End Sub

【讨论】:

  • 按钮未绑定到记录或文件。它只是触发 On Click 事件,该事件运行一个从记录中的路径打开文件的方法。有没有办法让我找出点击了哪个按钮?
  • 表单视图中的表单是否由多行组成,每行都有一个按钮?
  • 这种情况下,不需要知道点击了哪个按钮,只有一个按钮,就是当前行的按钮。您可以通过在点击事件中添加一个消息框来显示这一点:MsgBox Me.SomeControlName
  • 我认为尝试使用书签会省去很多麻烦。
  • 您了解书签只是移动到记录的一种方式,而 recordetclone 只是子表单中包含的记录集的副本?我的 cmets 的趋势是摆脱这种复杂性并引用子表单本身,而不是副本。
【解决方案2】:

你的潜艇应该是这样的:

Public Sub Subform_cmdOpenFile_Click(frm As Form) 
  Dim CurrentBookmark as String
  Set rs = frm.RecordsetClone 
  CurrentBookmark = frm.Bookmark
  rs.Bookmark = CurrentBookmark
End Sub

将字符串变量设置为表单书签的值。然后将记录集的书签设置为字符串变量值。

Dim rs As Recordset 
dim CurrentBookmark as String

Set rs = Me.RecordsetClone 

CurrentBookmark = Me.Bookmark
rs.Bookmark = CurrentBookmark 

http://msdn.microsoft.com/en-us/library/aa223967(office.11).aspx

【讨论】:

  • 这样做的原因是什么?
  • @Jeff O - form.Bookmark 的值为“?”并且 Me.Bookmark 返回错误:“您输入的表达式对属性 Bookmark 的引用无效。”
  • @LCountee - 检查我在答案中包含的链接。
  • @Jeff O - 我以前看过那个链接/信息,但它没有解决我遇到的具体问题。
  • 恐怕这些书签在目前的情况下似乎毫无用处。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-11-10
  • 1970-01-01
  • 2012-01-27
  • 1970-01-01
  • 2019-01-11
  • 2015-10-11
  • 1970-01-01
相关资源
最近更新 更多