运行时错误13:类型不匹配

时间:2015-10-28 08:44:08

标签: excel vba excel-vba

这是我第一次从零开始编码,确实是一个非常愚蠢的问题。

为什么我一直收到这个错误?

  

运行时错误'13':类型不匹配

我在B1中的值是一个整数

Private Sub Workbook_Open()
xdate = Worksheets("sheet1").Range("A1")
lsdate = DateAdd("d", -7, Date)
'MsgBox lsdate
If Day(lsdate) > Day(xdate) Then
    Worksheets("sheet1").Range ("B1") * 1 = result
Else
    Worksheets("sheet1").Range ("B1") * 1.07 = result
End If
Range("c1").Value = result
End Sub

我进一步编辑了以下代码,但无法使条件生效

'To create the following condition
'If less than 7 days interest = 0%
'if 8 to 30 days interest = 7%
'if more than 31 days interest = 9%

Sub Workbook_Open()

For i = 1 To 3 'Rows.Count
xdate = Cells(i, 1)
'MsgBox Cells(i, 1)
nulldate = DateAdd("d", -7, Date)
irate7late = DateAdd("d", -8, Date)
irate7early = DateAdd("d", -30, Date)


If Day(nulldate) < Day(xdate) Then
    result = Cells(i, 2) * 1
ElseIf Day(irate7early) <= Day(xdate) And Day(xdate) <= Day(irate7late) Then
            '30/9/2015      20/10/2015      20/10/2015      22/10/2015
    result = Cells(i, 2) * 1.07

ElseIf Day(irate7early) > Day(xdate) Then
    result = Cells(i, 2) * 1.09
End If

Cells(i, 3).Value = result

Next i

End Sub

2 个答案:

答案 0 :(得分:1)

你似乎对编程非常陌生,所以我会清楚地解释:

当您尝试使用几乎所有语言为keys: true分配value时,请使用:

variable

因此,您可以在等号variable = value 右侧的value上执行大量操作。

但是当您只是将=分配给=时,您无法在等号value的左侧执行操作。在测试2 variable时,您几乎可以执行任何操作,但在代码行的开头会有variablesIf这样的关键字。

因此,您的代码问题在于您颠倒了Whilevalue的顺序,并尝试执行variable

这是您更正后的代码(我缩进它以便可以轻松阅读):

value * 1 = variable

并且您应该始终引用您正在使用的工作表,因为之前您的代码没有指定Private Sub Workbook_Open() xdate = Worksheets("sheet1").Range("A1") lsdate = DateAdd("d", -7, Date) 'MsgBox lsdate If Day(lsdate) > Day(xdate) Then result = Worksheets("sheet1").Range ("B1") * 1 Else result = Worksheets("sheet1").Range ("B1") * 1.07 End If Sheets("Sheet_name").Range("c1").Value = result End Sub 应该在哪个工作表上。

所以在这里,只需将C1更改为您工作表的名称即可!

答案 1 :(得分:0)

变量需要从工作表中获取值。你正在尝试相反的方式,这就是你得到错误的原因。

Private Sub Workbook_Open()
xdate = Worksheets("sheet1").Range("A1")
lsdate = DateAdd("d", -7, Date)
'MsgBox lsdate
If Day(lsdate) > Day(xdate) Then
result = Worksheets("sheet1").Range("B1") * 1
Else
result = Worksheets("sheet1").Range("B1") * 1.07
End If
Range("c1").Value = result
End Sub


Sub test1()

Dim var1 As Variant

' If you need to get values from the range("D1") Then use the below code
var1 = Worksheets("sheet1").Range("D1").Value

End Sub