2017-07-03 65 views
1

爲什麼此代碼只在第11行中寫入變量「Duracao」(持續時間),而不是在第12和第13中寫入變量?你可以在這裏看到excel表格的圖像:https://i.stack.imgur.com/Z6LJw.png爲什麼此代碼只將變量寫入表的第一行?

基本上,我爲每架直升機開始和結束日期的幾個工作,我想獲得每個工作的持續時間(天)。

Sub EscalaDinâmicaHTA() 

Dim NumHelis As Integer 
Dim DataInicio As Date 
Dim DataFim As Date 
Dim ContData As Double 
Dim LinHeliInicial As Integer 
Dim i As Integer 
Dim j As Integer 
Dim k As Integer 

NumHelis = Worksheets(1).Range("B8").Value 
LinHeliInicial = 11 
LinTotal = LinHeliInicial + NumHelis - 1 

i = 2 
j = 3 
k = 4 


Do While LinHeliInicial <= LinTotal 
Do While i < 26 And j < 27 And k < 28 

DataInicio = Worksheets(1).Cells(LinHeliInicial, i).Value 
ContData = DateValue(DataInicio) 
ContData = Val(ContData) 

DataFim = Worksheets(1).Cells(LinHeliInicial, j).Value 
DataFim = DateValue(DataFim) 

Duracao = DataFim - DateValue(DataInicio) 
Worksheets(1).Cells(LinHeliInicial, k).Value = Duracao + 1 
Duracao = ContData + Duracao 
Duracao = Val(Duracao) 

ContData = ContData - 43072   
Duracao = Duracao - 43072 

k = k + 3 
j = j + 3 
i = i + 3 

Loop 

Do While ContData <= Duracao 
Cells(LinHeliInicial, ContData).Interior.ColorIndex = 4 
ContData = ContData + 1 
Loop 



LinHeliInicial = LinHeliInicial + 1 
Loop 



End Sub 

回答

0
i = 2 
    j = 3 
    k = 4 
    Do While LinHeliInicial <= LinTotal 
    Do While i < 26 And j < 27 And k < 28 

您需要在每次迭代重新初始化i, j, kLinHeliInicial。切換上述各行的順序爲這樣:

Do While LinHeliInicial <= LinTotal 
    i = 2 
    j = 3 
    k = 4 
    Do While i < 26 And j < 27 And k < 28 
+0

我已經做到了,但它不工作。它出現了一個錯誤:「運行時錯誤1004:應用程序定義或對象定義的錯誤」,它阻止了第一個循環進入第二步。 – MiguelLeal

+0

@MiguelLeal這解決了當前只寫第一行的問題。您的數據中必須有其他問題,例如假設某些單元格是「日期」,而它們不是有效的日期。也可能是別的。 –

相關問題