【问题标题】:Save data to access file after clicking on a hyperlink单击超链接后保存数据以访问文件
【发布时间】:2020-11-20 04:06:16
【问题描述】:

感谢 basodre,我设法让 Excell 为我的 Excellsheet 中的每个数据提取行添加一个超链接。 下一步是在单击特定行后面的超链接后在 Access 中保存文本“已确认数据”。 例如,有 10 行末尾带有“单击以确认”的超链接。一旦第8行数据正确,必须点击第8行的“点击确认”。点击后,应保存“数据确认”以访问第8行。

我目前有以下代码,但一旦单击超链接,它仍然不会在我的访问文件中保存“数据确认”。有什么想法吗?

Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)
    'Confirm that this is a hyperlink in column 3

    If Not Intersect(Target.Range, Columns(16)) Is Nothing Then
        MsgBox SaveData(Target.Range)
    End If
    
End Sub

Private Function SaveData(rng As Range) As Boolean
    Dim cnDB As New ADODB.Connection
    
    VsDBPath = ThisWorkbook.Sheets("Settings").Range("B2").Value
  
    cnDB.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & "Data Source=" & VsDBPath & ";" & "Jet OLEDB:Engine Type=5;" & "Persist Security Info=False;"
 
    cnDB.Execute "INSERT INTO NewPO (Confirmation) VALUES ('Data confirmed')"
       
    
    cnDB.Close
    SaveData = True
End Function

【问题讨论】:

  • 您要插入新记录,其中包含单个字段值为“数据已确认”?还是要更新 Access 表中的现有记录?
  • 这些列已经在 Access 中,并且列“确认”一开始是空的。我们不希望通过最后的超链接“单击以确认”向人们显示当前数据。单击该按钮后,必须将文本“已确认数据”插入访问(针对该特定行),以便我们知道哪些数据已确认,哪些未确认。
  • 所以你的意思是记录已经存在并且你想要更新特定记录的字段。那将是一个 UPDATE,而不是 INSERT,动作 SQL。
  • 好吧,列在那里,但一开始它是空的(所以每一行都有一个超链接来确认数据)。当有人单击超链接时,该列应填满文本“数据已确认”。所以不确定它是更新还是插入,因为您将文本“数据确认”插入到列中
  • 如果记录不存在则为 INSERT,如果记录存在则为 UPDATE。你的情况是哪一种?如果您的意思是“列已在 Access 中”,除了“确认”之外的每一列中都有包含数据的记录,并且您现在想要将数据添加到“确认”,那么您正在更新记录。

标签: excel vba hyperlink


【解决方案1】:

需要为 WHERE 子句获取记录主键(或一些唯一标识访问记录的数据组合)。使用 Offset 引用与活动单元格相关的单元格,该单元格应该是单击的超链接单元格。如果主键数据是左侧 1 个单元格:

cnDB.Execute "UPDATE NewPO SET Confirmation='Data confirmed' WHERE ID = " & ActiveCell.Offset(0, -1).Value

【讨论】:

  • Basodre 帮助我在每一行都获得了一个超链接,并给了我一个第二部分代码,只要单击超链接就可以做一些事情。他给我的代码是: ////// 'Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink) 确认这是第 3 列中的超链接 If Not Intersect(Target.Range, Columns(3)) Is Nothing Then MsgBox SaveData (Target.Range) End If End Sub Private Function SaveData(rng As Range) As Boolean Debug.Print rng.Address & " 已保存。" SaveData = True End Function' ////// 不知道如何在上面的代码中实现你的代码。
  • 它将代替 SaveData 过程中的 INSERT 语句。
猜你喜欢
  • 1970-01-01
  • 2019-04-16
  • 2014-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-13
  • 1970-01-01
相关资源
最近更新 更多