这是我第一次从零开始编码,确实是一个非常愚蠢的问题。
为什么我一直收到这个错误?
运行时错误'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
答案 0 :(得分:1)
你似乎对编程非常陌生,所以我会清楚地解释:
当您尝试使用几乎所有语言为keys: true
分配value
时,请使用:
variable
因此,您可以在等号variable = value
右侧的value
上执行大量操作。
但是当您只是将=
分配给=
时,您无法在等号value
的左侧执行操作。在测试2 variable
时,您几乎可以执行任何操作,但在代码行的开头会有variables
或If
这样的关键字。
因此,您的代码问题在于您颠倒了While
和value
的顺序,并尝试执行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