Microsoft Excel

Herbers Excel/VBA-Archiv

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

Hilfe bei Optimierung von VBA-Code

Betrifft: Hilfe bei Optimierung von VBA-Code von: Torsten K.
Geschrieben am: 11.08.2004 14:23:49

Hallo zusammen,

in der nachfolgenden Datei habe ich einen VBA-Code erarbeitet, mit dem ich verschiedene Dateien aktualisieren kann und gleichzeitig über Variablen Summen zu bestimmten Daten ziehen und in ein WS schreiben kann:

https://www.herber.de/bbs/user/9510.xls

Im Einzelnen: In einer Zentraldatei habe ich pro Kostenstelle die Gehälter und Incentives hinterlegt. Diese Daten gelangen über eine SVerweis-Verknüpfung in die Budgetdateien der Kostenstellen. Nachdem die Personalkostendaten aktualisiert wurden, möchte ich natürlich nicht alle einzelnen Budgetdateien der Kostenstellen manuell öffnen, aktualisieren, speichern und schließen sondern
mit Hilfe meines VBA-Codes updaten. Gleichzeitig möchte ich aus Kontrollzwecken jeweils die Summen der Incentives/Gehälter in meine UpDate-Datei eintragen lassen. Das ist mir mit meinem Code auch alles gelungen.
Allerdings brauche ich für folgende offene Punkte Eure Hilfe:
1) Die Budgetdateien der Kostenstellen zeigen beim Schließen eine MsgBox mit dem Hinweis, daß das Estimate höher ist als das Budget. Trotz des Application.DisplayAlerts=False muß ich beim UpDate über den VBA-Code die MsgBox mit dem Klick auf ok wegdrücken. Kann man es so einrichten, daß die MsgBox gar nicht erst erscheint?

2) Wie Ihr im Code sehen könnt, habe ich die zu aktualisierenden Budgetdateien (NL1_TEST.xls, NL2_TEST.xls, INDUS_TEST.xls) einzeln zur Abarbeitung eingetragen. Ich hätte jedoch gern, daß Excel die Liste in dem WS("FILES") abarbeitet, wobei zu berücksichten ist, daß die Liste mal kürze oder länger sein kann, als angegeben.

3) Schließlich würde ich gerne Fehler abfangen können. Falls also beim Aktualisieren einer Budgetdatei etwas schiefgeht, soll Excel den ganzen Vorgang abbrechen und über eine MsgBox angeben, bei welcher Budgetdatei abgebrochen wurde.

Das sind eine ganze Menge Wünsche, aber sie übersteigen meine bescheidenen VBA-Kenntnisse. Ich wäre Euch daher sehr dankbar, wenn Ihr mir helfen könnt.

Viele Grüße
Torsten

  


Betrifft: AW: Hilfe bei Optimierung von VBA-Code von: andre
Geschrieben am: 15.08.2004 08:43:49

Hallo Torsten,
ich nehme mal an, dass VBA nein nicht ganz stimmt ...
1) Ich nehme an, dass die Msgbox von irgendeinem Code kommt, da musst Du das Probem dort beheben.
2) Die Fileliste kannst Du mit einer Schleife abarbeiten. z.B.
Datei=Sheets("Files").Cells(1,1)
i=1
Do While Datei <> ""
...was Du tun willst
i=i+1
Datei=Sheets("Files").Cells(i,1)
Loop
3) mit einer Fehlerbehandlung
z.B.
on error goto errorhandler
Do While Datei <> ""
...was Du tun willst
i=i+1
Datei=Sheets("Files").Cells(i,1)
Loop
On error goto 0
...
exit sub
errorhandler:
msgbox "Fehler bei Datei: " & datei & chr(10) & " ich beende das makro."
end sub
über die err.number kann man die Fehlerbehandlung auch verfinern ...


  


Betrifft: AW: erledigt - mT von: Torsten K.
Geschrieben am: 16.08.2004 10:26:22

Hallo Andre,

zunächst vielen für Deine Rückmeldung.
Da ich nach 2 Tagen zu meinem Thread noch keine Antwort erhielt, hatte ich gedacht, mein Anliegen mit den 3 Fragen wäre zu viel auf einmal gewesen und habe dann am Freitag meine Fragen jeweils einzeln ins Forum gestellt und mit Hilfe von Udo (aus'm Pott) klären können. Ich wollte dann diesen Thread als erledigt kennzeichnen. Nun bist Du mir zuvor gekommen und ich habe ein bißchen ein schlechtes Gewissen. :-(
Zu Deiner Info füge ich den mit Udo's Tips ergänzten Code ein (Vielleicht ist ja noch etwas Nützliches für Dich dabei):
Private Sub cmb_UPDATE_Click()

If MsgBox("Sollen die Kostendateien jetzt aktualisiert werden?", vbYesNo) = vbYes Then

Dim EI As Long  'Estimate Incentive
Dim EG As Long  'Estimate Gehalt
Dim BI As Long  'Budget Incentive
Dim BG As Long  'Budget Gehalt
Dim i As Integer
Dim irow As Integer
Dim wbName As String

On Error GoTo errHandler

Application.ScreenUpdating = False
Application.StatusBar = "Dieser Vorgang dauert ein paar Minuten. Bitte Geduld haben..."
Application.DisplayAlerts = False
Application.EnableEvents = False 'die MsgBox beim Schließen der Kostendatei wird unterdrückt

For i = 1 To Sheets("FILES").Range("A1").End(xlDown).Row
wbName = Sheets("FILES").Cells(i, 1)
Workbooks.Open wbName, 3 'mit der 3 wird die Excel-Meldung nach Aktualisierung unterdrückt
    ActiveWorkbook.Save
        EI = EI + Sheets("ENTER").Range("I40").Value
        EG = EG + Sheets("ENTER").Range("I42").Value
        BI = BI + Sheets("ENTER").Range("O40").Value
        BG = BG + Sheets("ENTER").Range("O42").Value
    ActiveWorkbook.Close , True
Next i

   With Worksheets("UpDate")
      irow = .Cells(Rows.Count, 8).End(xlUp).Row + 1
            .Unprotect "maze"
            .Cells(irow, 2).Value = Date
            .Cells(irow, 3).Value = Time
            .Cells(irow, 4).Value = Environ("Username")
            .Cells(irow, 5).Value = EI
            .Cells(irow, 6).Value = EG
            .Cells(irow, 7).Value = BI
            .Cells(irow, 8).Value = BG
            .Protect "maze"
   End With

Application.DisplayAlerts = True
Application.StatusBar = False
Application.EnableEvents = True

MsgBox "Dateien wurden aktualisiert", vbOKOnly

Application.ScreenUpdating = True

Else
End If

Exit Sub

errHandler:
Application.DisplayAlerts = True
Application.StatusBar = False
Application.EnableEvents = True
MsgBox "Beim Update der Datei" & vbCr & wbName & vbCr & _
        "ist ein Fehler aufgetreten!", vbCritical + vbOKOnly, "ABBRUCH!"
ActiveWorkbook.Close , True

End Sub


Nochmals Vielen Dank für Deine Mühe.

Gruß
Torsten

PS: VBA nein ist in der Tat nicht ganz richtig; aber die nächste Stufe wäre genauso falsch. Also lieber ein bißchen bescheiden auftreten. :-)


 

Beiträge aus den Excel-Beispielen zum Thema "Hilfe bei Optimierung von VBA-Code"