Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
148to152
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
148to152
148to152
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

VBA: Datei öffnen mit Combobox

VBA: Datei öffnen mit Combobox
13.08.2002 17:43:15
Bongartz
Hallo Forum

ich habe hier auf dem Excel-Server unten eingefügtes Beispiel 145501 gefunden. Leider kenne ich mich nicht besonders mit VBA in Excel aus. Es wäre super wenn mir jemand helfen könnte.
Ich möchte dieses Beispiel für den Import und Anzeige von Text-Datendateien nutzen.

Wie kann ich denn mit unten aufgeführtem Beispiel eine TXT-Datei öffnen, wenn ich diese in der Combobox ausgewählt habe?

Oder noch besser wie kann ich eine ausgewählte Datei mit einem
Importmacro starten?

Gruß
Bongartz

Beispiel: 145501
Thema: Datei
Betrifft: Listen der Dateien eines Verzeichnisses in einer ComboBox
Excel-Version: XL 8/9
Frage: In einem Dialog soll ein Verzeichnis ausgewählt werden. Die Dateien des ausgewählten Verzeichnisses sind in einer UserForm-ComboBox aufzulisten.
Antwort: Mit Alt+F11 in die Entwicklungsumgebung wechseln, die UserForm doppelklicken und in das sich jetzt öffnende Modul den nachfolgenden Code eingeben.
'ClassModule: frmFiles

Private Sub cmdCancel_Click()
Unload Me
End Sub

Private Sub UserForm_Activate()
Dim bi As BROWSEINFO
Dim pidl As Long
Dim path As String
Dim pos As Integer
Dim Hwnd As Long
Hwnd = GetActiveWindow
bi.hOwner = Hwnd
bi.pidlRoot = 0&
bi.lpszTitle = "Select the directory to fill combobox with..."
bi.ulFlags = BIF_RETURNONLYFSDIRS
pidl = SHBrowseForFolder(bi)
path = Space$(MAX_PATH)
If SHGetPathFromIDList(ByVal pidl, ByVal path) Then
pos = InStr(path, Chr$(0))
Call Populate_combo(Left(path, pos - 1))
End If
Call CoTaskMemFree(pidl)
End Sub

Private Sub Populate_combo(strDir As String)
Dim strFile As String
With ComboBox1
.Clear
.ColumnCount = 2
.ColumnWidths = ";0 pt"
Label1.Caption = strDir
If Right(strDir, 1) <> "\" Then strDir = strDir & "\"
strFile = Dir(strDir)
Do Until strFile = ""
.AddItem strFile
.List(.ListCount - 1, 1) = strDir & "\"
strFile = Dir
Loop
End With
End Sub

'StandardModule: Modul1

Public Type BROWSEINFO
hOwner As Long
pidlRoot As Long
pszDisplayName As String
lpszTitle As String
ulFlags As Long
lpfn As Long
lParam As Long
iImage As Long
End Type

Public Const BIF_RETURNONLYFSDIRS = &H1
Public Const BIF_DONTGOBELOWDOMAIN = &H2
Public Const BIF_STATUSTEXT = &H4
Public Const BIF_RETURNFSANCESTORS = &H8
Public Const BIF_BROWSEFORCOMPUTER = &H1000
Public Const BIF_BROWSEFORPRINTER = &H2000
Public Const MAX_PATH = 260

Public Declare Function SHGetPathFromIDList _
Lib "shell32.dll" Alias "SHGetPathFromIDListA" _
(ByVal pidl As Long, ByVal pszPath As String) As Long

Public Declare Function SHBrowseForFolder Lib "shell32.dll" _
Alias "SHBrowseForFolderA" _
(lpBrowseInfo As BROWSEINFO) As Long

Public Declare Sub CoTaskMemFree Lib "ole32.dll" (ByVal pv As Long)

Public Declare Function ShellExecute Lib "shell32.dll" Alias _
"ShellExecuteA" (ByVal Hwnd As Long, ByVal lpOperation As String, _
ByVal lpFile As String, ByVal lpParameters As String, ByVal _
lpDirectory As String, ByVal nShowCmd As Long) As Long

Public Declare Function GetActiveWindow Lib "user32" () As Long

Sub DialogAufruf()
frmFiles.Show
End Sub



7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Re: VBA: Datei öffnen mit Combobox
14.08.2002 06:05:50
Charlie
Hallo, Bongartz!

Ich würde das von Deinem geposteten Codebeispiel etwas abweichend lösen:

Die Codezeilen Print #1, "irgendwas" und folgende musst Du durch Deine Anweisungen zum Datenexport ersetzen.

Die Änderung gegenüber Deinem Beispiel bewirkt in erster Linie, dass die UserForm erst und nur dann angezeigt wird, wenn tatsächlich ein Verzeichnis ausgewählt wurde. Wird der Verzeichnis-Dialog mit Abbrechen geschlossen, wird die UserForm gar nicht aufgerufen. In Deinem Beispiel wäre zuerst die UserForm und dann erst der Verzeichnis-Dialog angezeigt worden. Bei Abbrechen der Verzeichnisauswahl wären die Dialoge dann in umgekehrter Reihenfolge wieder geschlossen worden. Meine Änderung ist zwar nur Kosmetik, macht aber - so finde ich zumindest - das Arbeiten mit dem Makro aber angenehmer.

Mit Klick auf den CommandButton in der Tabelle kannst dann Du den Datenexport starten.

Viel Erfolg,
Charlie

Anzeige
Laufzeitfehler 1004
14.08.2002 15:58:50
Bongartz
Hallo Charlie

vielen Dank für Deine Hilfe. Das ist fast genau das was ich gebraucht habe. Nur ein Problem habe ich noch.

Die Userform rufe ich über 2 Menüeinträge auf. Das Menü wird beim start des Addin erstellt. Bei jedem Menüaufruf wird ein anderer Pfad aufgerufen.

Das übergeben der Ausgewählten Datei an das Importmacro funktioniert.

Aber der String wird nicht verarbeitet. Laufzeitfehler 1004

"Excel kann die Textdatei für die Aktualisierung der externen Datenbereichs nich finden"

Was mache ich da falsch?

Gruß
Bongartz

Hier der Code:

' ****** Beginn des anpassbaren Teiles ******
Private Const Pfad1 = "P:\Archiv"
Private Const Pfad2 = "P:\Senden"
' ****** Ende des anpassbaren Teiles ********

'Ich starte die Userforms über diese beiden Macros aus einem Menü
'das sich beim start des Addin automatisch erstellt
Private Sub SendenListe_Show()
    'die Userform wird direkt aufgerufen. Der Pfad ist vorgegeben.
    Call Populate_Combo(Pfad2)
    frmDateiListe.Show
    Sheets("Tabelle1").Name = "ede"
    Range("D2").Select
End Sub
Private Sub ArchivListe_Show()
    Call Populate_Combo(Pfad1)
    frmDateiListe.Show
End Sub

Sub PricatSendenImport(strFile As String)
' Import Makro
    Dim impFile As Variant
    impFile = strFile
    Workbooks.Add
    'ActiveWorkbook.Worksheets.Add
    With ActiveSheet.QueryTables.Add(Connection:= _
        "TEXT;strFile", Destination:=Range("A1")) 'Hier wird normalerweise der Pfad eingetragen
        '.Name = bName1
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .TextFilePromptOnRefresh = False
        .TextFilePlatform = xlWindows
        .TextFileStartRow = 1
        .TextFileParseType = xlFixedWidth
        .TextFileTextQualifier = xlTextQualifierDoubleQuote
        .TextFileConsecutiveDelimiter = False
        .TextFileTabDelimiter = True
        .TextFileSemicolonDelimiter = False
        .TextFileCommaDelimiter = False
        .TextFileSpaceDelimiter = False
        .TextFileColumnDataTypes = Array(2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, _
            2, 2, 2, 2, 2, 2, 2, 2)
        .TextFileFixedColumnWidths = Array(14, 14, 14, 10, 5, 30, 12, 7, 2, 2, 3, 3, 9, _
            7, 4, 7, 7, 8, 8, 5, 2)
        .Refresh BackgroundQuery:=False
        .Name = bName1
    End With
    
End Sub

'In der Userform habe ich den Aufruf des Importmacro sie folgt eingefügt
Private Sub CommandButton1_Click()
    Dim strFileName As String, lCommandLine As String, strFile As String
    Dim intX As Integer
    'Dateinamen anhand des ListIndex der ComboBox1
    'aus dem FileArray() auslesen.
    strFileName = FileArray(ComboBox1.ListIndex + 1)

    'Datei für Datenimport öffnen
    strFile = strPath & strFileName
    Call PricatSendenImport(strFile) 'das Importmacro wird aufgerufen

    Unload Me
End Sub

     Code eingefügt mit Syntaxhighlighter 1.13





Anzeige
Laufzeitfehler 1004
14.08.2002 15:59:50
Bongartz
Hallo Charlie

vielen Dank für Deine Hilfe. Das ist fast genau das was ich gebraucht habe. Nur ein Problem habe ich noch.

Die Userform rufe ich über 2 Menüeinträge auf. Das Menü wird beim start des Addin erstellt. Bei jedem Menüaufruf wird ein anderer Pfad aufgerufen.

Das übergeben der Ausgewählten Datei an das Importmacro funktioniert.

Aber der String wird nicht verarbeitet. Laufzeitfehler 1004

"Excel kann die Textdatei für die Aktualisierung der externen Datenbereichs nich finden"

Was mache ich da falsch?

Gruß
Bongartz

Hier der Code:

' ****** Beginn des anpassbaren Teiles ******
Private Const Pfad1 = "P:\Archiv"
Private Const Pfad2 = "P:\Senden"
' ****** Ende des anpassbaren Teiles ********

'Ich starte die Userforms über diese beiden Macros aus einem Menü
'das sich beim start des Addin automatisch erstellt
Private Sub SendenListe_Show()
    'die Userform wird direkt aufgerufen. Der Pfad ist vorgegeben.
    Call Populate_Combo(Pfad2)
    frmDateiListe.Show
    Sheets("Tabelle1").Name = "ede"
    Range("D2").Select
End Sub
Private Sub ArchivListe_Show()
    Call Populate_Combo(Pfad1)
    frmDateiListe.Show
End Sub

Sub PricatSendenImport(strFile As String)
' Import Makro
    Dim impFile As Variant
    impFile = strFile
    Workbooks.Add
    'ActiveWorkbook.Worksheets.Add
    With ActiveSheet.QueryTables.Add(Connection:= _
        "TEXT;strFile", Destination:=Range("A1")) 'Hier wird normalerweise der Pfad eingetragen
        '.Name = bName1
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .TextFilePromptOnRefresh = False
        .TextFilePlatform = xlWindows
        .TextFileStartRow = 1
        .TextFileParseType = xlFixedWidth
        .TextFileTextQualifier = xlTextQualifierDoubleQuote
        .TextFileConsecutiveDelimiter = False
        .TextFileTabDelimiter = True
        .TextFileSemicolonDelimiter = False
        .TextFileCommaDelimiter = False
        .TextFileSpaceDelimiter = False
        .TextFileColumnDataTypes = Array(2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, _
            2, 2, 2, 2, 2, 2, 2, 2)
        .TextFileFixedColumnWidths = Array(14, 14, 14, 10, 5, 30, 12, 7, 2, 2, 3, 3, 9, _
            7, 4, 7, 7, 8, 8, 5, 2)
        .Refresh BackgroundQuery:=False
        .Name = bName1
    End With
    
End Sub

'In der Userform habe ich den Aufruf des Importmacro sie folgt eingefügt
Private Sub CommandButton1_Click()
    Dim strFileName As String, lCommandLine As String, strFile As String
    Dim intX As Integer
    'Dateinamen anhand des ListIndex der ComboBox1
    'aus dem FileArray() auslesen.
    strFileName = FileArray(ComboBox1.ListIndex + 1)

    'Datei für Datenimport öffnen
    strFile = strPath & strFileName
    Call PricatSendenImport(strFile) 'das Importmacro wird aufgerufen

    Unload Me
End Sub

     Code eingefügt mit Syntaxhighlighter 1.13





Anzeige
Re: Laufzeitfehler 1004
14.08.2002 16:23:43
Charlie
Hallo, Bongartz!

Klar, dass das nicht funktionieren kann:
Du bindest die Variable "strFile" in einen Textstring ein, indem Du einfach den Variablennahmen als Text verwendest. Der Term "TEXT;strFile" enthält die Quelldatei nicht wirklich, sondern das ist einfach nur Text.

Du musst die Connection am besten über eine weitere Variable erst definieren, indem Du den übergebenen Pfad bzw. Dateinamen anhängst. Nach folgender Variante sollte es funktionieren:

Viel Erfolg,
Charlie

Re: Laufzeitfehler 1004
14.08.2002 19:19:22
Bongartz
Hallo Charlie

Vielen Dank. Funktioniert prima. Ich habe gleich noch den Dateinamen ans Importmacro übergeben. Zum Umbenennen des Importierten Sheets.

So nach und nach begreife ich das mit den Variablen.

Gruß aus Taunusstein
Bongartz

Anzeige
Re: Laufzeitfehler 1004
14.08.2002 19:33:25
Charlie
Hallo, Bongartz!

Variablen sind - sofern richtig deklariert und richtig eingesetzt - in VBA wie in jeder anderen Programmiersprache nicht nur vorteilhaft, sondern ein Muss, will man den Code kurz halten, übersichtlich und leicht lesbar machen, (Rechen-)Operationen minimieren und Fehlerquellen vermeiden.

Wenn ich die Lage richtig eingeschätzt habe, stehst Du noch eher am Beginn der VBA-Programmierung. Dann kann ich Dir - Werbung in Sachen "Chef" - neben den xlBasics und den anderen Tools aus dem Downloadbereich, den Newsletter und auch die Excel-CD von Hans wärmstens empfehlen. Der Newsletter und die CD sind zwar nicht kostenlos, aber die Kosten-Nutzen-Rechnung geht in jedem Fall für den Kunden voll auf. Vor allem die xlBasics bringen einem die grundlegensten Dinge in Sachen VBA näher und auch die anderen Tools erleichtern den Einstieg in VBA enorm. Da spreche ich aus eigener Erfahrung.

Viel Erfolg,
Charlie

Anzeige
Xl Basics
15.08.2002 19:44:03
Bongartz
Hallo Charlie

vielen Dank für Deine Anregungen. Du hast schon richtig erkannt das ich VBA Anfänger bin. Die Excel-CD habe ich bereits längere Zeit. Doch erst jetzt kann ich nutzten davon ziehen. Die xlBasics muss ich mir noch mal Gründlich ansehen.

Gruß
Bongartz

62 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige