[英]VBA Code runs in excel 2013 but not in 2010
The following code I've written using excel 2013 works on excel 2013, but when trying it on my company's 2010 version of excel it produces an error when I click Cancel button on inputbox dialog box and stops at the line of code: 我使用excel 2013编写的以下代码适用于excel 2013,但是当我在我公司的2010版excel上尝试它时,当我单击输入框对话框上的取消按钮并停在代码行时会产生错误:
EntryDate = CDate(InputBox("Insert Date", "Insert Date", vbOKCancel))
says: type Mismatch and the number is: Run-time error'13': 说:类型不匹配,数字是:运行时错误'13':
Why? 为什么?
Sub InsertNewEntry()
'
' InsertNewEntry Macro
' To Insert New Entry for exchange rates
'
Dim LastRow As Integer, EntryDate As Date
Dim EURtoUSD As Double, JODtoUSD As Double, ILStoUSD As Double
' determine the number of the last row entered
LastRow = ThisWorkbook.Worksheets("Exchange Rates Template").Cells(Rows.Count, 2).End(xlUp).Row
'determine if last date is last day of the year
If Cells(LastRow, 2) = #12/31/2014# Then
MsgBox "You are not allowed to insert a date above " & "31/12/ " & Cells(4, 1).Value
Exit Sub
Else
Cells(LastRow, 4).Select
Selection.ListObject.ListRows.Add AlwaysInsert:=False
Cells(LastRow, 8).Select
Selection.ListObject.ListRows.Add AlwaysInsert:=False
Cells(LastRow, 12).Select
Selection.ListObject.ListRows.Add AlwaysInsert:=False
Cells(LastRow + 1, 2).Select
EntryDate = CDate(InputBox("Insert Date", "Insert Date", vbOKCancel))
If EntryDate <> "" Then
Cells(LastRow + 1, 2) = EntryDate
Cells(LastRow + 1, 3) = "EUR to USD"
Cells(LastRow + 1, 6) = EntryDate
Cells(LastRow + 1, 7) = "JOD to USD"
Cells(LastRow + 1, 10) = EntryDate
Cells(LastRow + 1, 11) = "ILS to USD"
Else
Cells(LastRow + 1, 2).Select
Selection.ListObject.ListRows(LastRow - 3).Delete
Cells(LastRow + 1, 6).Select
Selection.ListObject.ListRows(LastRow - 3).Delete
Cells(LastRow + 1, 10).Select
Selection.ListObject.ListRows(LastRow - 3).Delete
Exit Sub
End If
End If
End Sub
Change EntryDate As Date
to EntryDate As Variant
将
EntryDate As Variant
更改为EntryDate As Variant
EntryDate As Date
and also change the line, 并改变线,
EntryDate = CDate(InputBox("Insert Date", "Insert Date", vbOKCancel))` to
to 至
EntryDate = InputBox("Insert Date", "Insert Date", vbOKCancel)
and after that line 然后在那条线之后
Add this line 添加此行
If EntryDate = False Then Exit Sub
After this line, you may write 在这一行之后,你可以写
EntryDate = Cdate(EntryDate)
And the reason is simple because Cdate(False)
will give you 00:00:00
and Cdate(True)
will give you 29/12/1899
原因很简单因为
Cdate(False)
会给你00:00:00
而Cdate(True)
会给你29/12/1899
Followup from comments 跟进评论
Is this what you are trying? 这是你在尝试什么?
Dim EntryDate As Variant
EntryDate = InputBox("Insert Date", "Insert Date", vbOKCancel)
If EntryDate = False Then Exit Sub
If EntryDate <> "" Then
EntryDate = CDate(EntryDate)
Cells(LastRow + 1, 2).Value = EntryDate
Cells(LastRow + 1, 3).Value = "EUR to USD"
Cells(LastRow + 1, 6).Value = EntryDate
Cells(LastRow + 1, 7).Value = "JOD to USD"
Cells(LastRow + 1, 10).Value = EntryDate
Cells(LastRow + 1, 11).Value = "ILS to USD"
Else
Cells(LastRow + 1, 2).ListObject.ListRows(LastRow - 3).Delete
Cells(LastRow + 1, 6).ListObject.ListRows(LastRow - 3).Delete
Cells(LastRow + 1, 10).ListObject.ListRows(LastRow - 3).Delete
Exit Sub
End If
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.