Anzeige
Archiv - Navigation
1084to1088
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
Inhaltsverzeichnis

GetOpenFileName und Multiselect

GetOpenFileName und Multiselect
Jogy
Hi.
Einfach mal folgender Codeschnipsel:

Sub test()
Dim daTei
daTei = Application.GetOpenFilename(, , , , True)
Debug.Print (IsArray(daTei))
End Sub

Der funktioniert so weit einwandfrei und gibt True aus, sobald ich etwas auswähle.
Nur sobald ich eine bestimmte Arbeitsmappe lade (natürlich genau die, in der das rein soll), wird das Multiselect ignoriert. Ich kann zwar mehrere Dateien auswählen, genommen wird aber nur die erste, d.h. IsArray(Datei)=False.
Das Verhalten tritt übrigens auch auf, wenn der Code gar nicht in der betreffenden Arbeitsmappe steht. D.h. ich schreibe den Code in eine neue Mappe und es tut. Lade ich dann oben erwähnte Arbeitsmappe und Multiselect geht nicht mehr. Schließe ich sie dann wieder, dann geht es.
Ganz lustig ist auch, dass ich in einem AddIn einen Code habe, bei dem es trotzdem geht. Kopiere ich obigen Code in das Modul im AddIn, geht es nicht. Ebenso funktioniert der AddIn Code nicht in der o.g. Arbeitsmappe.
Soweit ich jetzt heruasgefunden habe, wird das durch eine bedingte Formatierung ausgelöst, entferne ich die, dann geht es... nur warum in aller Welt? Ich habe es hier auf zwei Rechner ausprobiert und es tritt bei beiden auf. Die Datei kann ich jetzt von hier aus nicht hochladen, das hole ich bei Bedarf heute abend nach.
Danke schon mal und Gruss, Jogy

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
Nachtrag:
06.07.2009 12:39:24
Jogy
Noch ein Nachtrag: Tritt nur auf, wenn bei der bedingten Formatierung IST- oder NICHT-Funktionen auftauchen.
Gruss, Jogy
AW: Nachtrag:
06.07.2009 13:02:47
Ramses
Hallo
ist doch klar, Du fragst ja keine anderen Inhalte des Arrays ab
If IsArray(DaTei) then
for i = 0 to ubound(datei)
debug.print datei(i)
next i
else
Debug.print daTei
End If
... sollte eigentlich tun
Gruss Rainer
AW: Nachtrag:
06.07.2009 14:22:13
Jogy
Hi Rainer,
ich frage an der Stelle überhaupt nichts ab, außer ob es ein Array ist. Das ist reiner Debug Code, um das Problem nachzuvollziehen.
Und damit Dein Code funktioniert, müßte es ein Array sein, was es aber nicht ist. IsArray(Datei) ergibt False, wenn diese bedingten Formatierungen (und wenn ich mich nicht ganz täusche, dann spielt nur das aktive Arbeitsblatt eine Rolle) vorhanden sind. Sind sie weg, dann ergibt IsArray(Datei) den Wert True - also wie es sein sollte.
Gruss, Jogy
Anzeige
AW: Nachtrag:
06.07.2009 14:57:50
Ramses
Hallo
Ich weiss doch nicht, wass du alles in die Variable "daTei" reinpackst oder wie du ihn deklariert hast.
Das kommt aus dem Schnipsel ja nicht raus. Wenn du abfragen willst, ob mehr als eine Datei im Öffnen Dialog selectiert ist, da kommt es auch wieder drauf welchen du nimmst und wie du ihn ausgbist, dann frag doch einfach die "Selected()"-Eigenschaft ab.
Gruss Rainer
AW: Nachtrag:
06.07.2009 16:09:50
Jogy
Hi.
Ähm... inwiefern soll das Application.GetOpenFileName noch andere Möglichkeiten bieten? Ich benutze ja nicht die Common Dialogs, von daher kommt aus dem Codeschnipsel eigentlich alles raus. Und was mir hier die Selected Eigenschaft bringen soll, das sehe ich gerade nicht wirklich... der Dialog ist doch längst wieder zu und mal abgesehen davon bringt es mir nichts zu wissen, dass mehrere Datein ausgewählt wurden, wenn die nicht im Array stehen.
GetOpenFileName mit Multiselect hat (eigentlich) zwei Rückgabewerte, entweder ein Array mit den Dateien (wenn was selektiert wurde, auch bei nur einer Datei) oder FALSE (wenn nichts selektiert wurde). Deswegen ist daTei als Variant deklariert, weil ich eben nicht weiß, was ich bekomme.
D.h. sobald etwas selektiert ist, muss das ein Array sein. Wenn ich aber eine bedingte Formatierung mit IST-Funktion auf dem aktiven Arbeitsblatt habe, dann bekomme ich einen String mit der ersten Datei als Rückgabe - auswählen kann ich aber mehrere. Mache ich sie raus oder gehe auf ein Arbeitsblatt ohne eine solche bedingte Formatierung, dann bekomme ich den Array.
Ist zumindest bei mir hier auf zwei Rechnern reproduzierbar. Mal sehen, muss ich heute abend zu Hause nochmal testen, scheint wohl ein Bug zu sein.
Gruss, Jogy
Anzeige
AW: Nachtrag:
06.07.2009 16:29:42
Ramses
Hallo
"..inwiefern soll das Application.GetOpenFileName noch andere Möglichkeiten bieten..."
Hab ich nicht gesagt, sondern welchen du nimmst.
Probier mal das aus
Option Explicit

Sub test()
    Dim fileArr As Variant
    Dim i As Long
    fileArr = Application.GetOpenFilename(Title:="Mehrfachauswahl", MultiSelect:=True)
    For i = 1 To UBound(fileArr)
        Debug.Print fileArr(i)
    Next i
End Sub

oder alternativ auch das,... auch wenns länger ist.
Sub A_Datei_wählen()
    Dim FileDlg As FileDialog
    Dim dname As String
    Dim Dati As Long
    Set FileDlg = Application.FileDialog(msoFileDialogFilePicker)
    With FileDlg
        .Title = "Wählen Sie eine Datei oder mehrere aus"
        'Environ(25) ermittelt den Aktuellen Userpfad
        'Alternativ kann hier auch die Variable vom vorherigen
        'Dialog eingesetzt werden
        '.InitialFileName = Suchpfad
        .InitialFileName = Environ(25) & "\Eigene Dateien\"
        .Filters.Clear
        .Filters.Add "Nur EXCEL Tabellen", "*.xls", 1
        'Andere Filterauswahlen sind möglich
        'Die Zahl gibt die Position in der Auswahlbox an
        '.Filters.Add "CSV Dateien", "*.csv", 2
        .FilterIndex = 1
        .ButtonName = "Dateien öffnen"
        'AllowMultiSelect = False dann kann nur eine Datei gewählt werden
        .AllowMultiSelect = True
        'Hier werden nur kleine Symbole angezeigt
        '.InitialView = msoFileDialogViewSmallIcons
        .InitialView = msoFileDialogViewLargeIcons
        .Show
        If .SelectedItems.count = 0 Then
            MsgBox "Sie haben keine Datei gewählt", vbCritical + vbOKOnly, "Dateifehler"
            Exit Sub
        Else
            For Dati = 1 To .SelectedItems.count
                dname = dname & vbCrLf & .SelectedItems(Dati)
            Next Dati
            MsgBox "Sie haben diese Dateien gewählt: " & vbCrLf & dname
            'Weitere Befehle mit den geöffneten Dateien
        End If
    End With
    Set FileDlg = Nothing
End Sub

Gruss Rainer
Anzeige
AW: Nachtrag:
06.07.2009 16:56:45
Jogy
Hi.
sorry, ich verstehe nicht worauf Du hinauswillst. Dass es andere Möglichkeiten gibt, ist mir schon klar.
Ich habe aber den FileDialog nicht benutzt und nirgends auch nur angedeutet, dass ich das gemacht habe. Von daher weiß ich immer noch nicht, was an meinem Beispiel unklar war.
Ist aber auch egal, scheint ein Bug zu sein.
Gruss, Jogy
AW: Nachtrag:
06.07.2009 19:35:27
Jogy
So, kann es zu Hause auch reproduzieren, ist also ein Bug.
Schreibe MS deswegen mal an.
Gruss, Jogy
noch offen - kwT
06.07.2009 12:40:05
Jogy
.
AW: noch offen - kwT
06.07.2009 12:40:49
Jogy
Da hat mir die Vorschau ohne Text das Häkchen entfernt

302 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige