gpt4 book ai didi

VBA for Excel - 构建包含引号的内容的公式

转载 作者:行者123 更新时间:2023-12-04 21:04:50 24 4
gpt4 key购买 nike

我正在用 VBA for Excel 编写一个项目,它循环到一个文件,匹配每个数量的“代码”,然后将该代码的所有匹配项提供给用户定义的函数,该函数进入 Excel 工作表。

我可以阅读信息,对其进行排序,以便 postdata(nr_of_datafield, nr_of_item) 返回源表中列出值的行。基于此,我需要(通过.Formula)创建如下语法:

=formul(raming!J104) (如果只有一次出现)
=formul(raming!J104;"+";raming!J108) (等等,如果出现多次,总是添加相同的额外内容)
=formul(raming!J104;"+";raming!J108;"+";raming!312;"+";raming!J403) 等等,总是需要从 Cells.Formula 中已有的值中获取先前的值。

基于此检查:

代码:

Right(Workbooks(meetstaatfile).Sheets("HOR_raming").Cells(lusteller12, 9 + CInt(postdata(3, eerstepositie)) * 3).Formula, 2) = "()"

我可以检测这里是否已经添加了任何内容。如果不是(意味着 () 结尾的检查是肯定的),我用这个替换:

代码:
Workbooks(meetstaatfile).Sheets("HOR_raming").Cells(lusteller12, 9 + postdata(3, eerstepositie) * 3).Formula = "=formul('raming'!J" & postdata(2, eerstepositie) & ")"

创建一个看起来像这样的公式:=formul(raming!J104)

(本例中的 '104' 是 postdata(2,eerstepositie) 的输出

但是,如果它没有触发 () 结尾,则已经有一个值,我需要将公式扩展为如下所示: =formul(raming!J104;"+";raming!J108)

我一直试图通过用我想要添加的 block 替换')'来弄清楚如何做到这一点,但我无法让它工作以输入引号。 (“公式”与连接文本非常相似)。

如何对上面的代码行进行变体,以更改单元格输入?要么像我尝试的那样通过 Replace(),要么阅读 formul() 括号之间的内容并重建公式?

最佳答案

如果您需要将引号作为 VBA 中字符串文字中的内容,则必须将它们加倍。见:http://msdn.microsoft.com/en-us/library/ms234766.aspx

.Formula = "=formul('raming'!J" & 104 & ",""+""," & "'raming'!J" & 108 & ")"

或使用您的邮政数据:
.Formula = "=formul('raming'!J" & postdata(2, eerstepositie) & ",""+""," & "'raming'!J" & postdata(2, whatevergets108)  & ")"

我不知道我是否理解正确,但是如果您需要根据数组的内容连接公式,那么可以这样实现:
Sub test()
'one occurrence
postdata = [{0;104}]
sFormulaString = getFormulaString(postdata, 2)
MsgBox sFormulaString
'two occurrences
postdata = [{0,0;104,108}]
sFormulaString = getFormulaString(postdata, 2)
MsgBox sFormulaString
'three occurrences
postdata = [{0,0,0;104,108,312}]
sFormulaString = getFormulaString(postdata, 2)
MsgBox sFormulaString
End Sub

Function getFormulaString(postdata As Variant, nr_of_datafield As Long) As String
sFormula = "=formul("
For i = LBound(postdata, 2) To UBound(postdata, 2)
sFormula = sFormula & "'raming'!J" & postdata(nr_of_datafield, i) & ",""+"","
Next
sFormula = Left(sFormula, Len(sFormula) - 5) & ")"
getFormulaString = sFormula
End Function

嗯,还是真正需要将新的公式部分附加到现有公式中?如果是这样,以下代码将在每次运行时将一个新部分附加到 A1 中的公式中。
Sub test2()

postdata = [{0;104}]

sFormula = Range("A1").Formula
If sFormula = "" Then sFormula = "=formul("
If Right(sFormula, 1) = ")" Then sFormula = Left(sFormula, Len(sFormula) - 1) & ",""+"","
sFormula = sFormula & "'raming'!J" & postdata(2, 1) & ")"
Range("A1").Formula = sFormula

End Sub

问候

阿克塞尔

关于VBA for Excel - 构建包含引号的内容的公式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25906210/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com