【问题标题】:Excel vba : Type range and cellExcel vba:键入范围和单元格
【发布时间】:2012-02-27 02:36:44
【问题描述】:

我对 vba (excel) 中的单元格和范围有点困惑。 从逻辑上讲,我可以将单元格视为大小 = 1 的范围;而且我认为从一个单元格中创建一个范围很容易。

如果我阅读 EntireRow 属性的 api here 它在范围内运行。但是,下面的代码可以工作,表明循环内的“单元格”变量是一个范围

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

同时,下面的代码在调用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

【问题讨论】:

  • 你是对的。单元格是一个包含 1 个项目的范围。 valBoolean 类型的吗?
  • 是的。此方法以前在我传递“cell.Text”时有效,并在删除方法 cellVal As String 中接受它。现在我试图通过传递单元格而不是 cell.Text 来传递单元格(范围)本身

标签: vba excel


【解决方案1】:

编译并运行:

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

【讨论】:

  • 谢谢。 “Dim cell As Excel.Range”给了我一个线索,因为我之前没有明确声明单元格。正如我所提到的,我只是转换了方法,以前我不需要显式声明单元格。我得到的错误有点误导。
  • Range 对象的默认值是Value,所以在Cell 没有声明为Range 的情况下,Cell 被假定为Value,这很合理,导致了“类型不匹配”。声明所有变量是非常好的做法。要强制执行此操作,请在 VBE 中选择 Tools>Options>Editor>Require Variable Declaration。这会将 Option Explicit 添加到所有新模块的顶部,并为未声明的变量提供“变量未定义”编译器错误。您也可以在现有模块的顶部键入 Option Explicit。
猜你喜欢
  • 1970-01-01
  • 2015-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-17
  • 1970-01-01
  • 2012-08-17
  • 1970-01-01
相关资源
最近更新 更多