【问题标题】:Show a commandbutton on datapulled lines在数据拉线上显示命令按钮
【发布时间】:2020-10-20 01:04:48
【问题描述】:

我们每 3 个月为我们的工程师提供一次文件。 此 Excel 文件,从 Access 文件中提取数据并以 Excel 格式显示。

由于其中一些数据没有改变,我们不知道工程师是否没有查看它,或者值是否没有改变。我正在尝试实现的是某种“确认”按钮,因此我们知道显示的值实际上已确认。

我要做的是在我们的访问文件中输入一个额外的列,称为“确认”。 当我们在我们的 excel 文件中提取这些数据时,我试图找到一种方法将“确认字段”转换为命令按钮,因此每当提取数据时,每行都会显示一个命令按钮。每当单击按钮时,数据都会保存在我们的 Access 文件中,因此我们知道该行实际上已被确认。

也许还有其他一些更简单的方法可以做到这一点?

我目前有一些代码可以在 Access 中保存 excel 数据,但它不能以当前的形式工作:

Sub S_SaveDataToDB()

If ActiveSheet.Name = "Estimate" Then
    ViKey = 1
Else
    ViKey = 2
End If
For i = 1 To ActiveSheet.ListObjects("TB_ACC" & ViKey).ListRows.Count
   VsData = "SET [BE] = '" & F_FilterData(ActiveSheet.Cells(7 + i, 17)) & "', [PO STATUS] = '" & F_FilterData(ActiveSheet.Cells(7 + i, 18)) & "', [REMARKS] = '" & F_FilterData(ActiveSheet.Cells(7 + i, 19)) & "', [LOGDATE] = '" & Now() & "', [LOGID] = '" & Environ("Username") & "' WHERE [PO item] = '" & ActiveSheet.Cells(7 + i, 9) & "'"
   
    If Len(F_FilterData(ActiveSheet.Cells(7 + i, 16))) + Len(F_FilterData(ActiveSheet.Cells(7 + i, 17))) + Len(F_FilterData(ActiveSheet.Cells(7 + i, 18))) > 0 Then Call S_UpdateDataInDB(VsData)
Next i

MsgBox "Data has been saved"

Sub S_UpdateDataInDB(VsData)
Dim cnDB As New ADODB.Connection

VsDBPath = ThisWorkbook.Sheets("Settings").Range("B2").Value
VsTable = "KCD"
cnDB.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & "Data Source=" & VsDBPath & ";" & "Jet OLEDB:Engine Type=5;" & "Persist Security Info=False;"
cnDB.Execute ("UPDATE  " & VsTable & " " & VsData)
cnDB.Close

结束子 这里的区别是: 我只想为该特定单元格保存文本(“数据已确认”)。 因此,如果要确认第 8 行的数据并单击“数据确认”。它应该只在访问中保存第 8 行的“数据确认”。

【问题讨论】:

  • excel文件有多少行?也许添加一个带有下拉列表的列,用户可以在其中选择“是”或“否”,然后最后将列的值加载到数据库中?
  • 行数不固定。有一种添加行的可能性,因此可以添加他/她必须添加的行。正如您提到的那样添加一列是我认为的另一种好方法!不要认为可以在某些 excel 行上添加命令按钮,尤其是当行不固定时
  • 可以动态添加命令按钮(也可以按行),但它们并不固定在某一行。因此,很难确定命令按钮所引用的行。
  • 还想通了,对于可变数量的行,我需要可变数量的 cmd 按钮,而每个 cmd 按钮的引用是 1:1 与行将很好添加 x 数量x 行数的 cmd 按钮自动。因此,每当有人添加一行时,它也会自动为该行“创建”一个额外的 cmd 按钮。我会尽量按照你的方式做,应该也可以!

标签: excel vba commandbutton


【解决方案1】:

通常,当我尝试向列中的每一行添加功能时,我会使用超链接。它可以整齐地放入单元格中,可以锚定到特定的单元格,并且还可以显示何时被跟踪(颜色发生变化)。我以一些代码为例进行了模拟;尝试使其适应您的应用程序,如果您需要帮助,请告诉我。

首先,在标准模块中,输入以下代码来创建超链接。据推测,您已将其嵌入到提取数据的代码中。

Sub PullData()
    Dim sh As Worksheet
    Dim lastRow As Long
    
    'Pull the data
    ' DO STUFF
    
    'Identify the range of the pulled data
    Set sh = Sheets("PulledData")
    lastRow = sh.Range("A" & sh.Rows.Count).End(xlUp).Row
    
    'Loop from row 2 through last row
    For i = 2 To lastRow
        'Assuming the 'save' option is in Column c
        sh.Cells(i, "C").Hyperlinks.Add Anchor:=sh.Cells(i, "C"), Address:="", _
        SubAddress:="", TextToDisplay:="Click To Save"
    Next i
End Sub

接下来,在包含数据的工作表的工作表代码中,输入以下代码。这告诉应用程序在单击超链接时要做什么。我创建了一个假函数,旨在模拟保存数据。您可以根据需要更改此设置,或者如果它更适合您的需要,则使用其他设计。

Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)
    'Confirm that this is a hyperlink in column 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 & " has been saved."
    SaveData = True
End Function

【讨论】:

  • 1/2 谢谢!数据保存在 Access 文件中,并在您打开该特定工作表时被拉入 Excel。看到您的评论后,我开始怀疑您的代码是否可以正常工作。例子。 1)有 10 行旧数据被拉到工作表中。这些必须获得“确认按钮”,因此我们知道该值仍然正确。 2)一旦确认,已确认的数据不再需要这个“确认按钮”,因为它已经确认了。 3)人们也可以添加新行,这些行不需要这个按钮。
  • 2/2 我觉得,当我实现您的代码时,每次打开工作表时都会出现“确认按钮”(因为它会刷新从 Access 中提取的数据)。 (1) 已经确认或(2) 是新的,最近添加的行的数据,不必得到这个“确认按钮”。明白我的意思吗?
  • @JustinSane 您可以灵活地修改此代码以满足该需要。例如,当添加命令按钮/超链接时,程序应该如何知道记录是否已“确认”?那是存储在某处的字段吗?当您调用它时,此代码也会运行。因此,如果您只希望它用于从访问中提取的记录,则将其嵌入该代码中,它只会添加到这些行中。它不会再次运行(除非它被调用)。
  • 嗯,我正在考虑在 Access / Excel 中添加另一个名为“确认”的列。当数据从 Access 拉到 access 时,此列是空的,因此会显示一个超链接/按钮。单击后,它将“已确认”保存在该特定行的新添加列中。当工作表刷新时(并且数据再次被拉出)。该特定行应该已在该列中“确认”,因此不必为该特定行显示更多超链接,因为它已经确认。
  • 目前已经做到了,一旦确认,它就不再提供超链接了。只需要实现另外两件事。 (1)最近添加一行后,它不应该给出超链接,因为它已经“确认”了。 (2) 将“数据确认”保存到新添加的访问工作表中。单击超链接后,应将“已确认数据”保存到该访问表中。
猜你喜欢
  • 1970-01-01
  • 2017-01-12
  • 1970-01-01
  • 1970-01-01
  • 2016-01-21
  • 1970-01-01
  • 2017-03-25
  • 2023-03-25
  • 2020-12-12
相关资源
最近更新 更多