vba - 应用程序或对象定义错误 运行时错误 1004
问题描述
我创建了以下代码来从 Excel 表中提取信息。但是我在 if 语句中遇到了一个错误。我什至尝试从模块甚至工作表级别执行代码。我已经阅读过这个问题,似乎选择工作表似乎是主要问题,但我也尝试过,但徒劳无功,我似乎找不到解决方案。如果有人可以帮助我,那就太好了。先感谢您。
Sub test()
Dim row As Double, col As Double, inc As Double
row = 2
col = 2
inc = 20
'Sheets("sche").Range("a1").Select
For row = 2 To 15
For col = 2 To 52
If (Cells(r, c).Font.Bold Or Left(Cells(r, c).Value, 2) = "BP") Then 'Error is happening here
Sheets("sche").Cells(inc, 2).Value = Sheets("sche").Cells(r, c).Value
inc = inc + 1
GoTo zone
Else: GoTo zone
End If
zone:
Next col
Next row
End sub
解决方案
您已将row
and声明col
为变量,但在您的块中使用r
and 。c
If...Then
为什么您应该Option Explicit
在每个模块的顶部添加以防止拼写错误和使用未声明的变量的一个主要示例。
我已经调整了您的代码并进行了测试:
注意:我删除了Else
条件,GoTo Zone
因为它们在您的代码中是多余的(至少在您提供的示例中)。此外,虽然不是您的错误的原因,但不必将您的整个If...Then
条件封装在括号中。
Sub test()
Dim row As Double, col As Double, inc As Double
row = 2
col = 2
inc = 20
'Sheets("sche").Range("a1").Select
For row = 2 To 15
For col = 2 To 52
If Cells(row, col).Font.Bold Or Left(Cells(row, col).Value, 2) = "BP" Then 'Error is happening here
Sheets("sche").Cells(inc, 2).Value = Sheets("sche").Cells(row, col).Value
inc = inc + 1
End If
Next col
Next row
End Sub
我改变了这个:
If Cells(r, c).Font.Bold Or Left(Cells(r, c).Value, 2) = "BP" Then 'Error is happening here
Sheets("sche").Cells(inc, 2).Value = Sheets("sche").Cells(r, c).Value
对此:
If Cells(row, col).Font.Bold Or Left(Cells(row, col).Value, 2) = "BP" Then 'Error is happening here
Sheets("sche").Cells(inc, 2).Value = Sheets("sche").Cells(row, col).Value
此外,明确引用您的对象是一种很好的做法。
这是因为,例如,该属性的隐式引用Cells()
是 Active Worksheet:
在没有对象限定符的情况下使用此属性会返回一个 Range 对象,该对象表示活动工作表上的所有单元格。
这可能会导致意外结果,例如,如果您在运行代码时使用了与所需不同的工作表,或者用户在代码执行期间更改了工作表。
最好编写如下代码:
If Sheets("sche").Cells(row, col).Font.Bold Or Left(Sheets("sche").Cells(row, col).Value, 2) = "BP" Then
当对相同对象(如工作簿、工作表和/或范围等)进行多次引用时,该With
语句可以方便地缩短编写的代码。您可以在文档中阅读有关它的信息。
推荐阅读
- java - 在 xml 中使用 x509cerficate 进行 dsig 验证
- docker-compose - Cloud Code 可以使用 docker-compose 在本地启动容器吗?
- python - 检查 Panda DataFrame 单元格是否包含符号
- react-native - 使用 multer 将本机图像上传到节点服务器
- extjs - sencha 7.3.1 经典框架的导出插件不起作用
- scilab - Scilab,计算部分向量的平均值(矩阵列)
- css - nth-child() 不工作 wither material-ui
- javascript - 从 Angular 调用纯 JavaScript 代码会更改“this”引用
- swift - 导航链接错误
- javascript - 将多个PDF文件合并为一个角度8