VBA代码运行在Excel 2013中,但不是在2010年

下面我用excel 2013编写的代码适用于excel 2013,但在我公司的2010版excel上试用时,它会在input框对话框上单击“取消”button并停在代码行时产生错误:

EntryDate = CDate(InputBox("Insert Date", "Insert Date", vbOKCancel)) 

说:types不匹配,数字是:运行时错误'13':

为什么?

  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 

EntryDate As Variant更改为EntryDate As Variant

也换线路,

 EntryDate = CDate(InputBox("Insert Date", "Insert Date", vbOKCancel))` to 

 EntryDate = InputBox("Insert Date", "Insert Date", vbOKCancel) 

并在那之后

添加这一行

 If EntryDate = False Then Exit Sub 

在这一行后,你可以写

 EntryDate = Cdate(EntryDate) 

原因很简单,因为Cdate(False)会给你00:00:00Cdate(True)会给你29/12/1899

从评论后续

这是你正在尝试?

 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