2017-05-16 2 views
0

Ich habe eine Tabelle in Excel. Ich füge Spalte hinzu und benenne sie. Der Code funktioniert mit Zellbezug. Wenn ich jedoch Range ("tablename [columnname]") verwende, erhalte ich einen Fehler, wenn ich Formeln hinzufüge.VBA Tabellenspaltenreferenz anstelle von Zellreferenz

der erste Teil funktioniert ok. Ich kann Spalten hinzufügen und benennen.

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 

Ich habe Probleme mit dem zweiten Teil. es funktioniert mit Zellbezug. aber nicht mit

Range("tablename[columnname]"). 

Ich versuchte das unten und ich habe einen Fehler bekommen.

der untenstehende Code arbeitet mit Zellbezug. Wenn ich eine Tabellenreferenz verwende, erhalte ich einen Fehler. Wie kann ich die unter Verwendung von Range („Tabellenname [Spaltenname]“) tun


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 

ich tun die unten nur, und ich erhalte eine Fehlermeldung, ich frage mich, ob ich als dies mehr benötigen

Sub FillCalculainInColumn()

Range ("FBL5N [FBL5NDocNrCalc]"). Formel = _ "= IF (FBL5N [FBL5NDocNr] <>" ""“, CONCATENATE (FBL5N [FBL5NDocNr], F BL5N [ FBL5NCcode], FBL 5N [FBL5NTradingPartn er], FB L5N [FBL5NDocCu r]), "" "")“

End Sub

Antwort

0

ich wie Ihr Anführungszeichen fühlen, sind alle über den Ort (und an den falschen Stellen):

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

Zum Beispiel, wenn wir nur an dieser einer Komponente aussehen:

"FBL5N[FBL5NDocNr"] 

klar, das ist unausgewogen, wie Sie einen in der schließenden Klammer haben, die fast sicher ein Fehler ist.

Ich bin nicht sicher, dass Sie auch bei allen Anführungszeichen in diesem Fall benötigen, ungetestet, aber versuchen:

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

Sie müssen die Anführungszeichen an einigen Stellen verdoppeln-up (wo auch immer du bist Ausdruck einer leeren Zeichenfolge innerhalb die Formelzeichenfolge) und Anführungszeichen an anderen Stellen weglassen (wo Sie sich auf Tabellenspalten beziehen). Ich glaube auch nicht, dass Sie die Klammern um jeden Spaltennamen benötigen.

CONCATENATE verwenden, kann klarer sein, auch:

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

danken für die Antwort. Wenn ich versuche, erhalte ich einen Fehler "Kompilierfehler, Syntaxfehler". – Ftc

+0

@ftc Wenn Sie einen Kompilierungsfehler bekommen, welche Zeile den Fehler verursacht. Das kompiliert sich an meinem Ende, also hast du höchstwahrscheinlich etwas vertippt. –

+0

Ich habe eine kleine Revision gemacht, weil ich glaube, dass es immer noch zu viele Klammern gab. –

Verwandte Themen