Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1816to1820
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
Inhaltsverzeichnis

Programm ist manchmal zu schnell

Programm ist manchmal zu schnell
01.03.2021 10:52:18
Martin
Hallo zusammen,
ich habe das Problem dass mein Programm manchmal zu schnell ist.
Konkret öffnet mein Programm eine Exceldatei und kopiert eine Arbeitsmappe ich die aktuelle Datei.
Dort werden Daten ausgetauscht.
Anschließend die Exceldatei wieder geöffnet und die geänderte Arbeitsmappe zurückübertragen.
Da das ganze auf einem Serverabliegt hat es sich, vor allem nachdem ich es auf Speed getrimmt habe, schonmal in einem Durchlauf hintereinander verschluckt und wollte eine Kopie speichern (ich nehme an die Exceldatei war noch offen oder hat den Eindruck gemacht noch offen zu sein).
a) gibt es die Möglichkeit an einer Stelle eine Pausefunktion für 0,5 Sekunden einzufügen
b) oder eine Operation, die
- prüft ob die Datei irgendwo offen und damit gesperrt ist
- solange wartet bis die Datei wieder freigegeben ist, bzw. maximal 5 Sekunden.
c) Tipps?
Ich bin mir nicht sicher, ob sich das Problem mit den Screenupdates zur Geschindigkeitsoptimierung verschlimmert hat.
Ggf. schaue ich, ob ich mit Aufgliederung der Funktionen in der Abfolge überflüssiges Schließen und öffnen vermeiden kann.
With Application
.ScreenUpdating = False
.Calculation = xlCalculationManual
.EnableEvents = False
End With
'Zeit = Timer
Call CSVladen_Click
Call Uebertragen_Click
Call Aktualisieren_Click
'Call Uebertragen_Click
'Differenz = Timer - Zeit
'i = 100 * Differenz
'Differenz = i / 100
With Application
.ScreenUpdating = True
.Calculation = xlCalculationAutomatic
.EnableEvents = True
End With
'MsgBox "Tagesprogramm in " & Differenz & " Sekunden geplant"
End Sub

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Programm ist manchmal zu schnell
01.03.2021 11:01:26
Mister
Hallo,
eine Pause von 10 Sekunden erreichst du mit:
Application.Wait(Now + TimeValue("0:00:10"))
Gruß
Martin

AW: Sleep
01.03.2021 11:04:39
Fennek
Hallo,
mit der API "Sleep" kann eine Pause eingefügt werden:
Vor der ersten "Sub"

Private Declare PtrSafe Sub Sleep Lib "kernel32.dll" ( _
ByVal dwMilliseconds As Long)
Aufruf mit:

Sleep(500) '500 Millisekunden Pause
mfg

AW: Sleep
01.03.2021 11:10:12
Martin
gibt es auch ein Wait bis die Datei nicht mehr geschützt ist/also verfügbar ist?

AW: im Prinzip ja
01.03.2021 11:15:14
Fennek
Ob es Unterschiede beim Beenden von vorangegangen VBA-Befehlen gibt, kann ich dir nicht sagen, es zu Testen ist auch nicht trivial.

Anzeige
AW: Sleep
01.03.2021 11:16:39
Daniel
nein, so ein "Wait_Until" gibt es nicht.
du kannst nur die Datei öffen, prüfen ob sie geschützt ist und wenn ja, sie wieder schließen und den Vorgang wiederholen, solange bis sie nicht mehr geschützt ist.
Gruß Daniel

AW: Sleep
01.03.2021 11:20:44
Martin
Das klingt doch vielversprechend!!!
Und wie mache ich den Loop? Mit If und sprungmarker am Ende oder mit While...?
Sorry stehe etwas auf mehreren Schläuchen =)

AW: Sleep
01.03.2021 11:59:47
Daniel
Beispielsweise so (PseudoCode)
Do
Datei öffen
If Not Datei Schreibegeschützt then Exit Do
Datei schließen
Ggf Pause einbauen
Loop
Gruß Daniel

Anzeige
AW: Sleep
01.03.2021 15:21:26
Martin
Danke schön :)
was muss ich schreiben, um zu prüfen ob die Datei schreibgeschützt ist?
z.B.?
If WorkbooksWorkbooks.ReadOnly:= True Then?
restliches Codefragment:
z = 1
VonVorne:
Workbooks.Open Filename:=Pathname & Filename
If WorkbooksWorkbooks.ReadOnly Then
MsgBox "Die Datei ist schreibgeschützt"
ActiveWorkbook.Close SaveChanges:=False
z = z + 1
If z = 12 Then
MsgBox "Die Datei kann wiederholt nicht gespeichert werden"
GoTo ZumEnde
End If
Application.Wait (Now + TimeValue("00:00:02"))
GoTo VonVorne
End If
Sheets(Tabname).Select
ActiveSheet.Name = "alt"
Windows(ControlFile).Activate
Sheets(Tabname).Copy After:=Workbooks(Filename).Sheets(1)
Windows(Filename).Activate
Application.DisplayAlerts = False 'deaktiviert, das Bestätigungspopup
Sheets("alt").Select
ActiveWindow.SelectedSheets.Delete
Worksheets(Tabname).Cells(letztezeileDatenbank, 1).Select
ZumEnde:
ActiveWorkbook.Close SaveChanges:=True 'Schliesst die Datei Datenbank und speichert diese ggf
Windows(ControlFile).Activate

Anzeige
AW: Sleep
01.03.2021 15:22:25
Martin
p.s. Danke für den Support... hoffe ich bin kurz vorm Ziel!

AW: Sleep
01.03.2021 15:32:05
Martin
ok wirklich nah dran gewesen:
If ActiveWorkbook.ReadOnly Then
Und ein Schreibfehler drin gewesen.
Habe es nun 2x 50 Mal durchlaufen lassen, fehlerfrei bisher

AW: kein "ActiveWorkbook"
01.03.2021 15:44:29
Fennek
Es ist leichter zu überblicken und zu ändern, wenn man sich angewöhnt ordentlich zu referenzieren:

dim WB as workbook
set wb = workbooks.open  Filename:=Pathname & Filename
if wb.ReadOnly = true then
endif
WB.close 0
WB.close:
0: nicht speichern
1: speichern

AW: prüfen, ob Datei geöffnet ist
01.03.2021 11:22:56
Fennek
Es gibt zwei Wege zu prüfen, ob eine Datei geöffnet ist:
- "Schattenkopie: ~$Name.xlsx
- Open file-name For Binary Access Read Lock Read As #FF

Anzeige
AW: Programm ist manchmal zu schnell
01.03.2021 11:09:53
Daniel
Hi
wenn du eine Datei öffnest, die schon von jemand anderem zur Bearbeitung geöffnet ist, kannst du sie nur schreibgeschützt öffen, und wenn sie schreibgeschützt geöffnet ist, kann man sie nur als kopie speichern.
ob eine Datei schreibgeschützt geöffnet wurde, kannst du über die Eigenschaft Workbooks(...).ReadOnly abfragen
Gruß Daniel

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige