VBA for Excel – build立。带有引号内容的公式

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

我可以读取信息,对其进行sorting,以便Postdata(nr_of_datafield,nr_of_item)将源列表中列出该值的行返回给我。 基于此,我需要创build(通过.Formula)这样的语法:

(如果只有一个发生)= 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) = "()" 

我可以检测是否已经有任何内容添加在这里。 如果没有(意思是()结尾的检查是肯定的),我用这个replace:

码:

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

创build一个如下的公式:= formul(raming!J104)

(这个例子中的'104'是postdata的输出(2,eerstepositie)

但是,如果它不触发()结束,那么已经有一个值,我需要将公式扩展为如下forms:= formul(raming!J104;“+”; raming!J108)

我一直在试图找出如何通过用我想添加的块代替')'来做到这一点,但我不能得到它的工作input引号。 ('formul'与连接文本非常相似)。

我怎样才能使上面的代码行变化,让我改变单元格input? 通过像我尝试的Replace(),或者读取formul()括号之间的内容并重build公式?

如果您需要将引号作为VBA中的string文字内容,则必须将其加倍。 请参阅: http : //msdn.microsoft.com/en-us/library/ms234766.aspx

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

或者用你的postdata:

 .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 

问候

阿克塞尔