【问题标题】:Excel VBA insert formula using variablesExcel VBA使用变量插入公式
【发布时间】:2020-05-28 05:05:20
【问题描述】:

我试图在 VBA 的帮助下将公式插入到单元格中,并且一直收到错误 1004:“应用程序定义的或对象定义的错误”。问题出在哪里?

Worksheets("Sheet1").Range("L10").Formula = "=VLOOKUP(" & Cells(6, 15) & ", SQLTable, 2, 0)*" & Cells(6, 16)

【问题讨论】:

  • 首先Debug.Print "=VLOOKUP(" & Cells(6, 15) & ", SQLTable, 2, 0)*" & Cells(6, 16) 看看结果与您在单元格中手动编写的公式有何不同。
  • 您可能还想用工作表限定您的Cells 对象(两个实例)Sheets("Sheet1").Cells(6, 15) 等等……甚至更好,创建一个工作表变量以提高可读性
  • @BigBen 我尝试了Debug.Print "=VLOOKUP(" & Cells(6, 15) & ", SQLTable, 2, 0)*" & Cells(6, 16) 并得到了实际预期的=VLOOKUP(06.01.2020, SQLTable, 2, 0)*-1000。如果我手动编写,这正是它的样子。
  • 我不确定这是否正确……06.01.2020 在这样的公式中不起作用。
  • 在你的代码行前写上Worksheets("Sheet1").Select

标签: excel vba excel-formula


【解决方案1】:

我相信您想要Cells(6, 15) 的地址,因为您将公式放在工作表上。还修改为包含一个工作表变量,用于适当的对象限定


Dim ws As Worksheet: Set ws = ThisWorkbook.Sheets("Sheet1")
ws.Range("L10").Formula = "=VLOOKUP(" & ws.Cells(6, 15).Address & ", SQLTable, 2, 0)"

这将默认为绝对地址 ($O$6)。如果要删除被锁定的列,可以修改绝对属性 (Column Absolute, Row Absolute),如下所示:ws.Cells(6, 15).Address (False, False)

【讨论】:

  • 谢谢!完美运行!所以问题是vba使用了单元格中的值而不是地址,因为它对于这样的公式是正确的?
  • 正确。您只需要在最后使用相同的方法添加乘法部分(访问存储值而不是值的地址)
  • ...当然,你也可以"=VLOOKUP(O6, SQLTable, 2, 0)"
  • 当然!再次感谢您 :) 花费的时间比完成此类任务所需的时间多得多:/
  • 是的,如果您使用的是静态范围,那么您可能需要考虑@BigBens 评论。当您可以直接说明地址时,用参考文献拐弯抹角是没有意义的。如果您打算用变量来分出那些行/列索引,当前的方法会更有意义
猜你喜欢
  • 2017-07-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-18
  • 1970-01-01
相关资源
最近更新 更多