vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Erstellen von dynamischen Kontextmen?s - wann immer Sie sie brauchen!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

Fortgeschrittene Programmierung
Commondialog-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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Danke für die Korrektur ;) 
Autor: Souffleurlos
Datum: 24.02.22 12:58

df
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel