Dio*_*ogo 9 excel vba excel-vba excel-2010
我为一个文件创建了一个宏,并且它首先工作正常,但今天我一直在打开并重新启动文件和宏数百次,我总是收到以下错误:Excel VBA运行时错误'13'类型不匹配
我没有在宏中更改任何内容,也不知道为什么我会收到错误.此外,每次我运行它时都需要很长时间才能更新宏(宏必须运行大约9000行).
错误在****之间.
VBA:
Sub k()
Dim x As Integer, i As Integer, a As Integer
Dim name As String
name = InputBox("Please insert the name of the sheet")
i = 1
Sheets(name).Cells(4, 58) = Sheets(name).Cells(4, 57)
x = Sheets(name).Cells(4, 57).Value
Do While Not IsEmpty(Sheets(name).Cells(i + 4, 57))
a = 0
If Sheets(name).Cells(4 + i, 57) <> x Then
If Sheets(name).Cells(4 + i, 57) <> 0 Then
If Sheets(name).Cells(4 + i, 57) = 3 Then
a = x
Sheets(name).Cells(4 + i, 58) = Sheets(name).Cells(4 + i, 57) - x
x = Cells(4 + i, 57) - x
End If
**Sheets(name).Cells(4 + i, 58) = Sheets(name).Cells(4 + i, 57) - a**
x = Sheets(name).Cells(4 + i, 57) - a
Else
Cells(4 + i, 58) = ""
End If
Else
Cells(4 + i, 58) = ""
End If
i = i + 1
Loop
End Sub
Run Code Online (Sandbox Code Playgroud)
你认为你可以帮助我吗?我在Windows 7上使用excel 2010.非常感谢
如果Sheets(name).Cells(4 + i, 57)
包含非数字值,则会出现类型不匹配.您应该在假设它们是数字之前验证字段并尝试从中减去它们.
此外,您应该启用
不幸的Option Strict
所以在尝试对它们执行类型相关操作(如减法)之前,您必须显式转换变量.这也将帮助您识别和消除未来的问题.Option Strict
是仅适用于VB.NET.但是,您应该在VBA中查找显式数据类型转换的最佳实践.
更新:
但是,如果您尝试快速修复代码,请**
在以下条件中包装该行及其后面的行:
If IsNumeric(Sheets(name).Cells(4 + i, 57))
Sheets(name).Cells(4 + i, 58) = Sheets(name).Cells(4 + i, 57) - a
x = Sheets(name).Cells(4 + i, 57) - a
End If
Run Code Online (Sandbox Code Playgroud)
但请注意,您的x
值可能不会在下一次迭代中包含其预期值.