vba表列引用而不是单元格引用

时间:2017-05-16 17:30:46

标签: excel-vba vba excel

我在Excel中有一张表。我添加列并命名它们。代码适用于单元格引用。但是,如果我使用Range(“tablename [columnname]”),我添加公式时会出错。

第一部分工作正常。我可以添加colums并命名它们。

Sub insertTableColumn()

Dim lst As ListObject

Dim currentSht As Worksheet


'The below add columns on a table and rename them

Set currentSht = ActiveWorkbook.Sheets("FBL5NSheet")

Set lst = ActiveSheet.ListObjects("FBL5NTable")

ColumnNames = Array("FBL5NDocNrCalc", "FBL5NRefCalc", "FBL5NDocNrCalcCut")

For iLoop = 0 To UBound(ColumnNames)

    Set oLC = lst.ListColumns.Add

    oLC.Name = ColumnNames(iLoop)

Next

End Sub

我对第二部分有疑问。它适用于单元格引用。但不是

Range("tablename[columnname]"). 

我尝试了以下操作,但我收到了错误。

Range("FBL5N[FBL5NDocNrCalc]").Formula = "=IF(("FBL5N[FBL5NDocNr"]) <> ""),("FBL5N[FBL5NDocNr]") & ("FBL5N[FBL5NCcode]") & ("FBL5N[FBL5NTradingPartner]") & ("FBL5N[FBL5NDocCur]")), "")"

以下代码使用单元格引用。如果我使用表格引用我得到一个错误。如何使用Range(“tablename [columnname]”)

执行以下操作
Sub FillCalculainInColumn()

'enter formulas
Range("O2").FormulaR1C1 = _
    "=IF([@FBL5NDocNr]<>"""",([@FBL5NDocNr]*1&[@FBL5NCcode]&[@FBL5NTradingPartner]&[@FBL5NDocCur]),"""")"

Range("P2").FormulaR1C1 = _
    "=IF([@FBL5NRef]<>"""",([@FBL5NRef]*1&[@FBL5NCcode]&[@FBL5NTradingPartner]&[@FBL5NDocCur]),"""")"

Range("Q2").FormulaR1C1 = "=RIGHT([@[FBL5NDocNrCalc ]],18)"
'fill formulas to last row

Range("O2:Q2").AutoFill Destination:=Range("O2:Q" & Cells(Rows.Count, "A").End(xlUp).Row)

End Sub

我只做以下,我得到一个错误,我想知道我是否需要更多

Sub FillCalculainInColumn()

范围(“FBL5N [FBL5NDocNrCalc]”)。公式= _“= IF(FBL5N [FBL5NDocNr]&lt;&gt;”“”“,CONCATENATE(FBL5N [FBL5NDocNr],F BL5N [FBL5NCcode],FBL 5N [FBL5NTradingPartn er],FBL5N [FBL5NDocCu r]),“”“”)“

End Sub

1 个答案:

答案 0 :(得分:0)

我觉得你的引号到处都是(并且在错误的地方):

Range("FBL5N[FBL5NDocNrCalc]").Formula = _
    "=IF(("FBL5N[FBL5NDocNr"]) <> ""),("FBL5N[FBL5NDocNr]")&"FBL5N[FBL5NCcode]")&("FBL5N[FBL5NTradingPartner]")&("FBL5N[FBL5NDocCur]")), "")"

例如,如果我们只关注这一个组件:

"FBL5N[FBL5NDocNr"]

很明显,这是不平衡的,因为你在结束时有一个,这几乎肯定是一个错误。

我不确定你在这种情况下甚至都需要引号,未经测试,但请尝试:

Range("FBL5N[FBL5NDocNrCalc]").Formula = _
    "=IF(FBL5N[FBL5NDocNr]<>"""",FBL5N[FBL5NDocNr]&FBL5N[FBL5NCcode]&FBL5N[FBL5NTradingPartner]&FBL5N[FBL5NDocCur], """")"

你需要在某些地方加倍引号(无论你在公式字符串中表示空字符串 ),并在其他地方(你所指的地方)省略引号表格列)。我也认为你不需要围绕每个列名称的括号。

使用CONCATENATE也可能更清晰:

Range("FBL5N[FBL5NDocNrCalc]").Formula = _
    "=IF(FBL5N[FBL5NDocNr]<>"""",CONCATENATE(FBL5N[FBL5NDocNr],FBL5N[FBL5NCcode],FBL5N[FBL5NTradingPartner],FBL5N[FBL5NDocCur]),"""")"