VBA - Tabelle in Arbeitsblatt mit Variable ansprechen?
#1
Hallo Leute,


weiter unten der Code. Die entsprechenden Stellen habe ich mit einer Formatierung hervorgehoben.

Was moechte ich?

Ich moechte eine Tabelle in einem Arbeitsblatt in Anhaengigkeit von einer Variable ansprechen.

Beispiel:
Ein User wahlt in der Zelle (7,31) "September". Was der Code dann macht ist in einer anderen Arbeitsmappe das richtige Tabellenblatt auszuwahlen durch: Sheets(mes).Activate
Nun mochte ich aber auch genau die Tabelle in den Arbeitsblatt ansprechen die dem Monat entspricht. Dafur habe ich die Tabelle "September" genannt.
Wurde ich z.b.: Range("Tabelle2[COMPANIA]").Select nutzen, ware der Wert ja fix, und wurde daher nur fur ein Arbeitsblatt funktionieren.

Daher die Frage wie setze ich das um? Range("Mes[COMPANIA]").Select funktioniert leider nicht

Vielen Dank im Voraus und beste Gruesse


Sub Trabajo()
Dim mes As String
Dim message As Integer
Workbooks.Open "Z:\\\Excel Training\Test Macro\BAB Expenses Detail.xlsm"
Windows("DBBAB2017.xlsm").Activate
Sheets("DB2017").Select
mes = Cells(7, 31).Value
If mes = "Seleccionar Mes" Then
message = MsgBox("Select a month", vbOKOnly, "Warning")
If message = vbOK Then
Exit Sub
Else
End If
Else
Windows("BAB Expenses Detail.xlsm").Activate
On Error GoTo ErrorHandler
Sheets(mes).Activate
Range("Mes[COMPANIA]").Select
Selection.Copy
Windows("DBBAB2017.xlsm").Activate
Sheets("DB2017").Range("Table1[[#Headers],[Co Number]]").Select
ActiveCell.End(xlDown).Offset(1, 0).Select
ActiveSheet.Paste
End If
Range("AE7").Select
Selection.FormulaLocal = "=""Seleccionar Mes"""
Exit Sub
ErrorHandler:
message = MsgBox("Month is not active", vbOKOnly, "Warning")
If message = vbOK Then
Exit Sub
Else
End If
Top
#2
Hallo

doch ein neuer Thread, nun ja ....   Ein Kommentar zu diesem zusammengefassten Code steht im alten Thread! 

Das Problem liegt in dem farblich markierten Teil, da wurden die Begriffe Range und Sheets durcheinander geworfen!!  Bei Range gehört nicht:  "Table2[COMPANIA]"  sondern in die Range() Klammer gehört die Copy Zelle aus Sheets(mes), z.B. Range("A10") oder ein Bereich, Range("A10:C25")  Dasselbe gilt auch für Range() in der Zieltabelle!!   Das Konstrukt ist -keine- gültige Ziel-Adresse:  "Table1[[#Headers],[Co Number]]"  s.oben!!

Da must du dir deine Tabellen nach Spalten und Zeilen (Quelle + Ziel) noch mal richtig anschauen, denn wir sehen die Datei ja nicht!!

Dieser Befehl hat auch seine böse Tücken bei End(xlDown), ich verwende lieber Cells(Rows.Count, 1).End(xlUp).Row +1 !! Und lade den Wert vorher in eine Variable!!  Ist der Bereich direkt hinter der Zelle leer findet man End(xlDown) in Zeile 1.485.000 wieder !!  Da will man sicher nicht hin kopieren!! 

mfg  Gast 123


Sub Trabajo()
Dim mes As String
Dim message As Integer
Workbooks.Open "C:\Excel Training\Test Macro\BAB Expenses Detail.xlsm"

mes = Windows("DBBAB2017.xlsm").Sheets("DB2017").Cells(7, 31).Value

If mes = "Seleccionar Mes" Then
  message = MsgBox("Select a month", vbOKOnly, "Warning")
  If message = vbOK Then Exit Sub
Else
  On Error GoTo ErrorHandler
  Windows("BAB Expenses Detail.xlsm").Sheets(mes).Range("Table2[COMPANIA]").Copy _
  Windows("DBBAB2017.xlsm").Sheets("DB2017").Range("Table1[[#Headers],[Co Number]]").End(xlDown).Offset(1, 0)
End If

Range("AE7").FormulaLocal = "=""Seleccionar Mes"""
Exit Sub

ErrorHandler:
message = MsgBox("Month is not active", vbOKOnly, "Warning")
If message = vbOK Then
'**  hier steht kein Befehl !!  Warum dann If Then mit vbOk ???
End If
End Sub
Top
#3
Hallo Gast 123,

vielen Dank erstmal fur deine Antwort und dein Kommentar im anderen Thread.

Eine genaue Range kann ich nicht angeben, bzw. wusste nicht wie, da diese ja Variabel ist (konnen 5 oder auch 100 Spalten sein), weswegen ich den "Umweg" uber "Table2[COMPANIA]" gemacht habe.

Kannst du mir zufallig sagen, wie ich das sonst machen kann?

Beste Gruesse und Dank im Voraus
Top
#4
Hallo

zu zufaellig ein klares Nein, denn Excel kennt keine "zufaelligen" Adressen !!

Wir können uns dieses Aufgabe aber gemeinsam erarbeiten, indem wir gemeinsam  -die echten Bereiche ermitteln-  !! 
Dazu brauche ich aber mehr konkrete Angaben, denn ich sehe deine Datei ja nicht!!  Oder ein Beispiel mit anonymen Daten hochladen.

Frage:  Von wo genau, welche Mappe, welches Blatt, welcher Bereich von bis Spalte/Zeile soll kopiert werden und wohin??
Wenn es mal 10, mal 100 Zeilen sind woran erkenne ich um wieviel Zeilen es sich jeweils handelt.  An welchen Fakten???

zum Prinzip:  Ich müsste wissen wo ist die 1. Adresse, z.b. "A10", und wo findet man die letzte Adresse, z.B. "G25"
                    die kann man mit AnfAdr und EndAdr zuerst in zwei Variable packen, und danach so verarbeiten: 
                    1. Variante:   Range(AnfAdr, EndAdr).Copy        reale Bereichs Adresse
                    2. Variante:   Range(AnfAdr).Resize(z, s).Copy   Resize Methoder über Zeile/Spalte

Möglichkeiten dir zu helfen kenne ich genug, aber ich brauche konkrete Infos über die Datei, über Tabellen, Zeilen, Spalten, etc.. Woran ich die Copy Anfangs-, End Adresse, und die Ziel Adresse erkenne?? Dann können wir gemeinsam eine passend Lösung erarbeiten.  Ideen habe ich genug!

mfg  Gast 123
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste