Live-Forum - Die aktuellen Beiträge
Datum
Titel
18.04.2024 18:04:29
18.04.2024 16:33:24
Anzeige
Archiv - Navigation
1572to1576
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

Verschiedene Rechner greifen gleichzeitig zu

Verschiedene Rechner greifen gleichzeitig zu
14.08.2017 21:09:56
Jonas
Halli Hallo,
bin schon lange Leser dieses Forums und finde es toll.
Habe anhand der Tipps schon viele Probleme gelöst.
Nur hierbei stoße ich an meine Grenzen. Es gibt schon Ansätze aber ich komme zu keinem Ergebnis :(
Drei Rechner greifen auf die gleichen Dateien, die auf dem Server liegen zu. Haben diese geöffnet und jeder kann über eine Eingabemaske, welche jeder lokal auf seinem Rechner gespeichert hat, die Daten ändern.
Per Makro werden dann die Daten aus der Maske in die einzelnen Dateien geschrieben und jeweils gespeichert. Da die Dateien freigegeben sind werden alle Änderungen der anderen übernommen. Das funktioniert wunderbar.
NUR dauert das Speichern ca. eine Minute. Wenn in dieser Zeit ein andere das Makro startet kommt es zu Fehlern.
Daher mein Wunsch. Wie kann ich sicherstellen dass solange das Makro zum Speichern auf einem Rechner noch ausgeführt wird kann kein anderer dieses Makro ausführen.
Zusammenfassend : Jeder hat eine Datei Arbeit.xls auf seinem Rechner. Auf dem Server liegen die Dateien Daten.xls, Werte.xls, Mitarbeiter.xls. Diese sind freigeben und jeder öffnet mit dem Öffnen der Datei Arbeit.xls diese auf seinem Rechner und verändert diese.
In der Datei Arbeit.xls ist das Makro Speichern() welches die eigegebenen Daten aus der Arbeit.xls in die einzelnen Dateien speichert.
Über einen Rat würde ich mich tierisch freuen da mich das Thema schon Monate beschäftigt.
Liebe Grüße Jonas

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Verschiedene Rechner greifen gleichzeitig zu
15.08.2017 08:23:11
Martin
Hallo Jonas,
meine Antwort wird dich nicht erfreuen, wäre aber die vernünftigste Lösung: Schwenke zumindest bei den Dateien Daten.xls und Werte.xls vom Dateiformat von Excel auf Access um. Der Zugriff per SQL geht sehr bequem von Excel aus und der Lese- bzw. Schreibzugriff auf die Datensätze geht um ein Vielfaches schneller. Du kannst natürlich auch mal den SQL-Zugriff auf die bestehenden Excel-Dateien probieren (siehe z.B. hier: https://www.herber.de/forum/archiv/1200to1204/1202426_Zugriff_per_SQL_auf_ExcelSheet.html), aber ich kann nicht einschätzen ob das ausreicht.
Viele Grüße
Martin
Anzeige
AW: Verschiedene Rechner greifen gleichzeitig zu
15.08.2017 14:49:30
fcs
Hallo Jonas,
Die lange Laufzeit beim Speichern wird ja hauptsächlich verursacht durch das Speichern der Daten zur Änderungsverfolgung. Wenn du die Detail-Infos zu den Ändeerungen (Wer, wann, wo, was) niht benötigst, dann solltest du alle Änderungen in den Dateien annehmen und beim anschließenden Freigen die Option "Änderungen verfolgen" deaktivieren. Zusätzlich könnten noch aufwendige Berechnungen in den Dateien zur Laufzeit betragen - das bekommt man oft durch Optimierungen in der Programmierung in den Griff..
Ich hab auch ein wenig rumgetüftelt und etwas angepasst, was ich hier in einem Forums-Beitrag gefunden habe. Dabei wird vor dem Speichern geprüft, ob eine Info-Datei (Text) vorhanden ist. Wenn nein, dann wird die kleine Info-Datei erstellt und der Speichervorgangs gestarte. Ist der Speichervorgang abgeschlossen, dann wird die Info-Datei wieder gelöscht.
Startet ein anderer User während des Speichervorgangs auf seinem Rechner das Speichermakro, dann wird der Inhalt der Info-Datei in einer MsgBox angezeigt.
Ich konnte das jetzt nur Lokal testen, indem ich die Info-Datei manuell in das entsprechende Verzeichnis kopiert bzw. dort gelöscht hab.
Wie robust das Ganze dann im Alltagsbetrieb auf einem Netzlaufwerk funktionier: ?
Langfristig sind sicher die alternativen Vorschläge von Martin bzw. Thorsten der bessere Weg.
Gruß
Franz
Private Sub prcDatenSpeichern()
'Daten in die Dateien Daten.xls, Werte.xls, Mitarbeiter.xls schreiben und speichern
Dim StatusCalc As Long
Dim wkbDaten As Workbook, wkbWerte As Workbook, wkbMA As Workbook
Dim intFF As Integer, strDatei As String, varStartSpeichern, strText As String, strMsg As  _
String
On Error GoTo Fehler
StatusCalc = Application.Calculation
Set wkbDaten = Workbooks("Daten.xls")
Set wkbWerte = Workbooks("Werte.xls")
Set wkbMA = Workbooks("Mitarbeiter.xls")
'Name der Infodatei zur Anzeige, dass ein andere User zur Zeit Daten speichert
strDatei = wkbDaten.Path & Application.PathSeparator & "Files_in_Use.txt"
ReStart:
If Dir(strDatei) = "" Then
'Start des Speichervorgangs in Textdatei schreiben
intFF = FreeFile
Open strDatei For Output As #intFF
Print #intFF, "User """ & VBA.Environ("Username") & """ bearbeitet zur Zeit die Dateien" _
Print #intFF, "Daten.xls, Werte.xls und Mitarbeiter.xls"
Print #intFF, "mit Makro ""prcSpeichern Daten"", Startzeit: " _
& Format(Now, "YYYY-MM-DD hh:mm:ss")
Close #intFF
'Makrobremsen lösen
With Application
.Calculation = xlCalculationManual
.ScreenUpdating = False
.EnableEvents = False
End With
Application.Calculate
'ab hier dann der bisherige Code zum Eintragen der Userform-Daten in die 3 Dateien
'falls zwingend erforderlich, zwischendurch Neuberechnungen einfügen.
'Vor dem Speichern der 3 Dateien alles neu berechnen
Application.Calculate
wkbDaten.Save
wkbWerte.Save
wkbMA.Save
'Textdatei zur Markierung des Speichervorgangs wieder löschen
If Dir(strDatei)  "" Then VBA.Kill strDatei
Else
intFF = FreeFile
Open strDatei For Input As #intFF
strMsg = ""
Do Until EOF(intFF)
Line Input #intFF, strText
strMsg = strMsg & vbLf & strText
Loop
Close #intFF
'Startdatum/-Zeit des letzten Speichervorgangs aus Text auslesen
varStartSpeichern = Right(strMsg, 19)
varStartSpeichern = CDate(varStartSpeichern)
'Nach maximal 2 Minuten kann die Markierungsdatei gelöscht und der Speichervorgang _
erneut gestartet werden
If Now - varStartSpeichern > TimeSerial(Hour:=0, Minute:=2, Second:=0) Then
If MsgBox(strMsg & Chr(13) _
& "Der Speichervorgang beim User liegt schon etwas zurück." & vbLf _
& "Info-Datei löschen und Speichervorgang erneut starten?", _
vbOKCancel + vbQuestion, _
"Hinweis:") = vbOK Then
VBA.Kill strDatei
GoTo ReStart:
End If
Else
MsgBox strMsg & Chr(13) _
& "Bitte warten Sie bis das Makro des anderen Users die Dateien wieder zum " _
& "Speichern freigegeben hat!" & vbLf & vbLf _
& "Starten Sie dann den Speichervorgang erneut.", _
vbOKOnly + vbInformation, _
"Hinweis:"
GoTo Fehler
End If
End If
Fehler:
With Err
Select Case .Number
Case 0 'alles in Ordnung
Case 9
MsgBox "Eine der Dateien ""Daten.xls"", ""Werte.xls"" oder " _
& """Mitarbeiter.xls"" ist nicht geöffnet!"
Case Else
MsgBox "fehler-Nr.: " & .Number & vbLf & .Description
Close intFF
End Select
End With
'Makrobremsen zurücksetzen
With Application
.Calculation = StatusCalc
.ScreenUpdating = True
.EnableEvents = True
End With
End Sub

Anzeige
Noch eine Frage
18.08.2017 18:13:53
Jonas
Hallo Franz,
vielen Dank für den Ansatz.
Habe den soweit umgesetzt.
Nur was bedeutet die Zeile
StatusCalc = Application.Calculation
Mein Problem ist dass Werte nicht mehr in die einzelnen Dateien geschrieben werden.
Wenn ich in das vohandene Makro die Zeile
Application.Calculation = xlCalculationAutomatic

einfüge funktioniert es wieder.
Hat jemand eine Idee?
CU
Jonas
AW: Noch eine Frage
19.08.2017 03:44:20
fcs
Hallo Jonas,
Nur was bedeutet die Zeile
StatusCalc = Application.Calculation

In dieser Zeile wird der aktuelle Berechnungs-Modus (automatisch, manuell, automatisch außer bei Datentabellen) in der Variablen gespeichert,um ihn später wieder auf diesen zu setzen.
Zur Beschleunigung der Makroausführung wird dann etwas später der Berechnungsmodus hier auf mauell gesetzt.
        'Makrobremsen lösen
With Application
.Calculation = xlCalculationManual
.ScreenUpdating = False
.EnableEvents = False
End With

Dadurch, dass der Berechnungsmodus auf manuell steht wird, wenn jetzt die Daten aus dem Userform in den Tabellen eingefügt werden, nicht bei jedem Wert eine Neu-Berechnung gestartet.
Wenn bei dir das Ganze nur funktioniert, wenn der Berechnungsmodus permanent auf automatisch stehen muss - dann braucht man ihn natürlich nicht vorübergehend auf manuell setzen.
Ich tippe aber, dass man "nur" an den richtigen Stellen in deinem vorhandenen Makro eine Neuberechberechnng per
Application.Calculate
einfügen muss, damit die Daten korrekt in allen 3 Dateien übernommen werden.
Wenn dich die Makrolaufzeit für Daten-Übertragung und Speichern nicht stört (und 1 Minute + ist eine Menge Holz), dann kannst du auf diese Form der Optimierung verzichten und ständig automatisch berechnen lassen.
LG
Franz
Anzeige
AW: Noch eine Frage
19.08.2017 11:23:07
Jonas
Hallo Franz,
vielen Dank für die tolle Erklärung.
Mit deiner Hilfe habe ich alles hinbekommen.
LG
Jonas

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige