2014-10-17 124 views
2

我在excel vba中寫了一個vba子例程,它總計出售給不同年份的客戶的lbs數量,並且出於某種原因,我得到了年度函數的編譯錯誤。有人能解釋爲什麼嗎?這裏是我的代碼:excel vba年度函數編譯錯誤

Private Sub lbsPerCustPerYear_Click() 

Dim i As Integer 
Dim Cust As String 
Dim Cust2 As String 
Dim Total As Integer 
Dim Output As Range 
Dim Output2 As Range 
Dim Year1 As Date 

Total = 0 
Year1 = Range("K6").Value 
Cust = Range("C6").Value 
Cust2 = Range("C7").Value 
Set Output = Sheets("Sheet2").Cells(2, 2) 
Set Output2 = Sheets("Sheet2").Cells(2, 3) 

For i = 1 To 14750 
Year1 = Range("K5").Offset(i, 0).Value 
If IsDate(Sheets("Sheet1").Cells(i, 11)) Then 
If Cust = Cust2 And Year(Sheets("Sheet1").Cells(i, 11)) = 2012 Then 
Total = Range("Q5").Offset(i, 0).Value + Range("Q6").Offset(i, 0).Value 
Cust = Range("C5").Offset(i, 0).Value 
Cust2 = Range("C6").Offset(i, 0).Value 
Output.Value = Cust 
Output2.Value = Total 

Else 
Cust = Range("C5").Offset(i, 0).Value 
Cust2 = Range("C6").Offset(i, 0).Value 
Year1 = Range("K5").Offset(i, 0).Value 
Set Output = Output.Offset(1, 0) 
Set Output2 = Output2.Offset(1, 0) 

End If 

Else 
Cust = Range("C5").Offset(i, 0).Value 
Cust2 = Range("C6").Offset(i, 0).Value 
Year1 = Range("K5").Offset(i, 0).Value 
Set Output = Output.Offset(1, 0) 
Set Output2 = Output2.Offset(1, 0) 

End If 
Next i 



End Sub 

的錯誤是在該行:

If Cust = Cust2 And Year(Sheets("Sheet1").Cells(i, 11).Value) = 2012 Then 

提前感謝!

+0

這段代碼被編輯來解決這個問題,但是我現在得到了一行溢出錯誤:Total = Range(「Q5」)。Offset(i,0).Value + Range(「Q6」)。Offset i,0)。值 – ajs 2014-10-17 16:16:59

回答

0

第11列中的每個單元格是否包含有效的日期或年份?

你可以檢查這首:

If isdate(Sheets("Sheet1").Cells(i, 11).Value) then 

    If Cust = Cust2 And Year(Sheets("Sheet1").Cells(i, 11).Value) = 2012 Then 

...... 

    end if 

else 

'handle invalid date 

end if 

別的東西我注意到是你使用年份作爲變量名,將其更改爲dtYear或東西,因爲這可能與在年度工作爲前提對象庫。

+0

所以我這樣做了,但現在我得到了一個應用程序定義的或對象定義的錯誤 – ajs 2014-10-17 15:49:26

+0

,我也將年份變量改爲year1 – ajs 2014-10-17 15:50:18

+0

當它失敗時,該單元格的值是多少? – jmdon 2014-10-17 15:51:27

0

是的,你所做的是正確的。現在您只需檢查是否

1)Sheets("Sheet1").Cells(i, 11).Value此特定單元格格式化爲日期。

2)試試用這個代替Sheets("Sheet1").Cells(i, 11)。從語句中刪除.value。

+0

所以我做了以上建議的人,但我現在正在得到一個應用程序定義或對象定義的錯誤,你知道爲什麼發生這種情況嗎? – ajs 2014-10-17 15:51:20