Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

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
Antworten 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
Antworten 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
Antworten 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
Antworten Top


Gehe zu:


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