范围对象通过“工作表1”而不是“工作表2”

我有一个迭代遍历for循环中的一系列项目的问题:

程序如何工作 –

我从工作表1开始(“跟踪电子表格”),并根据工作表1中的更改​​(在单元格中select“是”),它会将您转移到工作表2(“延期送达”),然后遍历从工作表2中的单元格(例如A1:A20)。for循环将继续前进,直到它到达空单元格为止,然后停止然后继续写入该单元格。

现在如何工作 –

我从工作表1开始,根据工作表1中的更改​​(在单元格中select“是”),它会将您转移到工作表2,然后从工作表2中遍历一系列单元格(例如A1:A20)。但是,不是遍历工作表2的A1:A20,而是遍历工作表1的A1:A20。 在工作表1的A1:A20范围内find一个空单元格后,它将填充工作表2中的相应单元格(如果A5在工作表1上为空,则会在工作表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 

任何帮助将非常感激!

ps代码在工作表1的worksheet_change部分,如果有什么区别的话。

pss我试过使用这个stackoverflow方法来设置工作簿和工作表,无济于事

psss公布了这部分代码的其余部分。 本节中有更多的代码,但它实际上只是复制和粘贴本部分,但不同的列。 我也编辑了工作表1和2,但它们是本工作簿中的不同工作表选项卡,特别是工作表1 =“跟踪电子表格”和工作表2 =“延期送件”

好的 – 我想这是你要找的东西。 当使用worksheet_change事件时,应该做一些事情。

禁用事件意味着macros可以运行而不会触发进一步错误的更改调用,因此需要进行一些错误pipe理。

我留下了一条可能有用的注释行,这样一次在多个单元格上的任何更改都不会触发进一步的更改,只会退出子

 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