【发布时间】:2020-06-10 05:02:13
【问题描述】:
我对 VBA 很陌生,但到目前为止,我已经能够自己完成所需的一切。但是,我似乎无法解决这个问题。从技术上讲,我有 2 个不同的私人潜艇(Worksheet_Change),但只有将它们结合起来才能让它们工作。第一个将 B 列中具有相同内容的单元格数量限制为 3 个。
第二个清除范围 G:I,如果 H = 100,则复制范围 A:F。当我清除时,“Macro1”给了我这个运行时错误(运行时错误'13':类型不匹配)出于某种原因的内容。很明显,《宏2》是在清内容,所以我真的是在自相矛盾。
Private Sub Worksheet_Change(ByVal Target As Range)
'First Macro. (The issue is in this Macro)
If WorksheetFunction.CountIf(Range("B4:B350"), Target) > 3 Then
msgbox "This team member has the maximum number of open projects.", vbCritical, "Overburdened"
Target.Value = ""
Target.Select
End If
'Second Macro
Dim rngStart As Range
Set rngStart = ActiveCell
A = Worksheets("Project Tracking").Cells(Rows.Count, 1).End(xlUp).Row
For i = 4 To A
If Worksheets("Project Tracking").Cells(i, 8).Value = 100 Then
Worksheets("Project Tracking").Range(Cells(i, 7), Cells(i, 9)).ClearContents
Worksheets("Project Tracking").Range(Cells(i, 1), Cells(i, 6)).Copy
Worksheets("Completed Projects").Activate
B = Worksheets("Completed Projects").Cells(Rows.Count, 1).End(xlUp).Row
Worksheets("Completed Projects").Cells(B + 1, 1).Select
ActiveSheet.Paste
Worksheets("Project Tracking").Activate
Worksheets("Project Tracking").Range(Cells(i, 1), Cells(i, 6)).ClearContents
Call Reset_List
Call Macro3
End If
Next
Application.CutCopyMode = False
ThisWorkbook.Worksheets("Project Tracking").Cells(1, 1).Select
rngStart.Select
End Sub
【问题讨论】:
-
快速测试 - 看看您是如何(正确地!)使用工作表“项目跟踪”来验证
Range()的?当您使用Range()执行此操作时,您还需要使用其中的Cells()引用执行此操作。所以就做Worksheets("Project Tracking").Range(Worksheets("Project Tracking").Cells(i, 1), Worksheets("Project Tracking").Cells(i, 6)).ClearContents -
如果您确定问题是因为
_Change()事件导致更改(即调用自身),您应该能够通过将Application.EnableEvents = False放在 Sub 的开头和 @ 来防止它987654328@在最后。