Excel vba:键入范围和单元格

bsr*_*bsr 7 excel vba excel-vba

我对vba(excel)中的单元格和范围感到有点困惑.从逻辑上讲,我可以将单元格视为size = 1的范围; 而且我认为从一个细胞中制作一个范围很容易.

如果我在这里读取了EntireRow属性的api, 它就会在范围内运行.但是,下面的代码工作,表明循环内的'cell'变量是一个范围

Set import = Sheets("import")
    Set spRange = import.Range("A2")
    Set spRange = import.Range("A2:" & spRange.End(xlDown).Address)
    For Each cell In spRange
        dict.Add cell.Offset(0, 2).Text, cell.EntireRow
    Next cell
Run Code Online (Sandbox Code Playgroud)

同时,以下代码在调用removecell函数时返回指示类型不匹配的错误.函数定义中targetCell的类型应该是什么?

Set spRange = mySheet.Range("b2", mySheet.Range("b2").End(xlDown))
For Each cell In spRange
    val = removecell (cell)
Next cell


Public Function removecell(targCell As Range) As Boolean
    removecell = False
End Function
Run Code Online (Sandbox Code Playgroud)

Dou*_*ncy 5

这编译并运行:

Sub Tester()
Dim spRange As Excel.Range
Dim cell As Excel.Range
Dim mySheet As Excel.Worksheet
Dim val As Boolean

Set mySheet = ActiveSheet
Set spRange = mySheet.Range("b2", mySheet.Range("b2").End(xlDown))
For Each cell In spRange
    val = removecell(cell)
Next cell

End Sub

Public Function removecell(targCell As Range) As Boolean
    removecell = False
End Function
Run Code Online (Sandbox Code Playgroud)

  • Range对象的默认值是Value,因此Cell未声明为Range,Cell被假定为Value,这足以说明导致"类型不匹配".声明所有变量是非常好的做法.要强制执行此操作,请在VBE中选择工具>选项>编辑器>需要变量声明.这将在所有新模块的顶部添加Option Explicit,并为未声明的变量提供"Variable not Defined"编译器错误.您也可以在现有模块的顶部键入Option Explicit. (2认同)