Absturz nach DoEvents...

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
ListBox MsgBox
Bild

Betrifft: Absturz nach DoEvents... von: Wieland
Geschrieben am: 08.03.2005 15:25:06

Hallo Excel-Fachleute,

ich habe da ein Problem mit DoEvents:
Nachdem ich die Steuerung an das Betriebssystem übergeben habe, um während des Makrolaufs das Blatt zu wechseln, stürzt mir Excel ab. Dies tritt ein, sobald ich ein anderes Blatt aktivieren möchte, während zwei Mappen geöffnet sind. Ist dagegen nur eine Mappe geöffnet funktioniert das ganze einwandfrei und ich kann problemlos innerhalb Excel navigieren.
Hat jemand eine Idee, wie man den Absturz vermeiden kann? In meinem Fall müssen zwei Mappen gleichzeitig geöffnet sein.

Vielen Dank
Wieland

Bild


Betrifft: AW: Absturz nach DoEvents... von: Josef Ehrensberger
Geschrieben am: 08.03.2005 16:30:20

Hallo Wieland!

Warum musst du (VBA gut) ein Blatt aktivieren?

Wahrscheinlich versuchst du ein Blatt der nicht aktiven Mappe zu aktivieren.

Ohne den Code ist das aber nur geraten!




Gruß Sepp


P.S.: Rückmeldung nicht vergessen!




Bild


Betrifft: AW: Absturz nach DoEvents... von: Wieland
Geschrieben am: 08.03.2005 17:01:50

Hallo Josef, vielen Dank für die Antwort.

So gut sind meine VBA-Kenntnisse nun auch nicht, aber ich komme doch einigermaßen klar. Man betritt einfach immer wieder Neuland, wo es dann hapert. Zu meinem Problem:
Ich möchte aus einer Mappe heraus, von der aus ich Module kopiere etc. auch Tabellenblätter austauschen. Diese möchte ich aber vorher sehen, daher die Aktivierung des Blattes. Dies ist auch der Grund, weshalb zwei Mappen aktiv sind, wobei es dann zum Absturz kommt. Ich möchte quasi "dialogunterstützt" sehen, welches Blatt ich gerade in welcher Mappe austausche. Ich weiß, dass man das ganze auch in Excel ohne VBA lösen könnte, aber wenn man mal mehrere Mappen zu bearbeiten hat ist man mit VBA einfach besser dran. Anbei ein Teil des noch unvollständigen Kodes.

Gruß Wieland


Private Declare

Function GetAsyncKeyState Lib "user32" _
 (ByVal vKey As Long) As Integer
Option Explicit

Sub Blätter_tauschen()
'Version vom 8-3-05
Dim Ok As Variant
Dim Blatt, Mappe1, Pfad1, Datname1, Mappe2, Pfad2, Datname2 As String
Application.EnableEvents = False 'Makros ausschalten, auch Auto_open !
'Auswahl der Mappe:
ChDrive "H:\Wartung"
Mappe1 = Application.GetOpenFilename("Excel-Arbeitsmappen (*.xls),*.xls", 1, "   Welche Excel-Mappe soll geändert werden ?")
If Mappe1 = False Then Exit Sub
Pfad1 = Left(Mappe1, InStrRev(Mappe1, "\"))
Datname1 = Right(Mappe1, Len(Mappe1) - InStrRev(Mappe1, "\"))
Workbooks.Open Filename:=Mappe1, UpdateLinks:=0
Ok = MsgBox(" Bitte das Blatt auswählen, das getauscht werden soll . . ." & vbLf & vbLf & " Weiter mit < ENTER >", vbOKOnly, _
"   Blätter tauschen")
'Unterbrechen der Programmausführung
Do
DoEvents
If (GetAsyncKeyState(&HD)) <> 0 Then Exit Do 'Hexadezimalcodeeingabe ist erforderlich!
Loop
'*************Absturz********************
Blatt = ActiveSheet.Name
ActiveSheet.Delete
.
.
.
.
.
   
End Sub



Bild


Betrifft: AW: Absturz nach DoEvents... von: Matthias G
Geschrieben am: 08.03.2005 17:13:47

Hallo Wieland,

kein guter Stil irgendwie... ;-)

Wie wäre es mit einer Listbox, die die Blattnamen enthält?
Goggle hiflt:
https://www.google.de/search?hl=de&q=bl%C3%A4tter+in+listbox+site%3Awww.herber.de&btnG=Google-Suche&meta=

Gruß Matthias


Bild


Betrifft: AW: Absturz nach DoEvents... von: Wieland
Geschrieben am: 11.03.2005 07:39:26

Hallo Matthias,
danke für den Tipp, habe deinen Vorschlag aufgenommen und eine Liste aller Blätter in einem separaten Blatt erstellt. Bei nur einer aktiven Arbeitsmappe funktioniert DoEvents auch ganz prima. Gruß Wieland


 Bild

Beiträge aus den Excel-Beispielen zum Thema "array einlesen und auslesen"