我正在母版工作簿中使用以下代码打开E12:E24
范围内列出的工作簿。
Worksheets("Portfolio Results").Range("E2") = nFields
上收到错误消息我不清楚为什么会这样。感谢您的帮助。
Sub SkipBlankCells2()
Dim cell As Range, rng As Range, FName As String, nFields As Integer
Set rng = Range("E12:E24")
Application.DefaultFilePath = ActiveWorkbook.Path
nFields = 0
For Each cel In rng
If Len(cel) >= 1 Then
FName = cel.Value
Workbooks.Open Filename:=FName
nFields = nFields + 1
End If
Next cel
Debug.Print nFields
Worksheets("Portfolio Results").Range("E2") = nFields
End Sub
答案 0 :(得分:0)
您应该(几乎总是)将Option Explicit
作为代码的第一行。
您当前的代码包含一个错误,您在其中声明了变量
Dim cell as Range
,但是在您的For
循环中,您使用的是未声明变量cel
,该变量默认为Variant
数据类型。
Option Explicit
后,编译器将警告您此类错误。关于实际答案,在对象(Worksheet
或Workbook
)之间切换时,明确声明它们始终是一种良好的编程习惯。
访问它们的最简单方法是将它们存储在变量中:
Dim wb as Workbook: Set wb = Workbooks("Static name")
Dim ws as Worksheet: Set ws = wb.Sheets("Your sheet name")
'later in the code
If wb.ws.Cells(1, 9) = "banana" Then '...
这不仅为其他人提供了更可读的代码(因为某人继承了您的项目,他们不知道作者打算使用哪个workbook
或worksheet
),但在选择了其他Workbook
或Worksheet
的情况下,也可以防止这些不必要的错误。
最后一点,如果您目前不知道哪个Workbook
是打开的,但是想引用“ this”特定的那个,那么请改用ThisWorkbook