硬编码范围有效,但使用命名范围失败-Excel VBA

时间:2019-03-22 19:04:35

标签: excel vba

我有一个代码片段,我不明白为什么它失败了。我收到“应用程序定义的错误或对象定义的错误”。我尝试对范围进行硬编码,但它确实起作用,但是我甚至对“命名范围”进行了硬编码,但仍然失败。

例如:这不起作用

If regexp.test(strInput) Then
    Set clloffset = rcell.Offset(0, 1)
    Call GetColLet(rcell)
      'Set PalletCol = Range(rcell.Address(False, False) & ":K39")
      Set PalletCol = ActiveWorkbook.ActiveSheet.Range("K24:K39")
      Set FormulaCol = ActiveWorkbook.ActiveSheet.Range("L24:L39")
      ActiveWorkbook.ActiveSheet.Range(FormulaCol).Formula = "=" & Chr(34) & "BINWH" & Chr(34) & "&" & rcell.Address(0, 1)

但这确实可以,我无法理解!

If regexp.test(strInput) Then
    Set clloffset = rcell.Offset(0, 1)
    Call GetColLet(rcell)
      'Set PalletCol = Range(rcell.Address(False, False) & ":K39")
      Set PalletCol = ActiveWorkbook.ActiveSheet.Range("K24:K39")
      Set FormulaCol = ActiveWorkbook.ActiveSheet.Range("L24:L39")
      ActiveWorkbook.ActiveSheet.Range("L24:L39").Formula = "=" & Chr(34) & "BINWH" & Chr(34) & "&" & rcell.Address(0, 1)

注意:我曾尝试同时使用(FormulaCol)("FormulaCol"),但我不确定何时在命名范围内使用"",但两者均无效。然后,我尝试对("L24:L39")进行硬编码。而且有效。感谢您帮助解决此问题。

1 个答案:

答案 0 :(得分:1)

在Excel中访问范围的主要方法有三种:

  1. 硬编码值
  2. 变量
  3. 命名范围

硬编码值

我不会真的花时间解释这些,但是这里有一些例子:

ThisWorkbook.Sheets("Name").Range("A1:B2")
ActiveWorkbook.ActiveSheet.Range("C3:E50")
Sheet1.Cells(1,3)  'Range("C1")

注释

ThisWorkbook是对包含代码的工作簿的引用。与ActiveWorkbook的重要区别在于它们并不总是同一工作簿(主要是打开2个以上的工作簿时)。

Sheet1是工作表的代号。工作表代码名称只能用于ThisWorkbook中包含的工作表。如果要引用其他工作簿中的工作表,则必须使用名称或索引来访问它。


变量

这就像原始代码中的FormulaCol。变量可以在本地或全局作用域级别的代码Set FormulaCol = ActiveWorkbook.ActiveSheet.Range("L24:L39")中声明,也可以作为参数Function Sample(rangeVariable as Range) : End Function传递到例程中。

与范围变量进行交互可被视为使用替换,例如:

Set FormulaCol = Sheet1.Range("L24:L39")
FormulaCol.Formula = ""

代替

Sheet1.Range("L24:L39").Formula = ""

命名范围

与命名范围进行交互类似于与硬编码范围进行交互。假设命名范围“ Test”引用Sheet1上的Range(“ B2:C3”),它将通过以下方式与之交互:

Sheet1.Range("Test")

但是,在可以通过VBA引用命名范围之前,必须首先在工作簿中进行设置。可以通过几种不同的方式完成此操作:

  1. 选择命名范围的所有单元格,然后在“名称框”(在编辑栏的左侧)中键入该命名范围的名称,然后按Enter(如果忘记了“ enter”,则输入名称无法保存)。

Naming range without manager

  1. 在“公式”选项卡中打开“名称管理器”,然后按“新建”(如果编辑现有的命名范围,则按“编辑”)。 注意:通过管理器添加命名范围时,您可以选择范围为工作簿或工作簿中的任何工作表。这会影响哪些工作表可以引用命名范围。

Name Manager

随即打开一个窗口,您可以在其中选择命名范围的名称,然后选择其引用的范围。

Adding a named range