Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 是否有办法使用宏跟踪共享工作簿中发生的更改?_Excel_Vba - Fatal编程技术网

Excel 是否有办法使用宏跟踪共享工作簿中发生的更改?

Excel 是否有办法使用宏跟踪共享工作簿中发生的更改?,excel,vba,Excel,Vba,我有一个可供多个用户访问的共享主控表。我希望使用宏跟踪用户所做的更改,然后保留第一个用户所做的更改,并向其他用户提供一个msgbox,说明已进行了更改。现在功能区中的“共享工作簿”选项中有一个选项,该选项显示“询问哪些更改成功”但是我希望第一个用户在不弹出任何对话框的情况下进行更改。我尝试了“保存更改”选项,但它没有按预期工作。有没有办法使用宏来完成?如果是,如何进行? Private子工作表\u更改(ByVal目标作为范围) 设置FindCell=工作表(“跟踪更改”)。列(2)。查找(Tar

我有一个可供多个用户访问的共享主控表。我希望使用宏跟踪用户所做的更改,然后保留第一个用户所做的更改,并向其他用户提供一个msgbox,说明已进行了更改。现在功能区中的“共享工作簿”选项中有一个选项,该选项显示“询问哪些更改成功”但是我希望第一个用户在不弹出任何对话框的情况下进行更改。我尝试了“保存更改”选项,但它没有按预期工作。有没有办法使用宏来完成?如果是,如何进行?

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