Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema CommandButton
BildScreenshot zu CommandButton CommandButton-Seite mit Beispielarbeitsmappe aufrufen

UCase ?? Unter Excel 2010

Betrifft: UCase ?? Unter Excel 2010 von: Dirk
Geschrieben am: 17.04.2015 12:30:15

Hallo Forum,

ich habe ein seit Jahren funktionierendes Makro, das heißt:

Application.Dialogs(xlDialogOpen).Show
If UCase(xDatei) = "FALSCH" Then
MsgBox "Es wurde Abbrechen angeklickt."
Exit Sub
End If

Damit wird das Fenster Datei öffnen aktiviert und es soll eine Datei ausgewählt werden. Tut man dies aber nicht und drückt stattdessen auf Abbrechen, dann soll aus dem Programm ausgestiegen werden. Das funktioniert plötzlich nicht mehr! Kann mir einer erklären warum.

Danke aus Hannover
Dirk

  

Betrifft: AW: UCase ?? Unter Excel 2010 von: Nepumuk
Geschrieben am: 17.04.2015 12:36:43

Hallo,

der Dialog liefert den booleschen Wert True (es wurde eine Datei ausgewählt) oder False (es wurde abbrechen gedrückt) zurück. Diesen Wert mit eine String zu vergleichen ist nicht nur dirty sondern ... nein das schreibe ich jetzt nicht.

Also:

    If Application.Dialogs(xlDialogOpen).Show Then
        
        'mach was mit der Datei
        
    End If
End Sub

Gruß
Nepumuk


  

Betrifft: AW: UCase ?? Unter Excel 2010 von: Dirk
Geschrieben am: 17.04.2015 14:08:36

Hallo Nepumuk,

meine VBA Kenntnisse sind ja bescheiden :-)

Komplett hieß es bisher:

Sub CommandButton1_Click()
Dim xDatei As String

Application.Dialogs(xlDialogOpen).Show
 If UCase(xDatei) = "FALSCH" Then
      MsgBox "Es wurde Abbrechen angeklickt."
      Exit Sub
   End If
Call Daten_einlesen
End Sub
und das funktionierte. Wenn man jetzt aber Abbrechen drückt, dann wird das Makro "Daten einlesen" dennoch aufgerufen. Das möchte ich aber nicht. Deine Änderung eine weitere If-Schleife einzubauen hilft mir für das Abbrechenproblem irgendwie auch nicht..... Könntest du es einem VBA-Minderentwickelten etwas verständlicher machen?? :-)

Danke
Dirk


  

Betrifft: Wo steht was von einer weiteren Schleife? (owT) von: EtoPHG
Geschrieben am: 17.04.2015 14:17:15




  

Betrifft: AW: Wo steht was von einer weiteren Schleife? (owT) von: Dirk
Geschrieben am: 17.04.2015 14:21:40

ich habe es jetzt ja so gemacht - so habe ich Nepumuk verstanden:

If Application.Dialogs(xlDialogOpen).Show Then
'öffnet den "Dateien öffnen" Dialog

If UCase(xDatei) = "FALSCH" Then
MsgBox "Es wurde Abbrechen angeklickt."
Exit Sub
End If
End If
Call Daten_einlesen
End Sub

Also zwei IF-Schleifen. war aber so wohl nicht gemeint.

Gruß
Dirk


  

Betrifft: Nein, so war's sicher nicht gemeint von: EtoPHG
Geschrieben am: 17.04.2015 14:27:36

Dirk,

Wie kannst du das in die Antwort von Nepumuk 'implantieren'?

    If Application.Dialogs(xlDialogOpen).Show Then
        
        Call Daten_einlesen
        
    End If
End Sub


Gruess Hansueli


  

Betrifft: AW: Nein, so war's sicher nicht gemeint von: Dirk
Geschrieben am: 17.04.2015 14:45:46

So verstehe ich es aber nicht! Es geht darum in eine Masterdatei viele andere Dateien einzulesen. Dazu drückt man in der Masterdatei auf einen Button und wählt eine Datei aus, die geöffnet wird. Dann startet das eigentliche Makro und liest die Daten in die Masterdatei ein. Wenn nun aber jemand plötzlich keine Datei auswählt sondern abbrechen drückt, dann soll das Makro nicht durchlaufen. Somit geht es ganz so einfach ja auch nicht. Und nochmal - so wie es bisher war, funktionierte es seit ca. 1,5 Jahren. Wobei das mit dem Abbrechen nicht oft vorkommt und die Auswirkungen aus anderen Gründen aber ziemlich blöde sind.


  

Betrifft: So so es geht nicht... von: EtoPHG
Geschrieben am: 17.04.2015 14:50:40

Dirk,

Hast du es den ausprobiert?

Wenn du es nicht verstehst, warum wendest du überhaupt VBA-Code an?
Wenn du es nicht testest, warum kannst du dann behaupten das es nicht geht?

Warum es 1.5 Jahre ging und jetzt nicht mehr, liegt mit grosser Wahrscheinlichkeit darin, dass du entweder dein Windows oder dein Excel auf eine andere Version gebracht hast.

Gruess Hansueli


  

Betrifft: AW: So so es geht nicht... von: Dirk
Geschrieben am: 17.04.2015 15:26:47

Hallo Hansuelli,

ich kann ja nicht mehr als "VBA-Kenntnisse bescheiden" angeben. Und auch mit bescheidenen Kenntnissen kann es Sinn machen VBA-Codes zu entwerfen - so zumindest meine Erfahrung. Und ich habe auf Nepumuks Hinweis etwas ausprobiert - anscheinend aber etwas falsches. Und so wie ich es dann versucht habe funktioniert es nicht. Nicht als Behauptung sondern als Tatsachenfeststellung.

Dennoch bin ich euch dankbar, dass ihr mir Hinweise gebt, die ich leider nicht mit Leben füllen kann, weil ich den entscheidenden Punkt wohl immer noch nicht erkannt habe. Jetzt mache ich erstmal Feierabend und schaue mir das später ganz in Ruhe nochmal an. Vielleicht erkenne ich dann ja den Tipp, den ihr mir zur Lösung meines Problemes geben wolltet bzw. gegeben habt. Wenn nicht, dann reichen meine Kenntnisse eben nicht. Vielen Dank Gruß Dirk


  

Betrifft: AW: So so es geht nicht... von: Nepumuk
Geschrieben am: 17.04.2015 15:56:31

Hallo,

aus deinem Code-Fragment konnte ich nichts besseres ableiten.

Gruß
Nepumuk


  

Betrifft: Stimme Hansueli zu, ... von: Luc:-?
Geschrieben am: 17.04.2015 15:13:45

…Dirk;
was du zeigst ist ein unmöglicher Code, der bisher nur dank VBA-(Compiler-)Toleranz fktt hat. Wenn du dem User (überflüssigerweise!) auch noch mitteilen willst, dass er abgebrochen hat (was er ja eigentlich wissen sollte!), musst du halt noch die MsgBox einfügen:

If Application.Dialogs(xlDialogOpen).Show Then
    Call Daten_einlesen
Else: MsgBox "Es wurde Abbrechen angeklickt."
End If
Die String-Variable xDatei nutzt doch nur etwas, wenn sie zB einen DateiNamen aufnimmt und dann an die aufgerufene Prozedur übergibt!
Application.Dialogs(xlDialogOpen).Show ergibt True, wenn eine Datei ausgewählt wurde, und False, wenn nicht. Und bekanntlich geht's nur weiter, wenn eine Aktion erfolgt ist, also Datei ausgewählt oder eben abgebrochen wurde.
Gruß, Luc :-?