2016-05-10 9 views
0

Ich bin ziemlich neu in VBA und habe Code zusammen mit der Hilfe dieser Website gehackt, um meine Ziele zu erreichen, aber es ist in der Regel nicht schön. Das Folgende kommt jedoch ziemlich häufig vor und ich hoffe, dass es einen einfacheren Weg gibt, das Ziel zu erreichen, mit dem Sie mir helfen können.Excel VBA Reference ListObject mit Variable

Ich habe eine Tabelle in Excel, die durch die Abfrage einer SQL-Datenbank erzeugt wird, so dass ich am Ende mit einem Tisch, die Spaltentitel lassen Sie sich sagen lassen A, B, C, D, E

Ich mag füllen Sie ein Array in VBA basierend auf der Auswahl des Benutzers. Wenn z. B. in Zelle A1 A enthalten ist, wird das Array mit den Daten aus Spalte A gefüllt. Wenn Zelle A1 B enthält, wird das Array mit den Daten aus Spalte B gefüllt und so weiter.

ich zur Zeit den folgenden Code versuche zu verwenden:

Sub Compare() 

Dim WS As Worksheet 
Dim lo As ListObject 
Dim Xaxis As Variant 
Set WS = Worksheets("SQL Table") 'sheet that has SQL generated table 
Set lo = WS.ListObjects("Table") 'Table is the name of the table 

Dim A As String 



A = WS.Range("A1").Value 'A1 in this case has the value A in it 
Xaxis = Worksheets("SQL Table").ListObjects("Table").ListColumns(A).DataBodyRange 

End Sub 

aber einen Fehler auf der Linie erhalten, die die Zeichenfolge Variable A als Referenz in einem Listcolumn zu verwenden versucht Wenn ich „“ um A werfen es funktioniert, aber dann ist es keine Variable. Ich kann erreichen, was ich will, indem ich Case für jede der gegebenen Optionen verwende, aber ich möchte es schlanker machen. Gibt es eine Möglichkeit, eine Variable zu verwenden, um ein Listobject zu referenzieren, ein Worksheet und so weiter?

Vielen Dank im Voraus für die Hilfe

+0

ist es nicht wirklich irgendetwas stimmt nicht mit deinem Code, obwohl du 'lo' in der letzten Zeile verwenden solltest. Sind Sie sicher, dass der Wert in A1 in der SQL-Tabelle der Name einer Spalte ist? Was ist der eigentliche Fehler? – Rory

+0

Hallo Rory, vielen Dank für diesen Kommentar. Ich ging zurück und erkannte, dass ich es nie in meiner Frage gesagt hatte, aber der A1-Wert war tatsächlich auf einem anderen Blatt. Im Code befand ich mich jedoch immer noch auf dem SQL-Tabellenblatt, das in A1 keinen Wert hatte. Ich habe 'Set WS = Worksheets ("Sheet6") hinzugefügt, wo der A1-Wert tatsächlich nach' Dim A 'war und alles jetzt funktioniert. Nochmals vielen Dank für Ihre Hilfe bei der Überprüfung. – Carbon60

Antwort

1

die folgenden Versuchen. Änderungen sind:

  • Dim'd X-Achse als Bereich
  • Verwenden Set Stichwort
  • Vorteil der Objekte Nahm bereits errichteten

Der Code

Sub Compare() 

Dim WS As Worksheet 
Dim lo As ListObject 
Dim Xaxis As Range 
Set WS = Worksheets("SQL Table") 'sheet that has SQL generated table 
Set lo = WS.ListObjects("Table") 'Table is the name of the table 

Dim A As String 

A = WS.Range("A1").Value 'A1 in this case has the value A in it 
Set Xaxis = lo.ListColumns(A).DataBodyRange 

End Sub 
+0

Vielen Dank für Ihre Bewertung und Ihre Antwort. Es funktioniert perfekt und ich mochte die Idee, Xaxis auf eine Reihe statt auf eine Variante einzustellen. Danke für die Hilfe. – Carbon60

Verwandte Themen