2016-09-16 57 views
1

我目前正在分析一個顏色編碼的事件發生在一行中的時間表,並且時間在列上擴展(在單元格中只有顏色沒有文本,是的,它是愚蠢的,但它沒有我的控制)。我目前能夠將一次事件的結果打印到另一張工作表中,但我無法確定如何使其打印出不同單元格中的重複事件的日期(它目前僅打印上次發生事件的時間)。我目前的代碼是:輸出一個循環內的循環事件VBA

For i = 2 To 93 
    If Cells(7, i).Interior.Color = "8421631" And Cells(7, i - 1).Interior.Color = "16777215" Then 
     startDay = Cells(3, i).Value 
     startMonth = Cells(1, i).Value 
     name = Cells(7, i).Value 
     Worksheets("Sheet1").Activate 
     ActiveWorkbook.Worksheets("Sheet1").Cells(2, 1) = startDay + startMonth 

    End If 
    If Cells(7, i).Interior.Color = "8421631" And Cells(7, i + 1).Interior.Color = "16777215" Then 
     endDay = Cells(3, i).Value 
     endMonth = Cells(1, i).Value 
     ActiveWorkbook.Worksheets("Sheet1").Cells(2, 2) = endDay + endMonth 
    End If 
Next i 

我所有的變量都以字符串形式輸入。我嘗試了幾種不同的方法,但都沒有成功。我覺得我需要在IF語句中添加另一個循環,但我不確定如何做到最好。 整體代碼達到了它的目的(以前用於輸出的消息框確認它是按照它應該運行的)。這只是整個代碼的一小部分,但有了這個答案,我可以在其他地方應用它。

+0

看你怎麼做了'ActiveWorkbook.Worksheets( 「工作表Sheet1」)細胞(..)'?對所有其他參考也這樣做。它可能不會抓取你期望的數據,因爲沒有使用表格,Range(),Cells(),Row()等等在'ActiveSheet'上工作。 – BruceWayne

回答

0

什麼我能掌握你的描述,你可以試試這個代碼:

Option Explicit 

Sub main() 
    Dim i As Long 

    For i = 2 To 93 
     If Cells(7, i).Interior.Color = "8421631" Then 
      If Cells(7, i - 1).Interior.Color = "16777215" Or Cells(7, i + 1).Interior.Color = "16777215" Then 
       WriteDate Cells(3, i).Value, Cells(1, i).Value 
      End If 
     End If 
    Next i 
End Sub 

Sub WriteDate(day As String, month As String) 
    With ActiveWorkbook.Worksheets("Sheet1") 
     .Cells(2, .Columns.Count).End(xlToLeft).Offset(, 1) = day & "/" & month 
    End With 
End Sub 
+0

謝謝!自從我仍在學習VBA的細節以來,我有一個很快的問題。在單元格和列對他們做什麼之前添加(。)是什麼?我試圖在沒有這些的情況下運行sub,它不打印任何結果。 – JonSnow

+0

不客氣。 (。)用於限定後面的「With」語句中引用的對象的成員。在這種情況下,我們有「With ActiveWorkbook.Worksheets(」Sheet1「)」,以便「.Cells」和「.Columns」被引用爲當前活動工作簿的「Sheet1」工作表的範圍,而沒有(。)將在當前活動的工作表中引用範圍。希望這有助於澄清。最後,您可能想要將我的答案標記爲已接受。謝謝。 。 – user3598756