Vba 宏以记录用户已阅读文档

Vba 宏以记录用户已阅读文档,vba,excel,ms-word,Vba,Excel,Ms Word,抱歉,如果这是回答其他地方,但我已经搜索,无法找到任何东西 我被要求在用户阅读并记录我们的政策文档时创建一种跟踪方法。我最初的想法是在政策文档(word)的底部有一个宏按钮,用户单击该按钮确认他们已经阅读了它。这将更新Excel电子表格,然后插入一个新行,捕获用户名、文档名和时间戳 然后,团队可以查看谁读了什么等内容,并在excel行更新后删除这些行。excel当然会保存在一个静态位置 不幸的是,我的VB技能非常低,所以我不知道从哪里开始。这能做到吗?有人能帮忙吗?你可以在下面试试 Sub sa

抱歉,如果这是回答其他地方,但我已经搜索,无法找到任何东西

我被要求在用户阅读并记录我们的政策文档时创建一种跟踪方法。我最初的想法是在政策文档(word)的底部有一个宏按钮,用户单击该按钮确认他们已经阅读了它。这将更新Excel电子表格,然后插入一个新行,捕获用户名、文档名和时间戳

然后,团队可以查看谁读了什么等内容,并在excel行更新后删除这些行。excel当然会保存在一个静态位置

不幸的是,我的VB技能非常低,所以我不知道从哪里开始。这能做到吗?有人能帮忙吗?

你可以在下面试试

Sub save_tracking()
Dim XLapp As Excel.Application
Dim xlWB As Excel.Workbook
Set XLapp = New Excel.Application

'turn off extra bits
Screen_ = XLapp.ScreenUpdating
XLapp.ScreenUpdating = False
Event_ = XLapp.EnableEvents
XLapp.EnableEvents = False
Alerts_ = XLapp.DisplayAlerts
XLapp.DisplayAlerts = False

'get username
un = Environ("username")

'open tracking workbook
Set xlWB = XLapp.Workbooks.Open("C:\Test Tacking.xlsx", False, False)

'save information
With xlWB.Sheets(1)
    If .Range("A2").Value = "" Then
    'no values yet
        .Range("A2").Value = un
        .Range("B2").Value = XLapp.Name
        .Range("C2").Value = Now()
    ElseIf .Range("A3").Value = "" Then
    '2nd
        .Range("A3").Value = un
        .Range("B3").Value = XLapp.Name
        .Range("C3").Value = Now()
    Else
    '>2 values
        .Range("A2").End(xlDown).Offset(1, 0).Value = un
        .Range("B2").End(xlDown).Offset(1, 0).Value = XLapp.Name
        .Range("C2").End(xlDown).Offset(1, 0).Value = Now()
    End If
End With

'restore settings to previous
XLapp.ScreenUpdating = Screen_
XLapp.EnableEvents = Event_
XLapp.DisplayAlerts = Alerts_

'save/close workbook
xlWB.Close True
XLapp.Quit
Set XLapp = Nothing


End Sub

Function Environ(Expression)
On Error GoTo Err_Environ

    Environ = VBA.Environ(Expression)

Exit_Environ:
    Exit Function

Err_Environ:
    MsgBox Err.Number & " - " & Err.Description
    Resume Exit_Environ

End Function
将xlWB的文件名更改为存储跟踪表的位置。在跟踪表中,A1/B1/C1保留为标题,信息将存储在第一张表中

编辑:修改为从其他office程序运行。您需要一个“Microsoft Excel 12.0对象库”的参考。版本可能不同,但应该可以。工具-->引用。获取您可以在下面尝试的参考资料

Sub save_tracking()
Dim XLapp As Excel.Application
Dim xlWB As Excel.Workbook
Set XLapp = New Excel.Application

'turn off extra bits
Screen_ = XLapp.ScreenUpdating
XLapp.ScreenUpdating = False
Event_ = XLapp.EnableEvents
XLapp.EnableEvents = False
Alerts_ = XLapp.DisplayAlerts
XLapp.DisplayAlerts = False

'get username
un = Environ("username")

'open tracking workbook
Set xlWB = XLapp.Workbooks.Open("C:\Test Tacking.xlsx", False, False)

'save information
With xlWB.Sheets(1)
    If .Range("A2").Value = "" Then
    'no values yet
        .Range("A2").Value = un
        .Range("B2").Value = XLapp.Name
        .Range("C2").Value = Now()
    ElseIf .Range("A3").Value = "" Then
    '2nd
        .Range("A3").Value = un
        .Range("B3").Value = XLapp.Name
        .Range("C3").Value = Now()
    Else
    '>2 values
        .Range("A2").End(xlDown).Offset(1, 0).Value = un
        .Range("B2").End(xlDown).Offset(1, 0).Value = XLapp.Name
        .Range("C2").End(xlDown).Offset(1, 0).Value = Now()
    End If
End With

'restore settings to previous
XLapp.ScreenUpdating = Screen_
XLapp.EnableEvents = Event_
XLapp.DisplayAlerts = Alerts_

'save/close workbook
xlWB.Close True
XLapp.Quit
Set XLapp = Nothing


End Sub

Function Environ(Expression)
On Error GoTo Err_Environ

    Environ = VBA.Environ(Expression)

Exit_Environ:
    Exit Function

Err_Environ:
    MsgBox Err.Number & " - " & Err.Description
    Resume Exit_Environ

End Function
将xlWB的文件名更改为存储跟踪表的位置。在跟踪表中,A1/B1/C1保留为标题,信息将存储在第一张表中


编辑:修改为从其他office程序运行。您需要一个“Microsoft Excel 12.0对象库”的参考。版本可能不同,但应该可以。工具-->引用。让您访问参考资料

谢谢,我认为这与我的目标非常接近。但是,我在Dim xlwb as工作簿行上遇到了一个“用户定义类型未定义”错误-您知道这是什么原因吗?您是在Excel中运行此操作的吗?还是另一个程序?从Word文档内部抱歉延迟。我已在答覆中修订守则。请记住,您需要在底部添加编辑中提到的参考,非常感谢-这几乎就在那里了,不过还有最后一件事。捕获的第二列是应用程序名(在本例中为Excel),我希望它捕获运行宏的Word文档的名称?谢谢,我认为这与我想要的非常接近。但是,我在Dim xlwb as工作簿行上遇到了一个“用户定义类型未定义”错误-您知道这是什么原因吗?您是在Excel中运行此操作的吗?还是另一个程序?从Word文档内部抱歉延迟。我已在答覆中修订守则。请记住,您需要在底部添加编辑中提到的参考,非常感谢-这几乎就在那里了,不过还有最后一件事。捕获的第二列是应用程序名(在本例中为Excel),我希望它捕获运行宏的Word文档的名称?