VBA - Exceldateinamen aus Tabellenzelle auslesen + über CommandButton öffnen
#1
Hallo in die Runde,
Ich möchte doch nur einen Dateinamen aus ner Tabellezelle abgucken, diese Datei in einem fixen Pfad suchen lassen,
wenn sie gefunden wurde sie zu öffnen und falls nicht ne MsgBox dass sie halt nicht gefunden wurde.
Bitte bitte schau mal jemand drüber. Was mache ich verkehrt? 22 Er bleibt bereits beim Ablesen der zelle C158 hängen.
Auf Grund meiner miesen VBA skills kommentiere ich etwas naiv, daher erklärt sich schon durch die Kommentierung was ich mit anschließendem Code bezwecken will . . .
Code:
Sub Costcard_open()

'Suchbegriff innerhalb eines Dateinamens (Positionsnummer) definieren
Dim PosiNummer As String

'Dateinamen (Costcarddatei) definieren
Dim Dateiname As String

'Dateipfad zu den Costcards definieren
Dim Pfad As String

' Den gesuchten Wert (PosiNummer), also den Suchbegriff innerhalb des Dateinamens auslesen

    PosiNummer = Worksheets("Tabelle3").Range("C158").Value
  
' Festlegen in welchem Ordner nach der Costcard gesucht werden soll

    Pfad = "P:\BH\Auftrag Abrechnung\Costcards\"

' Costcard suchen im Pfad zu den Costcards und
' Dateinamen mit "*" ergänzt um fehlende Zeichen im Dateinamen nach der PosiNummer zu umgehen und
' zur Dateiendung ".xls*" ergänzt um xlsx UND xlsm Dateien zu finden

    Dateiname = Dir(Pfad & Dateiname & "*.xls*")
       
' Wenn/Dann-Anweisung mit Hinweis, falls Datei nicht gefunden wurde
        If Dateiname <> "" Then
            Workbooks.Open Pfad & Dateiname
           
            Else
           
            MsgBox "Costcard nicht gefunden !"

        End If
       
End Sub

Was GENAU gemacht werden soll:
In einem fixen Ordner sind zu jedem Auftrag Gewinn/Verlust-Übersicht-Dateien als einzelne xlsx und xlsm Dateien gespeichert.
Die Dateinamen beginnen IMMER mit GER und einer 8stelligen Zahl gefolgt von Datum und Kundennamen.
Mit einer Rechnungsvorlage erstelle ich zu diesen Auftragsnummern GER…..  Rechnungen. Die Rechnungsbeträge müssen in diese Gewinn und Verlust Dateien übertragen werden.
Nun möchte ich (erstmal "nur") über einen CommadButton in der Rechnung die dazugehörige Gewinn-und-Verlust-Datei öffnen.
Dazu soll VBA diesen Dateinamen aus einer Zelle in der Rechnung auslesen (Tabelle3.C158),
in dem festgelegten Pfad nach der Datei suchen und sie öffnen. Sollte diese wider Erwarten nicht gefunden werden, dann eine MsgBox öffnen "Datei nicht gefunden!".
Einziges Problem: Da die GER-Nummer nur ein Teil des Dateinamens ist habe ich in meinem Code bis jetzt vergeblich versucht die fehlenden Zeichen mit * zu umgehen, sodass die Suche lautet : Nehme Auftragsnummer GER……. aus Zelle C158 von Tabelle3, ignoriere dabei alle nachfolgenden Zeichen des Dateinamens öffne die Datei. Dieses Makro wollte ich dann einem CommandButton auf der Rechnung zuweisen, um direkt bei der rechnungerstellung die dazugehörige Costcard mit nur 1 Click zu öffnen.
I werd närrisch 16
Vielen vielen Dank an Alle, die sich damit beschäftigen.´ und nicht im Biergarten sitzen Wink
Liebe Grüße
Jürgen
Antworten Top
#2
Hallo Jürgen,

nutze das Lokalfenster und gehe mit F8 Schritt für Schritt die Prozedur durch und schaue im Lokalfenster die entsprechenden Ausgaben der Prozedur an.
Du wirst den Fehler sehr schnell entdecken.
Was weiter hilft ist die Ausgabe der Belegung der Variablen mittel MsgBox:
MsgBox Pfad & Dateiname

Gruß Uwe
Antworten Top
#3
Danke Uwe,
hab ich schon geschaut. Da is alles leer, der kommt erst gar nicht dahin.

   

Der Stromer liest mir nicht einmal den String aus Tabelle2.C158 aus Smile
Code:
PosiNummer = Worksheets("Tabelle3").Range("C158").Value
und ich verstehe nicht warum.

Ich hab auch mal versucht den kompletten Pfad mit einem FESTEN und existierenden Dateinamen mit Sternchen abzuarbeiten und siehe da, das macht er. Ich wollte wissen, ob das mit den Platzhaltern klappt.
Code:
Sub Datei_Öffnen()

Dim Pfad As String

Workbooks.Open "P:\BH\Auftrag Abrechnung\Costcards\GER2208001*.xls*"

End Sub

Leider soll ja nun anstatt der GER2208001 eine Variable hin, also der Wert aus Tabelle3.C158
Der oder zumindest EIN Fehler scheint irgendwo im Abruf Value aus Tabelle3.C158 zu liegen - ich komme aber nicht drauf.
Antworten Top
#4
Hallo Jürgen,

du kennst sicherlich den Unterschied von Tabelle2 und Tabelle3. Dann kann man auch die Modulnamen dazu verwenden, was falls mal das Tabellenblatt umbenannt wird nicht gleich wieder zur Fehlerausgabe führt. Naja im Lokalfenster steht in der Variable ein "". Das bedeudet Leer.

Baue deine Befehle auf Abfrage der Zelle über den Modulnamen um:
Code:
PosiNummer = Tabelle3.Range("C158").Value
' oder
PosiNummer = Tabelle2.Range("C158").Value
Die Variable "PosiNummer" wird bisher noch nicht weiter im Code verwendet.

Gruß Uwe


Angehängte Dateien Thumbnail(s)
   
[-] Folgende(r) 1 Nutzer sagt Danke an Egon12 für diesen Beitrag:
  • Albus1965
Antworten Top
#5
ENDLICH . . . . .
vielen Dank, Dein letzter Satz
"Die Variable "PosiNummer" wird bisher noch nicht weiter im Code verwendet."
hat die Augen auf den Fehler gerichtet.
Was will man mit ner Variablen, wenn man sie nicht verwendet? 92

Code:
Dateiname = Dir(Pfad & Dateiname & "*.xls*")
ist natürlich Blödsinn und

muss heißen
Code:
Dateiname = Dir(Pfad & PosiNummer & "*.xls*")
Wie kann man da 2 Tage dran verzweifeln - soooo blind. 33
Vielen Dank nochmal für DIESEN Satz, der rettet mein Wochenende.
Liebe Grüße
Jürgen
Antworten Top


Gehe zu:


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