Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1716to1720
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
VBA: Workbook open ohne direkten Dateinamen
23.10.2019 05:21:45
Charly
Guten Morgen,
kann man per VBA ein gespeichertes Workbook öffnen ohne den Dateinamen zu wiesen.
Ich nutze diesen Code um anhand eines Suchbegriffs ein Workbook zu öffnen.
Das klappt auch, das Workbook mit dem gesuchten Begriff im Dateinamen wurde gefunden u. geöffnet (Hintergrund/Ausgeblendet).

Sub SucheDatei ()
Dim Dateiname As String, Suchbegriff As String, Pfad As String
Pfad = "P:\Test Ordner\"
Suchbegriff = UserForm1.TextBox1                           ' Inhalt der TextBox Bsp. Max  _
Muster
Dateiname = Dir(Pfad & "*" & Suchbegriff & "*.xlsx")
If Dateiname  "" Then
Workbooks.Open Pfad & Dateiname
End If
End Sub

Da ich viele Workbook`s in meinem Ordner habe dauert es bis Ich das richtige gefunden habe, darum dieser Code Passt perfekt.
So nun zu meinem Problem: Wie Spreche Ich das Workbook an ohne den Dateinamen direkt zu wissen, um dort Werte in die Tabellen einzutragen. Ich muss dazu sagen das der Suchbegriff die einzige Konstante im Dateinamen ist die wiederum nur einmal pro Datei Vorkommt.

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA: Workbook open ohne direkten Dateinamen
23.10.2019 05:49:35
Hajo_Zi
Nein das gehjt nicht. Da Excel nicht in Deinen Kopfg schauen kann und damit die Information hat welche Datei Du öffnen willst.

In dem Fall nimmst Du einfach...
23.10.2019 06:03:53
Case
Hallo, :-)
... noch eine Objektvariable für das Workbook dazu: ;-)
Option Explicit
Sub SucheDatei()
Dim Dateiname As String, Suchbegriff As String, Pfad As String
Dim wkbBook As Workbook
Pfad = "P:\Test Ordner\"
Suchbegriff = UserForm1.TextBox1  ' Inhalt der TextBox Bsp. Max Muster
Dateiname = Dir(Pfad & "*" & Suchbegriff & "*.xlsx")
If Dateiname  "" Then
Set wkbBook = Workbooks.Open(Pfad & Dateiname)
MsgBox wkbBook.FullName ' Ausgabe Pfad und Name
wkbBook.Close False ' Workbook schliessen OHNE speichern
End If
End Sub
Im Beispiel wird Pfad- und Dateiname ausgegeben und die Datei dann ohne speichern geschlossen. Mit der Variablen "wkbBook" kannst du jetzt anstellen was du willst, bzw. was möglich ist.
Servus
Case

Anzeige
AW: In dem Fall nimmst Du einfach...
23.10.2019 22:52:54
Charly
Nabend Case,
habe deine Änderung Übernommen das Klappt auch, allerdings lasse Ich das WorkBook offen.
Ich versuch schon eine weile in das WorkBook zu Schreiben leider ohne erfolg.
Sub Schreiben()
Dim wkbBook As Workbook
Set wkbBook = Worksheets("Tab1").Activate
With Worksheets("Tab1")
Range("C3").Value = UserForm1.TextBox3
Range("D3").Value = UserForm1.TextBox4
Range("E3").Value = UserForm1.TextBox5
Range("F3").Value = UserForm1.TextBox6
End With
End Sub
Das Ansprechen des wkbBook(Tab1) scheitert!
Was mache Ich falsch...
Danke für jegliche Hilfe im Voraus...
Gruß Charly
Anzeige
AW: In dem Fall nimmst Du einfach...
24.10.2019 00:01:58
fcs
Hallo Charly,
wenn du die beim Öffnen der Datei verwendete Variable später wieder in einem anderen Makro nutzen möchtest, dann muss diese Variable in einem allgemeinen Modul als Public oder im Codemodule des Userforms übergeordnet als Private deklariert werden. In der Prozedur in der die Datei geöffnet wird darf die Workbook-Variable dann dann nicht deklariert werden.
Wenn du "einfach" in die momentan aktive Arbeitsmappe schreiben willst, dann so:
Sub Schreiben()
Dim wkbBook As Workbook
Set wkbBook = Activeworkbook
With wkbBook.Worksheets("Tab1")
.Range("C3").Value = UserForm1.TextBox3
.Range("D3").Value = UserForm1.TextBox4
.Range("E3").Value = UserForm1.TextBox5
.Range("F3").Value = UserForm1.TextBox6
End With
End Sub
LG
Franz
Anzeige
AW: In dem Fall nimmst Du einfach...
24.10.2019 00:14:08
Charly
Nabend Franz
Perfekt Funktioniert super...
Danke für deine Hilfe...
Gruß Charly
AW: In dem Fall nimmst Du einfach...
24.10.2019 05:34:28
Charly
Morgen Franz
In einer Test-Mappe kann Ich deine Lösung ohne Probleme umsetzen.
  Sub SucheDatei()
Dim Dateiname As String, Suchbegriff As String, Pfad As String
Dim wkbBook As Workbook
Pfad = "P:\Test Ordner\"
Suchbegriff = UserForm1.TextBox1  ' Inhalt der TextBox Bsp. Max Muster
Dateiname = Dir(Pfad & "*" & Suchbegriff & "*.xlsx")
If Dateiname  "" Then
Set wkbBook = Workbooks.Open(Pfad & Dateiname)
MsgBox wkbBook.FullName ' Ausgabe Pfad und Name
wkbBook.Close False ' Workbook schliessen OHNE speichern
End If
End Sub

Sub Schreiben ()
Dim wkbBook As Workbook
Set wkbBook = Activeworkbook
With wkbBook.Worksheets("Tab1")
.Range("C3").Value = UserForm1.TextBox3
.Range("D3").Value = UserForm1.TextBox4
.Range("E3").Value = UserForm1.TextBox5
.Range("F3").Value = UserForm1.TextBox6
End With
End Sub
Wenn Ich das aber in mein Projekt einsetze bekomme Ich eine Fehlermeldung.
Laufzeitfehler "9" Index außerhalb des gültigen Bereichs.
Mir ist beim öffnen was aufgefallen, in der Test-Mappe ist die gesuchte Mappe nicht im Hintergrund geöffnet worden.
In meinem Projekt wird die zu öffnende Mappe aber im Hintergrund geöffnet.
Kann man das ändern so das die Mappe nicht im Hintergrund geöffnet wird.
Gruß Charly
Anzeige
AW: In dem Fall nimmst Du einfach...
24.10.2019 10:27:00
Werner
Hallo,
versuchs mal so, Deklariere die Variable wkbBook außerhalb einer Prozedur:
Public wkbBook As Workbook
Sub SucheDatei()
Dim Dateiname As String, Suchbegriff As String, Pfad As String
Pfad = "P:\Test Ordner\"
Suchbegriff = UserForm1.TextBox1  ' Inhalt der TextBox Bsp. Max Muster
Dateiname = Dir(Pfad & "*" & Suchbegriff & "*.xlsx")
If Dateiname  "" Then
Set wkbBook = Workbooks.Open(Pfad & Dateiname)
End If
End Sub
Sub Schreiben ()
With wkbBook.Worksheets("Tab1")
.Range("C3").Value = UserForm1.TextBox3
.Range("D3").Value = UserForm1.TextBox4
.Range("E3").Value = UserForm1.TextBox5
.Range("F3").Value = UserForm1.TextBox6
End With
wkbBook.Close False ' Workbook schliessen OHNE speichern
set wkbBook = Nothing
End Sub
Gruß Werner
Anzeige
AW: Korrekturen/Anpassungen
24.10.2019 10:46:27
fcs
Hallo Charly,
Werner hat dir dir einen alternativen Weg vorgeschlagen.
Dieser sollte etwas verfeinert/korrigiert werden:
a) Prüfung ob schon eine Datei der Qorkbook-Variablen zugewiesen ist
b) Nach dem Eintragen der Daten aus dem Userform sollte die Datei dann inkl. Speichern geschlossen werden.
LG
Franz

'Diese Zeile mit Variablendeklaration oben im Code-Module vor allen Prozeduren
Private wkbBook As Workbook
Sub SucheDatei()
Dim Dateiname As String, Suchbegriff As String, Pfad As String
Pfad = "P:\Test Ordner\"
Suchbegriff = UserForm1.TextBox1  ' Inhalt der TextBox Bsp. Max Muster
Dateiname = Dir(Pfad & "*" & Suchbegriff & "*.xlsx")
wkbBook
If Dateiname  "" Then
Set wkbBook = Workbooks.Open(Pfad & Dateiname)
Else
Set wkbBook = Nothing
End If
End Sub
Sub Schreiben()
If wkbBook Is Nothing Then
MsgBox "Es wurde noch keine Mappe geöffnet und der Variablen wkbBook zugewiesen", _
vbOKOnly, "Makro Schreiben"
Else
With wkbBook.Worksheets("Tab1")
.Range("C3").Value = UserForm1.TextBox3
.Range("D3").Value = UserForm1.TextBox4
.Range("E3").Value = UserForm1.TextBox5
.Range("F3").Value = UserForm1.TextBox6
End With
wkbBook.Close True ' Workbook schliessen MIT speichern
Set wkbBook = Nothing
End If
End Sub

Anzeige
AW: Korrekturen/Anpassungen
25.10.2019 05:40:24
Charly
Guten Morgen
Werner u. Franz
Habe mir eure Antworten durch gesehen u. Sie eingesetzt, mit ner kleinen Änderung.
Franz, wenn Ich den Code so lasse bekomme Ich eine Fehlermeldung die Markierung ist bei (wkbBook) gesetzt. Habe dies kleine Zeile Auskommentiert u. siehe da es geht.

Dateiname = Dir(Pfad & "*" & Suchbegriff & "*.xlsx")
'wkbBook

Ebenso habe Ich diese Zeile Auskommentiert, warum siehe Unten...
wkbBook.Close True ' Workbook schließen MIT speichern

Soweit so gut...
Nun stehe Ich vor einem neuen Problem.
Ich habe ja die Zeile "wkbBook.Close True" Auskommentiert weil Ich an dieser Stelle noch etwas vorhabe.
Ich möchte die per Suchbegriff geöffnette Mappe u. bereits beschrieben nun Speichern aber mit einem Neuen Dateinamen in einem anderen Ordner.
Mein Save-Button sieht so aus:
Private Sub Cbu_Save_Click()
Dim Datei As String, Verzeichnis As String, SaveDummy As Variant
Call M_UF5.Schreibe
Select Case Me.CB_Bereich_Aus
Case "WB 1"
Verzeichnis = "P:\Test Ordner\Ausgezogen\"
Datei = Me.TB_Dateiname_Neu.Value & ".xlsx"
SaveDummy = SpeichernUnter(Verzeichnis & Datei)
If SaveDummy  False Then ActiveWorkbook.SaveAs SaveDummy
Range("A1").Select
ThisWorkbook.Activate
' hier kommt eine weitere Speicher möglichkein
' beide Möglichkeiten sollen in eine Abfrage wo gespeichert werden soll
'        Case "WB 2"
' Code frei, wird noch befühlt
'        Case "WB 3"
' Code frei, wird noch befühlt
'        Case "Haus"
' Code frei, wird noch befühlt
Case Else
End Select
Call M_UF5.Inhalt_Löschen
End Sub
Function SpeichernUnter(VorgabeName As String) As Variant
SpeichernUnter = Application.GetSaveAsFilename(InitialFileName:=VorgabeName, _
FileFilter:="Excel Dateien (*.xlsx),*.xls*", FilterIndex:=1, _
Title:="Speichern Unter...", ButtonText:="speichern")
End Function

Bei einem anderen Project geht dies mit Dateinamen u. neuem Ordner, darum die Case Zeilen klappte ganz gut.
Nun passiert bei diesem Project nichts, keine Fehlermeldung u. kein Speichern.
Habt Ihr vieleicht einen Ahnung woran es liegen kann?
Gruß Charly
Anzeige
AW: Korrekturen/Anpassungen(gelöst)
26.10.2019 01:34:50
Charly
Nabend
an alle die mir in diesem Thread geholfen haben ein Danke schön.
Habe das letzte Problem so gelöst.

Private Sub Cbu_Save_Click()
Dim Datei As String, Verzeichnis As String, SaveDummy As Variant
Dim iClick As Integer
iClick = MsgBox( _
prompt:="In welchen Ordner soll Gespeichert werden?" & vbCrLf & _
"Einzug, Klicke (Ja) oder Auszug, Klicke (Nein)", _
Buttons:=vbExclamation + vbYesNoCancel)
If iClick = vbYes Then
Call M_UF5.Schreibe_Protokoll_Stamm
Verzeichnis = "P:\Test HM2030\Einzug\"
Datei = Me.TB_Dateiname_Neu & ".xlsx"
SaveDummy = SpeichernUnter(Verzeichnis & Datei)
If SaveDummy  False Then ActiveWorkbook.SaveAs SaveDummy, xlOpenXMLWorkbook
Range("A1").Select
ActiveWorkbook.Close
Unload Me
ThisWorkbook.Activate
MsgBox "Die Daten wurde Übernommen u. die Datei wurde im jeweiligen Ordner Angelegt.",  _
vbInformation
ElseIf iClick = vbNo Then
Call M_UF5.Schreibe_Protokoll_Stamm
Verzeichnis = "P:\Test HM2030\Auszug\"
Datei = Me.TB_Dateiname_Neu & ".xlsx"
SaveDummy = SpeichernUnter(Verzeichnis & Datei)
If SaveDummy  False Then ActiveWorkbook.SaveAs SaveDummy, xlOpenXMLWorkbook
Range("A1").Select
ActiveWorkbook.Close
Unload Me
ThisWorkbook.Activate
MsgBox "Die Daten wurde Übernommen u. die Datei wurde im jeweiligen Ordner Angelegt.",  _
vbInformation
ElseIf iClick = vbCancel Then
Call M_Allg_Schliessen.WorkBookColse
Unload UF5_Protokoll
MsgBox "Die Instanz wurde geschlossen, Eingabe wurde beendet.", vbInformation
End If
End Sub
Function SpeichernUnter(VorgabeName As String) As Variant
SpeichernUnter = Application.GetSaveAsFilename(InitialFileName:=VorgabeName, _
FileFilter:="Excel Dateien (*.xlsx),*.xls*", FilterIndex:=1, _
Title:="Speichern Unter...", ButtonText:="speichern")
End Function
Gruß Charly
Anzeige
AW: Korrekturen/Anpassungen(gelöst)
26.10.2019 03:35:43
Charly
Soorry ist nicht mehr offen...
Gerne u. Danke für die Rückmeldung. o.w.T.
28.10.2019 12:59:31
Werner

82 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige