Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
468to472
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
468to472
468to472
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Hilfe bei Optimierung von VBA-Code

Hilfe bei Optimierung von VBA-Code
11.08.2004 14:23:49
VBA-Code
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

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Hilfe bei Optimierung von VBA-Code
15.08.2004 08:43:49
VBA-Code
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 ...
Anzeige
AW: erledigt - mT
Torsten
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. :-)
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige