简体   繁体   English

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

[英]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:00Cdate(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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM