【问题标题】:excel vba compile error on year functionexcel vba编译年份函数错误
【发布时间】:2014-10-17 15:33:16
【问题描述】:

我正在用 excel vba 编写一个 vba 子例程,它汇总了不同年份向客户出售的磅数,由于某种原因,我在 year 函数中遇到了编译错误。有人可以解释为什么吗?这是我的代码:

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

提前致谢!

【问题讨论】:

  • 编辑此代码以解决问题,但我现在在行上遇到溢出错误:Total = Range("Q5").Offset(i, 0).Value + Range("Q6 ").Offset(i, 0).Value

标签: vba function excel compiler-errors


【解决方案1】:

第 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

我注意到的另一件事是您使用 Year 作为变量名,将其更改为 dtYear 或其他内容,因为这可能与对象库中的 Year 函数冲突。

【讨论】:

  • 所以我这样做了,但现在我得到一个应用程序定义或对象定义的错误
  • 我还将变量 year 更改为 year1
  • 失败时该单元格的值是多少?
  • 您的循环也从 0 开始,因此该行正在寻找第 0 行。尝试将其更改为 1。(对于 i = 1 到 14750)
  • 它没有说它在哪里失败它只是给了我错误而不是因为我只使用循环来偏移单元格,所以起始偏移量为 0,但起始单元格已定义.
【解决方案2】:

是的,你所做的是正确的。现在你只需要检查是否

1) Sheets("Sheet1").Cells(i, 11).Value 这个特定的单元格被格式化为日期。

2) 尝试使用它来代替 Sheets("Sheet1").Cells(i, 11)。从语句中删除 .value。

【讨论】:

  • 所以我按照上面的建议做了,但我现在收到应用程序定义或对象定义的错误,你知道为什么会这样吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-19
  • 2021-10-28
  • 2018-03-12
  • 1970-01-01
  • 1970-01-01
  • 2014-03-11
相关资源
最近更新 更多