VBA-无法设置单元格值

时间:2019-05-11 15:58:18

标签: excel vba

我正在母版工作簿中使用以下代码打开E12:E24范围内列出的工作簿。

  • 打开这些工作簿后,我需要计算打开的工作簿(除主工作簿外)的数量,并在“投资组合结果”表中将其分配给单元格E2。
  • 以下代码与我想要的一样工作,除了在行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

1 个答案:

答案 0 :(得分:0)

您应该(几乎总是)Option Explicit作为代码的第一行。

  • 您当前的代码包含一个错误,您在其中声明了变量

    Dim cell as Range
    
  • ,但是在您的For循环中,您使用的是未声明变量cel,该变量默认为Variant数据类型。

  • 启用Option Explicit后,编译器将警告您此类错误。

关于实际答案,在对象(WorksheetWorkbook)之间切换时,明确声明它们始终是一种良好的编程习惯。

访问它们的最简单方法是将它们存储在变量中:

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 '...

这不仅为其他人提供了更可读的代码(因为某人继承了您的项目,他们不知道作者打算使用哪个workbookworksheet),但在选择了其他WorkbookWorksheet的情况下,也可以防止这些不必要的错误。

最后一点,如果您目前不知道哪个Workbook是打开的,但是想引用“ this”特定的那个,那么请改用ThisWorkbook