Excel vba Dateiname aus verschiedenen Zelldaten
#1
Hallo zusammen,

bevor ich mich mal wieder mit einer Frage an Euch wende, möchte ich Euch allen ein frohes Weihnachtsfest wünschen!

Nun zu meiner Frage:
Für die Abarbeitung eines Makros benötige ich einen definierten Dateinamen, der sich aber immer, je nach Datum/Monat/Jahr, ändert.
Bisher habe ich den aktuellen Dateinamen immer direkt im Makro deklariert... und der kann so lauten:

Set wbkZiel = Workbooks("Testdatei_Dezember_2020.xlsm")

Jetzt möchte ich diesen Dateinamen aber direkt aus Daten aus bestimmten Zelleinträgen zusammensetzen, z.B. so:
  aktMonat = Range("K3").Value
  aktJahr = Range("L3").Value

Set wbkZiel = Workbooks("Testdatei_"& aktMonat & "_" & aktJahr & ".xlsm")

Das funktioniert aber leider so nicht.
Bekomme hier Laufzeitfehler 9 - Index außerhalb des gültigen Bereichs.


Wie muss ich diesen Set-Befehl richtig deklarieren, bzw. wie muss ich den Namen aus den Zellfragmenten richtig zusammensetzen?

Vielleicht könnt Ihr mir auf die Sprünge helfen?
Top
#2
Hallo Erich,

(25.12.2020, 16:14)sharky51 schrieb: Wie muss ich diesen Set-Befehl richtig deklarieren, bzw. wie muss ich den Namen aus den Zellfragmenten richtig zusammensetzen?

ohne zu wissen, was in diesen Zellen wirklich steht, ist eine Antwort nicht möglich. Smile

Gruß Uwe
[-] Folgende(r) 1 Nutzer sagt Danke an Kuwer für diesen Beitrag:
  • sharky51
Top
#3
(25.12.2020, 16:14)sharky51 schrieb: 1. Das funktioniert aber leider so nicht.

2. Bekomme hier Laufzeitfehler 9 - Index außerhalb des gültigen Bereichs.


zu 1. normal schon


zu 2. Dann stimmen die Zellinhalte nicht oder es wird eine nicht geöffnete Mappe angesprochen
[-] Folgende(r) 1 Nutzer sagt Danke an ralf_b für diesen Beitrag:
  • sharky51
Top
#4
Hallo Uwe, hallo Ralf,

danke für die Rückmeldung.

Also, die Mappe ist geöffnet.

Zum Testen hatte ich mir diese Hilfsdaten erzeugt:
In K3 steht die Formel: "=TEXT(HEUTE();"MMMM")" daraus ergibt sich dann ... aktMonat = Range("K3").Value

In L3 steht die Formel: "=JAHR(HEUTE())" daraus ergibt sich weiter ... aktJahr = Range("L3").Value

Aber eigentlich würde ich gerne direkt aus meiner eigentlichen Datumszelle aus "C3" des Dateinamens zusammenbauen.
In "C3" steht das komplette Datum in der Form: Fr 25.12.2020 und ist als Standard formatiert.

Vielleicht könnt Ihr mir da doch noch den richtigen Tipp geben?
Top
#5
Hallo,

schon mal so versucht?
Code:
Set wbkZiel = Workbooks("Testdatei_" & Range("K3").Text & "_" & Range("L3").Text & ".xlsm")
Da vor den Range-Objekten kein Tabellenblatt angegeben ist, muß bei Makroausführung das Blatt aktiv sein, auf dem auch in den Zellen K3 und L3 die entsprechenden Daten stehen. Ansonsten muß vor den beiden Range noch das entsprechende Tabellenblatt angegeben werden.

Gruß Werner
[-] Folgende(r) 1 Nutzer sagt Danke an Werner.M für diesen Beitrag:
  • sharky51
Top
#6
Hallo Werner,

habe gerade beide Deiner Vorschläge ausprobiert. Ich bekomme immer noch dieselbe Fehlermeldung. Laufzeitfehler 9 - Index außerhalb des gültigen Bereichs.

Code:
  Set wbkZiel = Workbooks("Testdatei_" & ActiveSheet.Range("K3").Text & "_" & ActiveSheet.Range("L3").Text & ".xlsm")

Code:
Set wbkZiel = Workbooks("Testdatei_" & Range("K3").Text & "_" & Range("L3").Text & ".xlsm")
Top
#7
Hallo,

bei mir geht das genau so und mehr kann ich dazu nicht sagen.
Sicher, dass die Datei, die du ansprichst eine .xlsm ist und nicht eine .xlsx ?

Gruß Werner
[-] Folgende(r) 1 Nutzer sagt Danke an Werner.M für diesen Beitrag:
  • sharky51
Top
#8
Hallo Werner,

ja das ist eine *.xlsm - Datei.
Top
#9
Hallo,

dann stimmt der zusammengsetzte Name der Datei nicht mit dem tatsächlichen Namen der Datei überein, mehr kann ich dazu dann auch nicht sagen.

Ansonsten mal beide Dateien hier hochladen. Daten, außer den Formeln für den Dateinamen, brauchen dann keine drin zu sein.

Gruß Werner
Top
#10
versuchs mal damit.  zum testen die Namen stehen dann im Direktfensters des Vbaeditors
alle geöffneten Workbooks und deren Worksheets werden aufgelistet.  
evtl bringt das Klarheit.


Code:
Sub test()
    Dim x As Workbook, sh As Worksheet, wbk As Workbook

    For Each x In Workbooks
      Debug.Print "'" & x.Name & "'"
      For Each sh In x.Worksheets
        Debug.Print "    '" & sh.Name & "'"
      Next
      Set wbk = Workbooks(x.Name)
     
    Next

End Sub
[-] Folgende(r) 1 Nutzer sagt Danke an ralf_b für diesen Beitrag:
  • sharky51
Top


Gehe zu:


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