2016-11-22 73 views
2

我在通过一系列项目的迭代for循环的问题:Range对象经过“工作表1”而不是“工作表2”

的程序应该如何与工作

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

如何其工作NOW-

我开始在工作表1,并根据工作表1的变化(选择在单元格中“是”),它会传送你到工作表2,然后遍历通过一系列(例如A1:A20)。但是,不是遍历工作表2的A1:A20,而是遍历工作表1的A1:A20。在工作表1的A1:A20范围内发现一个空单元格后,它将填充工作表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 

任何帮助将非常感激!

p.s.该代码位于工作表1的worksheet_change部分,如果这有所帮助。

ps.s.s.我试过使用this stackoverflow method for setting workbooks and worksheets, to no avail

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

+0

请张贴休息,“Target.Column = 3”是什么?我怀疑它属于'Worksheet_Change(ByVal Target As Range)'事件。另外,“WorkSheet 1”和“WorkSheet 2”的名称是什么? –

+0

当“目标”不是活动工作表时,更改事件可能会触发。改用'Target.Parent'或'Me'。 – Comintern

+0

我在更多信息中添加了Shai Rado,谢谢你让我知道。共产国际,我会研究这一点。到目前为止。激活是我一直在尝试,但它不起作用 – qqkju

回答

0

好的 - 我认为这是你正在寻找的东西。当使用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 
相关问题