Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1264to1268
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

Falls falsche Datei ausgewählt wird (VBA)

Falls falsche Datei ausgewählt wird (VBA)
Ximena
Hallo ihr Lieben
Ich habe ein Makro, das ist zwar im word, aber es öffnet eine Exceldatei und deshalb poste ich es hier im Forum! Gerade vorhin habe ich den Code ausprobiert und ausversehen eine PPT ausgewählt, anstelle eines Excels. Dann hat meine Makro natürlich eine Fehlermeldung ausgespuckt.
Kann ich programmieren, dass das Makro, wenn man nicht ein xls sondern ein doc oder ein ppt auswählt, eine MsgBox sendet, in der steht, dass man nochmals wählen muss und dann öffnet sich das OpenFileDialog Fenster erneut? Das Makro muss dann so lange Loopen, bis man ein xls ausgewählt hat...
Geht das?
Mein code:
With Application.FileDialog(msoFileDialogOpen)
.InitialFileName = spath
.title = "Select the current Macro Excel"
.AllowMultiSelect = False
.Filters.Add "Excel", "*.xlsm"
If .Show = -1 Then
myFile = .SelectedItems(1)
End If
End With
'Exit on cancel
If myFile = False Then End
Set xlsApp = CreateObject("Excel.application")
Set objXLS = xlsApp.Workbooks.Open(myFile)
objXLS.Application.Visible = True
Wäre froh um eure Hilfe!
Liebe Grüsse
Ximena

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Falls falsche Datei ausgewählt wird (VBA)
06.06.2012 15:16:03
Sheldon
Hi Ximena,
geht wohl auch eleganter, aber so lautet mein Vorschlag:
Do While Right(myfile, 5)  ".xlsm"
With Application.FileDialog(msoFileDialogOpen)
.InitialFileName = spath
.Title = "Select the current Macro Excel"
.AllowMultiSelect = False
.Filters.Add "Excel", "*.xlsm"
If .Show = -1 Then
myfile = .SelectedItems(1)
End If
End With
Loop
'Exit on cancel
If myFile = False Then End
Set xlsApp = CreateObject("Excel.application")
Set objXLS = xlsApp.Workbooks.Open(myFile)
objXLS.Application.Visible = True

Gruß
Sheldon
eleganter?!
06.06.2012 15:42:21
Ximena
Hallo Sheldon
Danke für deine Antwort.
Was meinst du mit "geht wohl auch eleganter"? Bin offen :D Da ich jetzt die Grundlagen habe, würde ich gerne elegant und einfach programmieren :)
Der Code von dir funzt, danke! :D
Liebe Grüsse
Ximena
Anzeige
AW: eleganter?!
06.06.2012 15:59:14
Sheldon
Hi,
mit eleganter meine ich, dass es eigentlich nicht die feine Art ist, einfach eine Schleife solange laufen zu lassen, bis dem Makro die Eingabe des Users passt :-) Schöner wäre eine Messagebox mit einem entsprechenden Hinweis, bei der der User auch die Wahl hat, den ganzen Vorgang abzubrechen. Und in meinem uneleganten Vorschlag wird ja nur auf .xlsm geprüft, statt dessen müsste ja auch auf xlsx usw geprüft werden. Dann wird der Code zwar etwas länger, aber die Bedienung ist wesentlich angenehmer!
Gruß
Sheldon
AW: eleganter?!
06.06.2012 16:28:08
fcs
Halo Ximena,
die folgende Variante dürfte Sheldons Idee von eleganter näher kommen. Wird die Dateiauswahl abgebrochen wird das Makro beendnet.
Gruß
Franz
Sub aaTest()
Dim spath, myfile As String
Dim xlsApp As Object, objXLS As Object
spath = "D:\Test"
Auswahl_xls:
With Application.FileDialog(msoFileDialogOpen)
.InitialFileName = spath
.Title = "Select the current Macro Excel"
.AllowMultiSelect = False
.Filters.Add "Excel", "*.xlsm"
.FilterIndex = .Filters.Count
If .Show = -1 Then
myfile = .SelectedItems(1)
If LCase(Right(myfile, 5))  ".xlsm" Then
.Filters.Delete
GoTo Auswahl_xls
End If
Set xlsApp = CreateObject("Excel.application")
Set objXLS = xlsApp.Workbooks.Open(myfile)
objXLS.Application.Visible = True
.Filters.Delete
Else
.Filters.Delete
GoTo Beenden
End If
End With
Beenden:
End Sub

Anzeige
zuerst MsgBox?!
06.06.2012 16:40:24
Ximena
Hallo Sheldon
Es wird absichtlich nur auf .xlsm geprüft, weil es ein macro enabled workbook sein muss. Und eigentlich wollte ich ja eben, dass, wenn man das falsche anklickt, eine MsgBox kommt und erst dann ein neues Fenster um das File auszuwählen, aber ich weiss nicht, wie das geht! Kannst du mir da helfen?
Liebe Grüsse
Ximena
mit MsgBox so okay?
06.06.2012 16:45:07
Ximena
Hallo ihr beiden
Was haltet ihr von dieser Lösung:
Auswahl_xls:
With Application.FileDialog(msoFileDialogOpen)
.InitialFileName = spath
.title = "Select the current Macro Excel"
.AllowMultiSelect = False
.Filters.Add "Excel", "*.xlsm"
If .Show = -1 Then
myFile = .SelectedItems(1)
If LCase(Right(myFile, 5))  ".xlsm" Then
MsgBox "Please select a macro enabled excel document!"
GoTo Auswahl_xls
End If
End If
End With
Liebe Grüsse
Ximena
Anzeige
AW: zuerst MsgBox?!
06.06.2012 16:52:47
fcs
Hallo Ximema,
hier meine Variante mit MsgBox nach Auswahl eines falschen Dateityps.
Da der Dateifilter im Dateiauswahl-Dialog auf "xlsm" gesetzt wird sollte die Fehlauswahl minimal sein.
Gruß
Franz
Sub aaTest()
Dim spath, myfile As String
Dim xlsApp As Object, objXLS As Object
spath = "D:\Test"
Auswahl_xls:
With Application.FileDialog(msoFileDialogOpen)
.InitialFileName = spath
.Title = "Select the current Macro Excel"
.AllowMultiSelect = False
.Filters.Add "Excel", "*.xlsm"
.FilterIndex = .Filters.Count
If .Show = -1 Then
myfile = .SelectedItems(1)
If LCase(Right(myfile, 5))  ".xlsm" Then
.Filters.Delete
If MsgBox( _
Prompt:="Es muss eine Excel-Datei mit Makro ausgewählt werden!", _
Buttons:=vbInformation + vbOKCancel, _
Title:="Auswahl-Exceldatei mit Makro") = vbOK Then
GoTo Auswahl_xls 'Dateiauswahl nochmals anzeigen
Else
GoTo Beenden
End If
End If
Set xlsApp = CreateObject("Excel.application")
Set objXLS = xlsApp.Workbooks.Open(myfile)
objXLS.Application.Visible = True
.Filters.Delete
Else
.Filters.Delete
GoTo Beenden
End If
End With
Beenden:
End Sub

Anzeige
AW: zuerst MsgBox?!
06.06.2012 16:54:06
Ximena
Hallo Franz
Danke! Ehm wofür genau ist das .Filters.Delete? wieso macht man das?
Liebe Grüsse
Ximena
AW: zuerst MsgBox?!
06.06.2012 17:00:01
fcs
Hallo Ximema,
mit dem
.Filters.Add ...
wird dem Word-Dateiauswahldialog ja ein Auswahlfilter hinzugefügt.
Das
.Delete.Filters
löscht diesen hinzugefügten Filter wieder aus der Liste.
Die Filter-Auswahlliste würde sonst immer länger bis Sie zurückgesetzt oder Word neu gestartet wird.
Gruß
Franz
Geht das denn so?
06.06.2012 17:04:19
Ximena
Hallo Franz
Okay, danke. Kann ich den Code so schreiben? Oder was muss ich noch verbessern?
Auswahl_xls:
With Application.FileDialog(msoFileDialogOpen)
.InitialFileName = spath
.title = "Select the current Macro Excel"
.AllowMultiSelect = False
.Filters.Add "Excel", "*.xlsm"
If .Show = -1 Then
myFile = .SelectedItems(1)
If LCase(Right(myFile, 5))  ".xlsm" Then
MsgBox "Please select a macro enabled excel document!"
.Filters.Delete
GoTo Auswahl_xls
End If
End If
.Filters.Delete
End With
'Exit on cancel
If myFile = False Then End
Set xlsApp = CreateObject("Excel.application")
Set objXLS = xlsApp.Workbooks.Open(myFile)
objXLS.Application.Visible = True
Liebe Grüsse
Ximena
Anzeige
AW: Geht das denn so?
06.06.2012 17:16:18
Sheldon
Hi Ximena,
fast schon schön, fehlt nur noch die Möglichkeit zum Abbrechen der Aktion. Wenn man schon interagieren kann mit dem Programm, dann sollte man auch mitteilen dürfen, dass man keine andere Datei mehr auswählen mag:

Auswahl_xls:
With Application.FileDialog(msoFileDialogOpen)
.InitialFileName = spath
.title = "Select the current Macro Excel"
.AllowMultiSelect = False
.Filters.Add "Excel", "*.xlsm"
If .Show = -1 Then
myFile = .SelectedItems(1)
If LCase(Right(myFile, 5))  ".xlsm" Then
If MsgBox("Please select a macro enabled excel document!", vbOKCancel +  _
vbExclamation)=1 Then
.Filters.Delete
GoTo Auswahl_xls
Else
End
End If
End If
End If
.Filters.Delete
End With
'Exit on cancel
If myFile = False Then End
Set xlsApp = CreateObject("Excel.application")
Set objXLS = xlsApp.Workbooks.Open(myFile)
objXLS.Application.Visible = True

Gruß
Sheldon
Anzeige
Auf jeden FileDialog anwendbar?
07.06.2012 09:06:39
Ximena
Hallo Sheldon
Okay, dann steht jetzt mein Code :) Ich hab dasselbe auch für eine pptx Datei, kann ich den code einfach gleich anwenden? Dann sieht es so aus:
Auswahl_ppt:
With Application.FileDialog(msoFileDialogOpen)
.InitialFileName = spath
.title = "Select the current SLR PPT from IBM"
.AllowMultiSelect = False
.Filters.Add "PowerPoint Presentation", "*.pptx"
If .Show = -1 Then
myFile = .SelectedItems(1)
If LCase(Right(myFile, 5))  ".pptx" Then
If MsgBox("Please select the right PowerPoint Presentation!", vbOKCancel + _
vbExclamation) = 1 Then
.Filters.Delete
GoTo Auswahl_ppt
Else
End
End If
End If
End If
.Filters.Delete
End With
'Exit on Cancel
If myFile = False Then End
Set objPPT = CreateObject("Powerpoint.application")
Set myPPT = objPPT.Presentations.Open(FileName:=myFile)
Funktioniert, aber ist es auch richtig so? Oder ist irgendwo ein versteckter Fehler drin?
Liebe Grüsse
Ximena
Anzeige
AW: Auf jeden FileDialog anwendbar?
07.06.2012 09:29:58
fcs
Hallo Ximena,
da du hier EXCEL-Elemente durch die entsprechenden PP-Elemente ersetzt hast sollte es innerhalb der MS-Office-Umbegung funktionieren.
Wenn noch ein Fehler drin ist, dann dürfte er mit beiden Anwendungen auftreten.
Gruß
Franz
Okay! Vielen Dank ihr Lieben - owT
07.06.2012 09:46:27
Ximena
Okay. Vielen Dank ihr Lieben!
AW: Falls falsche Datei ausgewählt wird (VBA)
06.06.2012 15:27:34
Luschi
Hallo Ximena,
die Filtereinstellungen müssen erst gelöscht werden und dann neu gesetzt:
.Filters.Clear
.Filters.Add "Excel", "*.xlsm;*.xlsx;*.xls"
Siehe dazu auch: http://msdn.microsoft.com/en-us/library/aa219834%28v=office.11%29.aspx
Gruß von Luschi
aus klein-Paris
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige