Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1484to1488
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

einmalig Fortlaufende Nummer aus txt-Datei

einmalig Fortlaufende Nummer aus txt-Datei
04.04.2016 11:39:04
Urmila
Hallo zusammen,
ich brauche euere Hilfe.
Ich erstelle gerade eine Vorlage, in der eine fortlaufende Nummer vergeben werden soll, nicht beim Öffnen oder beim Speichern etc. sondern beim Drücken einer Schaltfläche.
Folgenden Skript habe ich, was die Txt-Datei ausliest, Nummer erhöht und speichert-
was ja auch sehr gut funktioniert:
Public Const Path = "C:\Nummer.txt"
Sub FortlaufendeNummer()
Dim ZählerDatei As Integer, TempNummer As String
Application.DisplayAlerts = False
ZählerDatei = FreeFile
Open Path For Binary Access Read Write Lock Read Write As #ZählerDatei
On Error GoTo 0
TempNummer = Space(LOF(ZählerDatei))
Get #ZählerDatei, , TempNummer
Seek #ZählerDatei, 1
Put #ZählerDatei, , CStr(Val(TempNummer + 1))
Close #ZählerDatei
Application.DisplayAlerts = True
MsgBox "Neue Nummer: " & CStr(Val(TempNummer + 1))
End Sub

Hier ist das Problem, dass es auf C-Laufwerk und bei einem User gut funktioniert. Ich habe das Formular mit der Txt-Datei im Netzlaufwerk stellen, doch hier ist mir aufgefallen, dass wenn mehrere User im selben Moment auf die Schaltfläche drücken, die selbe Nummer mehrmals vergeben wird, was ja nicht sein darf.
Kann man diesen Skript so umbauen, dass die Nummer nur einmal vergeben wird und das die doppelte Vergabe somit verhindert werden kann?
Würde mich auch auf andere Vorschläge / Ideen freuen...
Vielen Dank und LG
Urmila

1
Beitrag zum Forumthread
Beitrag zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: einmalig Fortlaufende Nummer aus txt-Datei
05.04.2016 01:23:24
fcs
Hallo Urmila,
ich habe hier im Archiv etwas gefunden:
https://www.herber.de/forum/archiv/1360to1364/1363810_Abfrage_ob_Dateien_geoeffnet_sind.html#1363810
Danach müsstets du dein Makro etwa wie folgt umstricken.
Bleibt die Frage, ob das Betriebssystem des Netzwerkes schnell genug den Statuswechsel (Open/Closed) verabeitet und die geänderte Datei speichert. Denn lokal spielt sich das Öffnen/Speichern/Schliessen ja in Sekundenbruchteilen ab.
Gruß
Franz
Option Explicit
Public Const Path = "C:\Users\Public\Test\Nummer.txt"
Sub FortlaufendeNummer()
Dim ZählerDatei As Integer, TempNummer As String
If IsFileOpen(strFullPathFileName:=Path) Then
MsgBox "Text-Datei mit Nummer ist zur Zeit geöffnet." & vbLf & vbLf _
& "Bitte in ein paar Sekunden nochmals probieren.", _
vbOKOnly, "Fortlaufende Nummer holen"
Else
Application.DisplayAlerts = False
ZählerDatei = FreeFile
Open Path For Binary Access Read Write Lock Read Write As #ZählerDatei
TempNummer = Space(LOF(ZählerDatei))
Get #ZählerDatei, , TempNummer
Seek #ZählerDatei, 1
If TempNummer = "" Then TempNummer = "10000"   'Startnummer setzen
Put #ZählerDatei, , CStr(Val(TempNummer + 1))
Close #ZählerDatei
Application.DisplayAlerts = True
MsgBox "Neue Nummer: " & CStr(Val(TempNummer + 1))
End If
End Sub
'Diese Function einem allgemeinen Modul der Datei plazieren
' https://www.herber.de/forum/archiv/ _
1360to1364/
_
1363810_Abfrage_ob_Dateien_geoeffnet_sind.html#1363816
Public Function IsFileOpen(strFullPathFileName As String) As Boolean
'// VBA version to check if File is Open
'// We can use this for ANY FILE not just Excel!
'// Ivan F Moala
'// http://www.xcelfiles.com
Dim hdlFile As Long
'// Error is generated if you try
'// opening a File for ReadWrite lock >> MUST BE OPEN!
On Error GoTo FileIsOpen:
hdlFile = FreeFile
Open strFullPathFileName For Random Access Read Write Lock Read Write As hdlFile
IsFileOpen = False
Close hdlFile
Exit Function
FileIsOpen:
'// Someone has it open!
IsFileOpen = True
Close hdlFile
End Function

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige