首页 > 解决方案 > VBA:代码在原始工作表模块中工作,但不是新模块

问题描述

我有一些代码是在我正在使用的工具中开发的,它根据另一个单元格的变化执行一些基本计算,以添加日期等。它在为其创建的工作表中运行良好,但是,当我将其复制到另一个工作表模块以执行类似任务(添加了两个额外的列)时,它似乎不起作用。我已经更改了对两个额外列的引用,并且我没有收到任何错误消息,它只是没有进行应有的计算。我是 VBA 新手,但似乎无法弄清楚。在此先感谢您的帮助!

Public Sub Worksheet_SelectionChange(ByVal Target As Range)
On Error GoTo SelectError:
Oval = Target.Value
SelectError:
End Sub

Private Sub Worksheet_Change2(ByVal Target As Range)


If Not Intersect(Target, Range("G11:G202")) Is Nothing Then
On Error GoTo Eerror:

Application.ScreenUpdating = False
ActiveWorkbook.Unprotect Password:="Password"

        'Dim TarAddress As String


            Range(Target.Address).Select  ''''DO NOT DELETE, PREVENTS LOOP

If Range(Target.Address).Value <> 0 Then
Range(Target.Address).Offset(0, 1).Value = Date

'Update Budget

If Range(Target.Address).Offset(0, 5).Value = 0 Then

Range(Target.Address).Offset(0, 5).Value = Range(Target.Address).Value

End If

If Range(Target.Address).Value <> 0 Then
Range(Target.Address).Offset(0, 6).Value = Range(Target.Address).Value

End If

'Set Task Status to Not Started in Cancelled

If Range(Target.Address).Offset(0, 2).Value = "Cancelled" Then

Range(Target.Address).Offset(0, 2).Value = "Not Started"

End If


End If
Eerror:
ActiveWorkbook.Protect Password:="Password"
End If


If Not Intersect(Target, Range("I11:I202")) Is Nothing Then
On Error GoTo GError:
Application.ScreenUpdating = False
ActiveWorkbook.Unprotect Password:="Password"

        'Dim TarAddress As String


             Range(Target.Address).Select  ''''DO NOT DELETE, PREVENTS LOOP

'Mark Complete Date
If Range(Target.Address).Value = "Complete" Or Range(Target.Address).Value = "Complete w/ Issues" Then
Range(Target.Address).Offset(0, 2).Value = Date
Range(Target.Address).Offset(0, -2).Value = 0
End If
'Mark Start Date w/ Complete Date if Blank
If (Range(Target.Address).Value = "Complete" Or Range(Target.Address).Value = "Complete w/ Issues") And Range(Target.Address).Offset(0, 1).Value = "" Then
Range(Target.Address).Offset(0, 1).Value = Date
End If

'Mark Start Date
If Range(Target.Address).Value = "In Progress" And Range(Target.Address).Offset(0, 1).Value = "" Then
Range(Target.Address).Offset(0, 1).Value = Date
End If

'Mark Cancel Date
If Range(Target.Address).Value = "Cancelled" And Range(Target.Address).Offset(0, 8).Value = 1 Then
Range(Target.Address).Offset(0, 13).Value = Date
End If
GError:
ActiveWorkbook.Protect Password:="Password"
End If

End Sub

ETA:我不知道是不是因为它在工作表和模块中,但它不会让我逐步通过代码来尝试跟踪它。我期望的一个例子是,如果我在 G 列的单元格中输入大于 0 的值,它将用今天的日期更新下一个单元格,将该值复制并粘贴到单元格 5 和 6 列中,以及其他一些事情。当我输入一个值时,它不会进行任何更改,也不会给出错误消息。工作表保持不变。

标签: excelvba

解决方案


推荐阅读