将具有串联部分的公式写入单元格

时间:2018-07-18 09:51:17

标签: excel vba excel-vba

方案::我有一个代码,应该将公式写入工作表单元格。此公式用于API检索某些值。我的公式位于循环中(此操作针对多列完成),并引用第一行作为标识符。

原始公式:

=FS(B1;"FI(DATE,,DATE)")

带有浮动引用(在循环内)的修改后公式:

For i = 1 To lColumn
    If wb.Worksheets("Dates").Cells(i, 1).Value <> "" Then
        wb.Worksheets("Dates").Cells(i,2).value = "=FS(" & i & "1;"FI(DATE,,DATE)")"
    End If
Next i

lColumn是一些预定义的数字。

问题:在循环的公式部分中,我不断收到“意外的语句结尾”错误。

我已经尝试过的方法:我尝试了不同的变体,例如重新定位了“ s”和“ s”。

wb.Worksheets("Dates").Cells(i,2).value = "'"=FS(" & i & "1;"FI(DATE,,DATE)")""

wb.Worksheets("Dates").Cells(i,2).value = "'=FS(" & i & "1;"FI(DATE,,DATE)")"

wb.Worksheets("Dates").Cells(i,2).value = "'""=FS(" & i & "1;"FI(DATE,,DATE)")"

,依此类推。但是错误仍然存​​在。

问题:执行此操作的正确方法是什么?

2 个答案:

答案 0 :(得分:3)

在VBA中使用公式有点棘手:

  • 要编写公式,请使用range.formula属性,而不要使用.value

  • 您必须像使用英文Excel一样编写公式。参数分隔符是逗号(不是分号)。

  • 如果公式需要引号,请将其加倍,以使VBA编译器理解您想要在字符串中加引号。
  • 我发现在分配公式之前将公式写入变量是有帮助的-您可以在分配给调试器之前检查调试器是否正确。
  • 要检查公式的外观,请将其写到单元格中,更改为VBA编辑器,打开立即窗口,然后输入? activecell.formula

尝试(未经验证,因为您需要的公式对我们无效)

with wb.Worksheets("Dates")
  dim f as string, adr as string
  adr = cells(i, 1).address(false, false)   ' get rid of Dollar signs
  f = "=FS(" & adr & ",""FI(DATE,,DATE)"")"
  .Cells(i, 2).formula = f
end with

答案 1 :(得分:1)

wb.Worksheets("Dates").Cells(i,2).formula = "=FS(" & Cells(1, i).Address(0,0) & ";""FI(DATE,,DATE)"")"

可能有更好的方法将列号转换为字母(这是您遇到的问题以及双引号)!