| |
Fortgeschrittene ProgrammierungCommondialog-Objekt unter VBA in Office 2019 | | | Autor: Rainer | Datum: 23.02.22 16:17 |
| Hallo,
ich habe im Office 2016 mit EXCEL-VBA ein Formular aufgebaut, in dem ich ein Commondialog-Element verwende. Wenn ich die Excel-Tabelle unter Office 2019 starte, meldet sich das VBA damit, daß das Commondialog-Objekt nicht vorhanden ist. Bei der Überprüfung des Formulars unter VBA 2019 ist dieses Objekt tatsächlich nicht mehr vorhanden. Es wird einfach vom System ignoriert. In der Toolbox für den Formularentwurf ist mir aufgefallen, daß das Symbol für das Commondialog-Objekt zwar vorhanden ist, aber der ToolTipText zum Symbol den Text "Unbekannt" anzeigt.
Daraufhin habe ich die Verweise kontrolliert. Die Datei COMDLG32.OCX, die für das Commondialog-Objekt zuständig ist, ist in der Verweisübersicht von Office 2019 ohne Fehlerhinweis aufgeführt.
Hat jemand eine Idee, was die Ursache dieses Problems sein kann? Bei der Internet-Recherche habe ich nichts zu einem Unterschied zwischen VBA 2016 und VBA 2019 gefunden.
Gruß, Rainer. | |
Re: Commondialog-Objekt unter VBA in Office 2019 | | | Autor: Souffleurlos | Datum: 24.02.22 09:58 |
| Hallo
dein geschildertes Verhalten von VBA kann ich bestätigen.
Allerdings kann ich nicht wirklich nachvollziehen, wozu Du dieses zusätzliche Steuerelement brauchst.
Excel.Application hat eine Eigenschaft namens Dialogs. In dieser Auflistung sind viel mehr Dialog enthalten als Du über das Common-Steuerelement erhalten kannst.
Application.Dialogs(xlDialogsOpenFile).Show
Es ist etwas gewöhnungsbedürftig mit dieser Eigenschaft zu arbeiten - gebe ich zu.
Beitrag wurde zuletzt am 24.02.22 um 10:00:48 editiert. | |
Re: Commondialog-Objekt unter VBA in Office 2019 | | | Autor: Rainer | Datum: 24.02.22 12:22 |
| Hallo Souffleurlos,
danke für Deine Antwort. Diese Variante war mir bisher nicht bekannt. Sieht vielversprechend aus. Obwohl auf den ersten Blick die Vielfalt der Varianten und Parameter unübersichtlich und abschreckend wirkt.
Für diejenigen, die sich ebenfalls mit diesem Problem konfrontriert sehen ein paar Hinweise:
1.
Der in der Antwort von Souffleurlos genannte Parameter für den Aufruf des Datei-Dialogs lautet korrekt "xlDialogsOpen".
2.
Eine Übersicht über alle verfügbaren Dialoge findet Ihr unter dem Link
https://docs.microsoft.com/de-de/office/vba/api/excel.xlbuiltindialog
3.
Die, zugegeben äußerst magere, Darstellung der maximal 30 Parameter findet Ihr unter dem Link https://docs.microsoft.com/de-de/office/vba/excel/concepts/controls-dialogboxes-forms/built-in-dialog-box-argument-lists
Wenn jemand noch andere, vielleicht aussagekräftigere Beschreibungen findet, wäre für einen Hinweis dankbar.
Gruß, Rainer. | |
Danke für die Korrektur ;) | | | Autor: Souffleurlos | Datum: 24.02.22 12:58 |
| df | |
Re: Danke für die Korrektur ;) | | | Autor: Rainer | Datum: 24.02.22 18:56 |
| Hallo Souffleurlos,
die von Dir empfohlene Application-Eigenschaft DIALOGS ist doch ziemlich aufwendig zu verwenden. Ich habe mich denn doch für die Application-Eigenschaft FILEDIALOG entschieden. Vorallem, weil ich die gesuchte Datei nicht unmmittelbar aus dem Dialog heraus öffnen wollte. Mit FILEDIALOG geht es sehr schön.
Ich habe mir dazu eine kleine Funktion geschrieben, die ich anderen Interessierten zur Nachnutzung bereitstellen möchte:
Const fsoTotal = 0
Const fsoFile = 1
Const fsoExtension = 2
Const fsoBase = 3
Const fsoFolder = 4
Public Enum FsoReturnTyp
fsoTotalName = fsoTotal
fsoFileName = fsoFile
fsoExtensionName = fsoExtension
fsoBaseName = fsoBase
fsoParentFolderName = fsoFolder
End Enum
Public Function DateiDialog(ByVal Titel As String, _
Optional ByVal DialogTyp As MsoFileDialogType = _
msoFileDialogFilePicker, _
Optional ByVal ViewTyp As MsoFileDialogView = _
msoFileDialogViewDetails, _
Optional ByVal MultiAusw As Boolean = False, _
Optional ByVal FilterList As String = "alle Dateien" & _
"(*.*),*.*", _
Optional ByVal InitPfad As String = "C:\", _
Optional ByVal ReturnTyp As FsoReturnTyp = _
fsoTotalName, _
Optional ByVal Delimiter As String = ";") As String
Dim oFileDialog As FileDialog
Dim oFso As Object
Dim vFilter As Variant
Dim nI As Integer
Dim vItem As Variant
Set oFileDialog = Application.FileDialog(DialogTyp)
DateiDialog = ""
With oFileDialog
.Title = Titel
.ButtonName = "Ok"
.AllowMultiSelect = MultiAusw
.Filters.Clear
If DialogTyp = msoFileDialogFilePicker Then
vFilter = Split(FilterList, ",")
If (UBound(vFilter) + 1) Mod 2 > 0 Then
DateiDialog = ""
Exit Function
End If
For nI = 0 To UBound(vFilter) Step 2
.Filters.Add vFilter(nI), vFilter(nI + 1)
Next nI
.FilterIndex = 1
ElseIf DialogTyp = msoFileDialogFolderPicker And _
Right(InitPfad, 1) = "\" Then
InitPfad = Left(InitPfad, Len(InitPfad) - 1)
ElseIf DialogTyp = msoFileDialogOpen Or _
DialogTyp = msoFileDialogSaveAs Then
MsgBox "Das Öffnen und Speichern von Dateien ist" & vbCrLf & _
"in dieser Funktion nicht implementiert!", _
vbInformation, _
"Bedienhinweis"
Exit Function
End If
.InitialView = ViewTyp
If .Show = True Then
Set oFso = CreateObject("Scripting.FileSystemObject")
For Each vItem In .SelectedItems
Select Case ReturnTyp
Case Is = fsoTotalName
DateiDialog = DateiDialog & Delimiter & vItem
Case Is = fsoFileName
DateiDialog = DateiDialog & Delimiter & oFso.GetFileName( _
vItem)
Case Is = fsoExtensionName
DateiDialog = DateiDialog & Delimiter & oFso.GetExtensionName( _
vItem)
Case Is = fsoBaseName
DateiDialog = DateiDialog & Delimiter & oFso.GetBaseName( _
vItem)
Case Is = fsoParentFolderName
DateiDialog = DateiDialog & Delimiter & _
oFso.GetParentFolderName(vItem) & "\"
End Select
Next vItem
DateiDialog = Mid(DateiDialog, 2)
End If
End With
Set oFileDialog = Nothing
End Function Ich mußte leider alle meine Kommentare entfernen, um im Meldungslimit zu bleiben.
Gruß, Rainer. | |
| Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
|
|
Neu! sevPopUp 2.0
Dynamische Kontextmenüs!
Erstellen Sie mit nur wenigen Zeilen Code Kontextmenüs dynamisch zur Laufzeit. Vordefinierte Styles (XP, Office, OfficeXP, Vista oder Windows 8) erleichtern die Anpassung an die eigenen Anwendung... Weitere InfosTipp des Monats TOP Entwickler-Paket
TOP-Preis!!
Mit der Developer CD erhalten Sie insgesamt 24 Entwickler- komponenten und Windows-DLLs. Die Einzelkomponenten haben einen Gesamtwert von 1605.50 EUR...
Jetzt nur 599,00 EURWeitere Infos
|