Excel 是否有办法使用宏跟踪共享工作簿中发生的更改?
我有一个可供多个用户访问的共享主控表。我希望使用宏跟踪用户所做的更改,然后保留第一个用户所做的更改,并向其他用户提供一个msgbox,说明已进行了更改。现在功能区中的“共享工作簿”选项中有一个选项,该选项显示“询问哪些更改成功”但是我希望第一个用户在不弹出任何对话框的情况下进行更改。我尝试了“保存更改”选项,但它没有按预期工作。有没有办法使用宏来完成?如果是,如何进行?Excel 是否有办法使用宏跟踪共享工作簿中发生的更改?,excel,vba,Excel,Vba,我有一个可供多个用户访问的共享主控表。我希望使用宏跟踪用户所做的更改,然后保留第一个用户所做的更改,并向其他用户提供一个msgbox,说明已进行了更改。现在功能区中的“共享工作簿”选项中有一个选项,该选项显示“询问哪些更改成功”但是我希望第一个用户在不弹出任何对话框的情况下进行更改。我尝试了“保存更改”选项,但它没有按预期工作。有没有办法使用宏来完成?如果是,如何进行? Private子工作表\u更改(ByVal目标作为范围) 设置FindCell=工作表(“跟踪更改”)。列(2)。查找(Tar
Private子工作表\u更改(ByVal目标作为范围)
设置FindCell=工作表(“跟踪更改”)。列(2)。查找(Target.Address,LookIn:=xlValues)
R=工作表(“轨迹更改”)。单元格(Rows.Count,1)。结束(xlUp)。偏移量(1)。行
如果FindCell什么都不是
带有工作表(“跟踪更改”)
.单元格(R,1).值=日期
.Cells(R,2).Value=Target.Address
.Cells(R,3).Value=Application.UserName
如果Target.Value=”“,则
.Cells(R,4).Value=“空单元格”
其他的
.Cells(R,4).Value=目标.Value
如果结束
以
其他的
firstAddress=FindCell.Address
做
如果FindCell.Offset(0,-1).Value=日期,则
MsgBox“已由”&FindCell.Offset(0,1.Value&_
vbNewLine和“Changes:”&FindCell.Offset(0,2).Value
出口接头
如果结束
设置FindCell=工作表(“轨迹更改”)。列(2)。FindNext(FindCell)
非FindCell时循环为Nothing,FindCell.Address firstAddress
带有工作表(“跟踪更改”)
.单元格(R,1).值=日期
.Cells(R,2).Value=Target.Address
.Cells(R,3).Value=Application.UserName
如果Target.Value=”“,则
.Cells(R,4).Value=“空单元格”
其他的
.Cells(R,4).Value=目标.Value
如果结束
以
如果结束
端接头
还有一个类似的问题。Excel对共享书籍有一些限制。也许有一些有趣的想法,仅仅是一些了解变化的想法:存储所有这些变化只是一个问题。为了便于使用,可以使用单元格注释字段。希望可以满足您的要求。
Private Sub Worksheet_Change(ByVal Target As Range)
Set FindCell = Worksheets("Track Changes").Columns(2).Find(Target.Address, LookIn:=xlValues)
R = Worksheets("Track Changes").Cells(Rows.Count, 1).End(xlUp).Offset(1).Row
If FindCell Is Nothing Then
With Worksheets("Track Changes")
.Cells(R, 1).Value = Date
.Cells(R, 2).Value = Target.Address
.Cells(R, 3).Value = Application.UserName
If Target.Value = "" Then
.Cells(R, 4).Value = "Empty cell"
Else
.Cells(R, 4).Value = Target.Value
End If
End With
Else
firstAddress = FindCell.Address
Do
If FindCell.Offset(0, -1).Value = Date Then
MsgBox "Changes already made by " & FindCell.Offset(0, 1).Value & _
vbNewLine & "Changes: " & FindCell.Offset(0, 2).Value
Exit Sub
End If
Set FindCell = Worksheets("Track Changes").Columns(2).FindNext(FindCell)
Loop While Not FindCell Is Nothing And FindCell.Address <> firstAddress
With Worksheets("Track Changes")
.Cells(R, 1).Value = Date
.Cells(R, 2).Value = Target.Address
.Cells(R, 3).Value = Application.UserName
If Target.Value = "" Then
.Cells(R, 4).Value = "Empty cell"
Else
.Cells(R, 4).Value = Target.Value
End If
End With
End If
End Sub