2016-11-22 72 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 
相關問題