将2个不同范围内的2个vba代码合并为一条语句

时间:2018-08-26 03:52:20

标签: excel-vba

我可以使以下代码中的一个或另一个工作,但同时需要它们。第一个在输入数据时将单元格锁定在范围内,第二个在完成每行D列中的最终数据输入时插入日期戳。

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim xRg As Range
    On Error Resume Next
    Set xRg = Intersect(Range("A8:D5005"), Target)
    If xRg Is Nothing Then Exit Sub
    Target.Worksheet.Unprotect Password:="Midnight"
    xRg.Locked = True
    Target.Worksheet.Protect Password:="Midnight"
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim rng As Range
    Set rng = Range("D8:D5005")

    If Not Intersect(Target, rng) Is Nothing Then
        Target.Offset(0, 1) = Now
        Target.Offset.NumberFormat = "dd/mm/yyyy hh:mm:ss"  
    End If
End Sub

2 个答案:

答案 0 :(得分:1)

我不确定您的工作表的结构100%正确,因此以下是我的回答假设。您只希望用户修改“ A8:D5005”范围内的单元格…以及要在工作表上的某个位置记录更改的单元格的日期/时间戳。

因此,我将首先通过转到Excel“查看”功能区(不在VBA中)来保护工作表,并按如下所示设置可编辑范围。

Review ribbon

在关闭对话框之前,单击“保护表”,以便表的其余部分受到密码保护。

Allow Users to Edit Range

完成此操作后……您可以使用下面的代码来记录日期/时间戳。在此示例中……我将它们记录在可编辑范围右侧的列中(假设您的可编辑数据仅在D列中)。

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim vIntersect As Variant
    Set vIntersect = Application.Intersect(Target, Range("A8:D5005"))
    If Not vIntersect Is Nothing Then
        Application.EnableEvents = False
        Target.Worksheet.Unprotect Password:="Midnight"
        Target.Offset(0, 5) = Now
        Target.Offset(0, 5).NumberFormat = "dd/mm/yyyy hh:mm:ss"
        Target.Worksheet.Protect Password:="Midnight"
        Application.EnableEvents = True
    End If
End Sub

希望这会有所帮助。

答案 1 :(得分:1)

我仍在猜测您要尝试做的事情……但是这是允许您的用户输入四个数据点,然后按按钮将数据点添加到受保护列表的方法……并且包括时间戳。

首先通过使用“格式化单元格”选项在A4到D4中设置4个数据输入单元格,对于“保护”选项卡上的 Locked (锁定)未选中的这些单元格,请确保。

接下来创建一个按钮并将该按钮链接到以下代码:

Sub ButtonCode()
    ActiveSheet.Unprotect Password:="A"
    Range("A7:E7").Insert xlShiftDown
    Range("A4:D4").Copy Range("A7:D7")
    Range("E7") = Now()
    Range("A7:E7").Interior.Color = rgbLightBlue
    Range("A7:E7").Font.Color = rgbBlack
    ActiveSheet.Protect Password:="A"
End Sub

保护工作表是一次只能做的一步;我的示例始终使用密码“ A”。请注意,您的用户无需随时输入密码。

设置工作表后,单击按钮,代码将解锁工作表(允许它进行编辑),将现有数据向下移动,将新数据点复制到列表顶部,添加时间戳和一些最小的格式。然后,它将重新启用保护,以使用户无法覆盖现有条目。

下面的屏幕快照让您大致了解它的外观,包括显示A4:D4需要解锁。

screen example

也许不是您正在考虑的实现方向……但是此示例中包含的原理可能对您有用。一切顺利。