【发布时间】:2017-04-06 12:28:32
【问题描述】:
我在遍历 for 循环中的一系列项目时遇到问题:
程序应该如何工作-
我从工作表 1(“跟踪电子表格”)开始,根据工作表 1 的变化(在单元格中选择“是”),它会将您转移到工作表 2(“延期提交”),然后遍历工作表 2 中的一系列单元格(例如 A1:A20)。for 循环将继续运行,直到到达一个空的单元格,然后停止然后继续写入该单元格。
它现在是如何工作的-
我从工作表 1 开始,根据工作表 1 的变化(在单元格中选择“是”),它会将您转移到工作表 2,然后遍历一系列单元格(例如 A1:A20)工作表 2。但是,它不会遍历工作表 2 的 A1:A20,而是遍历工作表 1 的 A1:A20。在工作表 1 的 A1:A20 范围内找到一个空单元格后,它将填写工作表 2 中的相应单元格(如果工作表 1 上的 A5 为空,则它将填写工作表 2 上的 A5)。
我希望获得帮助,让范围在当时(工作表 2)中迭代活动工作表,而不是迭代工作表 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
任何帮助将不胜感激!
附言如果有任何区别,代码位于工作表 1 的 worksheet_change 部分。
附言我试过使用this stackoverflow method for setting workbooks and worksheets, to no avail
p.s.s.s.为这部分发布了我的其余代码。本节中有更多代码,但实际上只是本节的复制和粘贴,但用于不同的列。我还编辑了工作表 1 和 2 是什么,但它们是本工作簿中不同的工作表选项卡,特别是工作表 1 =“跟踪电子表格”和工作表 2 =“延期提交”
【问题讨论】:
-
请发布您的其余代码,
Target.Column = 3是什么?我怀疑它属于Worksheet_Change(ByVal Target As Range)事件。另外,WorkSheet 1和WorkSheet 2的名称是什么? -
当
Target不是活动工作表时可以触发更改事件。请改用Target.Parent或Me。 -
我添加了更多信息 Shai Rado,感谢您告诉我。共产国际,我会研究这个。到目前为止 .Activate 是我一直在尝试的,但它不起作用
标签: excel loops range worksheet-function vba