2016-05-15 30 views
0

我正在通過刪除和添加更多數據來測試我的編碼,那是當我意識到編碼出現問題時。最初,我在「LEAVE」部分下開始了3人的編碼。爲什麼我在選擇另一張表格後停在第三行

因此,我試圖刪除該部分的人,編碼仍然有效。當時我在該部分添加了一個人,然後我意識到我的編碼不起作用。當我將數據從3人更改爲4人時,仍然停留在第三人。它沒有繼續循環來檢測第4人。

我測試,並意識到這是當我開始用

Sheets("Cash").Select 

起,它沒有工作。

沒有這個,循環仍然有效,它可以檢測到第四個人。

Do While Cells(ShiftRowName, 1) <> "" 
    Set ShiftName = Sheets("Shift Roster").Cells(ShiftRowName, ShiftColName) 

    If ShiftName = "" Or IsEmpty(ShiftName) Then 
     Exit Do 
    Else 
     'When the following coding was added, 
     'It stopped detecting at the 3rd person. 
     Sheets("Cash").Select 

     Range("C1").Select 
     Cells.Find("Name").Activate 
     r2 = ActiveCell.Row 

     CashRowName = r2 + 1 

     Do While Cells(CashRowName, 1) <> "" 
      Set CashName = Sheets("Cash").Cells(CashRowName, CashColName) 

      If CashName = "" Or IsEmpty(CashName) Then 
       Exit Do 
      Else 
       MsgBox CashName 
       MsgBox ShiftName 

       End If 
      CashRowName = CashRowName + 1 
     Loop 

     End If 
    ShiftRowName = ShiftRowName + 1 
Loop 

任何可能解決這個問題?

編輯:

因爲正向埃德的啓發,我找到了答案,我的問題。謝謝。

我用下面的代碼

With Sheets("Cash") 
    Set FindRow = .Range("C:C").Find(What:="Name", LookIn:=xlValues) 
End With 
Dim FindRowNumber As Long 
CashRowName = FindRow.Row 
+0

在完成「現金」工作表上的工作後,您需要返回表格的工作表。或者,它更好地只是操縱你的現金錶而不實際選擇它。 –

+0

所以'Do While Cells(CashRowName,1)''循環在「Shift Roster」表格單元格上起作用? – user3598756

+0

是的,只需添加表格(「Cash」)即可 – stupidgal

回答

1
 'When the following coding was added, 
     'It stopped detecting at the 3rd person. 

     r2 = Sheets("Cash").Range("C1").Find("Name").row 
     'not sure if the above coding will actually work, 
     'but it avoids switching sheets and tries to work 
     'directly on worksheet "CASH". 

     CashRowName = r2 + 1 

這是你的代碼編輯的一個小片段。我很確定我的語法是關閉的。要點是避免在循環中改變工作表。另外,反覆使用選擇會減慢你的代碼,應該避免。

相關問題