Show a commandbutton on datapulled lines

[亡魂溺海] 提交于 2020-12-13 03:09:47

问题


Once every 3 months we make a file available for our engineers. This Excel files, pulls data from an Access file and shows it in Excel format.

Since some of this data doesn't change, we don't know whether the engineers haven't looked at it or whether the value isn't changed. What i'm trying to implement is some sort of "confirmation" button so we know the value shown is actually confirmed.

What i'm trying to do is enter an extra column in our access file called "confirmation". When we pull this data in our excel file, i'm trying to find a way to convert that "confirmation field" into a commandbutton so whenever the data gets pulled, a commandbutton shows up on every line. Whenever the button gets clicked, the data gets saved in our Access file so we know the line is actually confirmed.

Maybe there are some other , easier, ways to do this?

I currently have some code to save excel data in Access but its not working in its current form:

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"

and

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

End Sub Differences here are: I want to just save text ("Data confirmed") for that particular cell. So if one wants to confirm data on Row 8 and clicks "Data confirm". It should only save "Data confirm" for row 8 in access.


回答1:


Generally, when I'm trying to add a feature to every row in a column, I'll use a hyperlink. It fits neatly into the cell, it can be anchored to a specific cell, and it also shows when it's been followed (the color changes). I've mocked together some code as an example; try to adapt it to your application and let me know if you need help.

First, in a standard module, enter the following code to create the hyperlinks. Presumably, you'd embed this into the code that pulls the data.

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

Next, in the worksheet code for the sheet with the data, enter the below code. This tells the application what to do when a hyperlink is clicked. I created a fake function that is meant to mimic saving the data. You can change this as needed, or use a different design if it suits your needs better.

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


来源:https://stackoverflow.com/questions/64351946/show-a-commandbutton-on-datapulled-lines

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!