Vba 将包含连接部分的公式写入单元格
场景:我有一个代码,可以将公式写入工作表单元格。此公式用于API检索某些值。我的公式在一个循环中(这是对多列执行的),并引用第一行作为标识符 原始公式:Vba 将包含连接部分的公式写入单元格,vba,excel,Vba,Excel,场景:我有一个代码,可以将公式写入工作表单元格。此公式用于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(" &
=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
带有浮动引用的修改公式(在循环内部):
=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
或
或
等等。但错误依然存在
问题:进行此操作的正确方法是什么
wb.Worksheets("Dates").Cells(i,2).formula = "=FS(" & Cells(1, i).Address(0,0) & ";""FI(DATE,,DATE)"")"
可能有更好的方法将列号转换为字母(这是您遇到的问题,还有双引号)
可能有更好的方法将列号转换为字母(这是您遇到的问题,还有双引号) 在VBA中使用公式有点棘手:
- 要编写公式,请使用
属性,而不是range.formula
.value
- 你必须像使用英语Excel一样编写公式。参数分隔符是逗号(不是分号)
- 如果公式需要引号,请将其加倍,以便VBA编译器理解您需要字符串中的引号
- 我发现在分配变量之前将公式写入变量是很有帮助的——您可以在调试器中检查它在分配变量之前是否正确
- 要检查公式的外观,请将其写入单元格,切换到VBA编辑器,打开即时窗口并写入
?activecell.formula
在VBA中使用公式有点棘手:
- 要编写公式,请使用
属性,而不是range.formula
.value
- 你必须像使用英语Excel一样编写公式。参数分隔符是逗号(不是分号)
- 如果公式需要引号,请将其加倍,以便VBA编译器理解您需要字符串中的引号
- 我发现在分配变量之前将公式写入变量是很有帮助的——您可以在调试器中检查它在分配变量之前是否正确
- 要检查公式的外观,请将其写入单元格,切换到VBA编辑器,打开即时窗口并写入
?activecell.formula
什么是浮动引用?@vityta“i”,因为它在循环中发生变化。你能看看这里并尝试执行这些步骤吗?什么是浮动引用?@vityta“i”,因为它在循环中发生变化。你能看看这里并尝试执行这些步骤吗?而不是使用replace,考虑使用<代码>地址>代码>返回一个相对引用(即没有代码> $>代码>)感谢@克里斯尼尔森,没有意识到这一点。将更新我的答案:0)不要将公式写入
.value
-使用.formula
instead@FunThomas. 你说得很对。我太专注于右手了!而不是使用替换,考虑使用<代码>地址>代码>返回一个相对引用(即没有代码> $>代码>)感谢@克里斯尼尔森,没有意识到这一点。将更新我的答案:0)不要将公式写入.value
-使用.formula
instead@FunThomas. 你说得很对。我太专注于右手了!我认为应该是adr=cells(1,I).address(false,false)
,因为改变的是列,而不是row@Pi:可能你是对的-从OP复制了这一部分。我认为应该是adr=cells(1,I).address(false,false)
,因为它是正在更改的列,不是row@Pi:可能你是对的-从OP复制了此部分。
wb.Worksheets("Dates").Cells(i,2).formula = "=FS(" & Cells(1, i).Address(0,0) & ";""FI(DATE,,DATE)"")"
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