Live-Forum - Die aktuellen Beiträge
Datum
Titel
29.03.2024 13:14:12
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
844to848
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
844to848
844to848
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Nutzerkreis einschränken - aber wie?!

Nutzerkreis einschränken - aber wie?!
08.02.2007 07:47:05
Till
Hallo Leute,
ich bin gerade dabei ein kl. Tool zu schreiben, mit dem man aus dem lokalen Netzwerk Daten (im Txt-Format) im Hintergrund importieren kann und sich dann in einer Listbox auf einer Userform darstellen lässt.
Mir fiel dabei gerade auf, dass es evtl. zu Problemen kommt, wenn mehrere Nutzer gleichzeitig versuchen, auf die selben Datensätze zuzugreifen.
Jetzt würde ich also gerne eine Art Sperre einbauen, die bemerkt, wenn dieselbe Datei bereits von anderen Nutzern geöffnet ist, bzw. dieses erst gar nicht zulässt. Evtl. soll (falls möglich) ein weiterer Nutzer bereits daran gehindert werden sich in dem entsprechenden Netzwerkpfad aufzuhalten, wenn dort bereits ein anderer Nutzer aktiv ist!
Geht das? Wie macht man das? Hier mal die Abfrage, die für den Nutzer die Daten normalerweise einlesen lassen (Die echten Pfade hab ich dabei auf einem separaten, versteckten Sheet stehen):


Option Explicit
Private Const cPath As String = "\\172.16.3.3\archiv_video\Polling Data\"   'Konstante Pfadvorgabe
Sub Abfrage(ByVal SubFolder As String)
Dim strFile As String
Dim objName1_1 As Range
Dim rngF1_1 As Range
Dim rngK1_1 As Range
Dim rngUnion1_1 As Range
Dim MyWidth As Single, MyHeight As Single
Dim NumWide As Long
Dim iChtIx As Long, iChtCt As Long
Dim Zeile2 As Integer, MyList(2836, 8), r As Integer, wksListe As Worksheet
If Not ActiveWorkbook Is ThisWorkbook Then ActiveWorkbook.Close False
    strFile = cPath & SubFolder & Format(ThisWorkbook.Sheets("Tabelle1").Range("a1"), "yyyymmdd") & "_0" & ".txt"
    If Dir(strFile) = "" Then
        MsgBox "Keine Messdaten zu diesem Datum vorhanden", vbInformation
        Exit Sub
    End If
On Error GoTo ErrExit
 GetMoreSpeed
    Workbooks.OpenText _
        Filename:=strFile, _
        DataType:=xlDelimited, _
        Semicolon:=True, _
        FieldInfo:=Array(Array(1, 1), _
        Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), Array(7, 1), Array(8, 1), _
        Array(9, 1), Array(10, 1), Array(11, 1), Array(12, 1), Array(13, 1), Array(14, 1), Array(15 _
        , 1), Array(16, 1), Array(17, 1), Array(18, 1), Array(19, 1), Array(20, 1), Array(21, 1), _
        Array(22, 1), Array(23, 1), Array(24, 1)), DecimalSeparator:=".", _
        ThousandsSeparator:=",", TrailingMinusNumbers:=True
' usw.
'.....


Dann noch der Button zur Abfrage:


Private Sub CommandButton9_Click()
    If ComboBox2.ListIndex > 0 Then
         ListBox1.Clear
        Run "Abfrage", ComboBox2.List(ComboBox2.ListIndex, 1)
    End If
End Sub


Hoffentlich ist das lösbar!
Danke schon mal!
Gruß Till

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Nutzerkreis einschränken - aber wie?!
08.02.2007 08:57:40
Till
Hallo Heinz,
vielen Dank erst mal!
Stimmt schöne Lösung! Hätte ich eigentlich auch selber finden können ! ;-)
Aber genau gesagt passt sie nicht direkt zu meinem Problem.
Ich lasse ja TXT-Dateien in Excel einlesen und will verhindern, dass diese doppelt geöffnet werden.
Der Code von Peter Haserodt funktioniert leider für TXT-Dateien nicht. Bei geöffneter TXT-Datei kommt - genauso wie bei geschlossener Datei - da auch die Meldung "FALSCH"!
Heißt das im Umkehrschluss, dass es egal ist, ob mehrere Nutzer im Netz gleichzeitig auf eine TXT-Datei zugreifen?
Dann wäre mein Problem ja überhaupt nicht vorhanden und bereits gelöst?!!
Gruß Till
Anzeige
AW: Nutzerkreis einschränken - aber wie?!
08.02.2007 10:31:39
haw
Hallo Till,,
ich habe gar nicht so genau hingeschaut und daher nicht bemerkt, dass es Textdateien sind.
Mit der OpenText-Methode ist es meines Wissens egal, ob mehrere darauf zugreifen. Außerdem ist es - außer bei sehr großen Dateien - durch die große Geschwindigkeit des Einlesens nicht so leicht möglich, dass man sich gegenseitig stört.
Der Code von Peter gibt auch richtig "WAHR" aus, wenn die Textdatei in Excel geöffnet ist, nicht jedoch, wenn sie durch ein anderes Programm oder mit der OpenText-Methode geöffnet wurde.
Ich lasse die Frage offen, vielleicht weiß jemand Genaueres.
Gruß Heinz
Anzeige
AW: Nutzerkreis einschränken - aber wie?!
08.02.2007 13:10:55
Uduuh
Hallo,
ich würde nicht OpenText sondern z.B.
open strfile for Input as #1
benutzen, den Inhalt der .txt in ein Array einlesen und die Datei wieder schließen. Das dauert nur Millisekunden. Ist allerding ein höherer Programmieraufwand.
Gruß aus’m Pott
Udo

AW: Nutzerkreis einschränken - aber wie?!
08.02.2007 16:25:33
Till
Hallo Udo,
auch ne nette Idee, ist mir aber leider noch nicht ganz geläufig!
Kannst Du mal ein kurzes Beispiel geben.
Evtl. beschleunigt das ja mein Makro wirklich! Teilweise sind die TXT-Dateien nämlich bis zu 1000 Zeilen groß und das dauert....
Gruß Till
P.S.: übrigens gefällt mir auch Deine Homepage! ;-)
Anzeige
AW: Nutzerkreis einschränken - aber wie?!
08.02.2007 17:03:53
Rudi
Hallo,

Sub readCSV()
Dim strTxt As String, myarr, lngL As Long, strDELIM As String
strDELIM = ";"'********Trennzeichen*********
Open "n:\test\daten.txt" For Input As #1'*****ANPASSEN********
Do Until EOF(1)
Line Input #1, strTxt
myarr = Split(strTxt, strDELIM)
Range(Cells(lngL, 1), Cells(lngL, UBound(myarr) + 1)) = myarr
lngL = lngL + 1
Loop
Close #1
End Sub

Gruß
Rudi
Eine Kuh macht Muh, viele Kühe machen Mühe
AW: Nutzerkreis einschränken - aber wie?!
08.02.2007 18:12:47
Till
Hallo Rudi,
danke für den Code.
Den kann ich aber leider so nicht einsetzen, da ich hier variable Dateinamen brauche.
Die Pfade dazu stehen in einem separaten Blatt.
In dem Hauptcode steht bei mir z.Zt. das:
Option Explicit
Private Const cPath As String = "C:\My Autoscope\Polling Data\" 'Konstante Pfadvorgabe
Sub Strasse(ByVal SubFolder As String)
Dim strFile As String
Dim objName1_1 As Range
Dim rngF1_1 As Range
Dim rngK1_1 As Range
Dim rngUnion1_1 As Range
Dim MyWidth As Single, MyHeight As Single
Dim NumWide As Long
Dim iChtIx As Long, iChtCt As Long
Dim Zeile2 As Integer, MyList(2836, 8), r As Integer, wksListe As Worksheet
If Not ActiveWorkbook Is ThisWorkbook Then ActiveWorkbook.Close False
strFile = cPath & SubFolder & Format(ThisWorkbook.Sheets("Tabelle1").Range("a1"), "yyyymmdd") & "_0" & ".txt"
If Dir(strFile) = "" Then
MsgBox "Keine Messdaten zu diesem Datum vorhanden", vbInformation
Exit Sub
End If
On Error GoTo ErrExit
GetMoreSpeed
Workbooks.OpenText _
Filename:=strFile, _
DataType:=xlDelimited, _
Semicolon:=True, _
FieldInfo:=Array(Array(1, 1), _
Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), Array(7, 1), Array(8, 1), _
Array(9, 1), Array(10, 1), Array(11, 1), Array(12, 1), Array(13, 1), Array(14, 1), Array(15 _
, 1), Array(16, 1), Array(17, 1), Array(18, 1), Array(19, 1), Array(20, 1), Array(21, 1), _
Array(22, 1), Array(23, 1), Array(24, 1)), DecimalSeparator:=".", _
ThousandsSeparator:=",", TrailingMinusNumbers:=True
'Neues Tabellenblatt einfügen und Umbenennen der beiden Blätter
Sheets.Add
With Excel.Application.Worksheets(1)
.Name = "div_Diagramme"
End With
With Excel.Application.Worksheets(2)
.Name = "Wertetabelle"
End With
Und dann kommt dann noch der Code zum Aktivieren der Userform:
Option Explicit
Dim blnAction As Boolean

Private Sub UserForm_activate()
Dim lngRow As Long, lngLast As Long
If IsDate(ThisWorkbook.Sheets("Tabelle1").Range("A1")) Then
DTPicker1 = ThisWorkbook.Sheets("Tabelle1").Range("A1")
Else
DTPicker1 = Date
End If
'Combobox2 füllen
blnAction = False
With ComboBox2
.ColumnCount = 2
.ColumnWidths = "170pt;0pt"
.HideSelection = False
.AddItem "Auswahl des Straßenquerschnittes"
lngLast = Application.Max(ThisWorkbook.Sheets("DATA").Cells(Rows.Count, 1).End(xlUp).Row, 2)
For lngRow = 2 To lngLast
.AddItem ThisWorkbook.Sheets("DATA").Cells(lngRow, 1)
.List(.ListCount - 1, 1) = ThisWorkbook.Sheets("DATA").Cells(lngRow, 2)
Next
ComboBox2.ListIndex = 0
End With
blnAction = True
End Sub

Durch den Klick auf den Button werden dann die Daten (nach vorherigem Auswahl des Datums-> danach richtet sich auch der Name der einzulesenden Datei) in die Listbox der Userform eingelesen.

Private Sub CommandButton9_Click()
If ComboBox2.ListIndex > 0 Then
ListBox1.Clear
Run "Strasse", ComboBox2.List(ComboBox2.ListIndex, 1)
End If
End Sub

Also leider nicht ganz so trivial!
Gruß Till
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige