范围对象经过 "worksheet 1" 而不是 "worksheet 2"
Range object goes through "worksheet 1" instead of "worksheet 2"
我在 for 循环中迭代一系列项目时遇到问题:
程序应该如何工作-
我开始工作sheet 1("Tracking Spreadsheet"),根据工作的变化sheet 1(在单元格中选择"yes")它会将您转移到 worksheet 2("Deferred Submittals"),然后从 worksheet 2 遍历一系列单元格(例如 A1:A20)。for 循环将继续进行,直到它到达一个空的单元格,然后停止然后继续写入该单元格。
现在如何运作-
我开始工作sheet 1,根据工作的变化sheet 1(在单元格中选择"yes")它会调你去工作sheet 2 然后遍历来自 worksheet 2 的一系列单元格(例如 A1:A20)。但是,不是遍历 worksheet 2 的 A1:A20,它会遍历 worksheet 1 的 A1:A20。在worksheet 1的A1:A20范围内找到一个空单元格后,它会填充Worksheet 2中的相应单元格(如果A5在worksheet 1上为空, 然后它会填写 A5 on worksheet 2).
我希望得到帮助,让范围在当时(工作sheet 2)遍历活动 sheet,而不是遍历工作sheet 1。
到目前为止我的代码:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
' Deferred Submittal, Column C = 3
Dim cellTextDS As String
Dim deferredArray As Range, deferredCell As Range, deferredRowEmpty As Long
deferredRowEmpty = 1
' Deferred Submittal, Column C
If Target.Column = 3 Then
Row = Target.Row
cellTextDS = ActiveSheet.Range("C" & Row).Text
If cellTextDS = "Yes" Then
Sheets(3).Activate
Set deferredRange = Workbooks("BPS Tracking Sheet v6.xlsm").Worksheets("Deferred Submittals").Range("A1:A20")
For Each deferredCell In deferredRange
Sheets(3).Activate
MsgBox "inside deferredCell is " & deferredCell
MsgBox " active sheet currently is " & name
If IsEmpty(Range("A" & deferredRowEmpty).Value) = True Then Exit For
MsgBox " deferredRowEmpty is " & deferredRowEmpty
deferredRowEmpty = deferredRowEmpty + 1
Next deferredCell
MsgBox "Moving to 'Deferred Submittals' tab in order to input more information. row is " & deferredRowEmpty
ActiveSheet.Range("A" & deferredRowEmpty).Value = "empty"
End If
End If
End Sub
非常感谢任何帮助!
p.s。代码在工作的 worksheet_change 部分 sheet 1 如果有任何不同的话。
p.s.s.我试过使用 this Whosebug method for setting workbooks and worksheets, to no avail
p.s.s.s.发布了我这部分的其余代码。本节中有更多代码,但实际上只是本节的复制和粘贴,只是用于不同的列。我还编辑了 worksheet 1 和 2 是什么,但它们是本工作簿中不同的 worksheet 选项卡,特别是 worksheet 1 = "Tracking Spreadsheet" 和 worksheet 2 = "Deferred Submittals"
好的 - 我想这就是您要找的东西。使用 worksheet_change 事件时,有几件事应该做。
禁用事件意味着宏可以 运行 而不会触发进一步的错误更改调用,因此需要进行一些错误管理。
我留下了可能有用的注释行,这样一次对多个单元格的任何更改都不会触发进一步的更改,只会退出子
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
'If Target.Cells.Count > 1 Then Exit Sub
If Target.Column <> 3 Then Exit Sub
On Error GoTo ExitSub
Application.EnableEvents = False
Dim wsSource As Worksheet: Set wsSource = Me
Dim wsTarget As Worksheet: Set wsTarget = ThisWorkbook.Worksheets("Deferred Submittals")
Dim NextEmpty As Range
If wsSource.Cells(Target.Row, 3) = "Yes" Then
Set NextEmpty = wsTarget.Range("A1:A20").Find("", LookIn:=xlValues)
If Not NextEmpty Is Nothing Then
Debug.Print NextEmpty.Address ' Function check
NextEmpty.Value = Target.Row ' Or whatever you want the value to be
End If
End If
ExitSub:
Application.EnableEvents = True
End Sub
我在 for 循环中迭代一系列项目时遇到问题:
程序应该如何工作-
我开始工作sheet 1("Tracking Spreadsheet"),根据工作的变化sheet 1(在单元格中选择"yes")它会将您转移到 worksheet 2("Deferred Submittals"),然后从 worksheet 2 遍历一系列单元格(例如 A1:A20)。for 循环将继续进行,直到它到达一个空的单元格,然后停止然后继续写入该单元格。
现在如何运作-
我开始工作sheet 1,根据工作的变化sheet 1(在单元格中选择"yes")它会调你去工作sheet 2 然后遍历来自 worksheet 2 的一系列单元格(例如 A1:A20)。但是,不是遍历 worksheet 2 的 A1:A20,它会遍历 worksheet 1 的 A1:A20。在worksheet 1的A1:A20范围内找到一个空单元格后,它会填充Worksheet 2中的相应单元格(如果A5在worksheet 1上为空, 然后它会填写 A5 on worksheet 2).
我希望得到帮助,让范围在当时(工作sheet 2)遍历活动 sheet,而不是遍历工作sheet 1。
到目前为止我的代码:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
' Deferred Submittal, Column C = 3
Dim cellTextDS As String
Dim deferredArray As Range, deferredCell As Range, deferredRowEmpty As Long
deferredRowEmpty = 1
' Deferred Submittal, Column C
If Target.Column = 3 Then
Row = Target.Row
cellTextDS = ActiveSheet.Range("C" & Row).Text
If cellTextDS = "Yes" Then
Sheets(3).Activate
Set deferredRange = Workbooks("BPS Tracking Sheet v6.xlsm").Worksheets("Deferred Submittals").Range("A1:A20")
For Each deferredCell In deferredRange
Sheets(3).Activate
MsgBox "inside deferredCell is " & deferredCell
MsgBox " active sheet currently is " & name
If IsEmpty(Range("A" & deferredRowEmpty).Value) = True Then Exit For
MsgBox " deferredRowEmpty is " & deferredRowEmpty
deferredRowEmpty = deferredRowEmpty + 1
Next deferredCell
MsgBox "Moving to 'Deferred Submittals' tab in order to input more information. row is " & deferredRowEmpty
ActiveSheet.Range("A" & deferredRowEmpty).Value = "empty"
End If
End If
End Sub
非常感谢任何帮助!
p.s。代码在工作的 worksheet_change 部分 sheet 1 如果有任何不同的话。
p.s.s.我试过使用 this Whosebug method for setting workbooks and worksheets, to no avail
p.s.s.s.发布了我这部分的其余代码。本节中有更多代码,但实际上只是本节的复制和粘贴,只是用于不同的列。我还编辑了 worksheet 1 和 2 是什么,但它们是本工作簿中不同的 worksheet 选项卡,特别是 worksheet 1 = "Tracking Spreadsheet" 和 worksheet 2 = "Deferred Submittals"
好的 - 我想这就是您要找的东西。使用 worksheet_change 事件时,有几件事应该做。
禁用事件意味着宏可以 运行 而不会触发进一步的错误更改调用,因此需要进行一些错误管理。
我留下了可能有用的注释行,这样一次对多个单元格的任何更改都不会触发进一步的更改,只会退出子
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
'If Target.Cells.Count > 1 Then Exit Sub
If Target.Column <> 3 Then Exit Sub
On Error GoTo ExitSub
Application.EnableEvents = False
Dim wsSource As Worksheet: Set wsSource = Me
Dim wsTarget As Worksheet: Set wsTarget = ThisWorkbook.Worksheets("Deferred Submittals")
Dim NextEmpty As Range
If wsSource.Cells(Target.Row, 3) = "Yes" Then
Set NextEmpty = wsTarget.Range("A1:A20").Find("", LookIn:=xlValues)
If Not NextEmpty Is Nothing Then
Debug.Print NextEmpty.Address ' Function check
NextEmpty.Value = Target.Row ' Or whatever you want the value to be
End If
End If
ExitSub:
Application.EnableEvents = True
End Sub