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

VBA - Zugriff mehrerer Anwender auf zentrales XLS

VBA - Zugriff mehrerer Anwender auf zentrales XLS
12.10.2018 10:06:51
Manuel
Hallo Herr Herber,
hallo liebes Forum,
vielen Dank erstmal für die Bereitstellung dieses tollen Forums. Die vielen Beiträge hier, haben mir schon bei einigen Problemen diverse Lösungsansätze aufgezeigt. Heute habe ich ein Problem, bei dem ich zwar in Ansätzen schon Lösungen gefunden habe, diese haben mich aber noch nicht vollends zufrieden gestellt.
Zuerst möchte ich mein Problem kurz schildern:
Wir haben hier 1000ende xls-Dateien, welche automatisch über einen vorgelagerten Prozess generiert werden. Die Dateien haben inhaltlich immer den gleichen Aufbau, sind aber inhaltlich schon halbwegs komplex. Beim Öffnen der Datei, wird die Datei für den Endanwender benutzergerecht aufgebaut. Das bedeutet, es werden Felder umformatiert, neue Tabellen generiert und Formeln neu berechnet, da die Daten vorher per ODBC flach in die Datei geschrieben wurden.
U.a. gibt es nun eine neue Anforderung. Zu einem Produkt (ein Produkt bedeutet immer eine xls-Datei) soll beim Öffnen der Datei aus einer zentralen Datei immer ein Abschlag ermittelt werden. Platt gesagt bedeutet dies beim Öffnen einer der vielen Dateien muss aus einer zentralen Datei gelesen werden.
Dazu hatte ich nun geforscht und hatte 3 verschiedene Ansätze gefunden:
1. Ansatz:
INDEX(\'Pfad\[xls-Datei.xlsm]Tabelle1\'!$B:$B;VERGLEICH($A2;\'Pfad\[xls-Datei.xlsm]Tabelle1'!$A:$A;0))
2. Ansatz
Per AdoDB einen SQL absetzen. Also so was in der Art:
Dim SQL As String
Dim Con As String
On Error GoTo errorhandler
If ((GetAttr(Path) And vbDirectory) vbDirectory) Then
SQL = "SELECT" & SelectString & " FROM [" & Table & "$" & SourceRange & "] " & WhereString
If Mid(Path, InStrRev(Path, ".") + 1) = "xls" Then
Con = "Provider=Microsoft.Jet.OLEDB.4.0;" & "Extended Properties=Excel 8.0;" & "Data Source=" & Path & ";"
ElseIf Mid(Path, InStrRev(Path, ".") + 1) Like "xls?" Then
Con = "Provider=Microsoft.ACE.OLEDB.12.0;" & "Extended Properties=""Excel 12.0;HDR=YES"";" & "Data Source=" & Path & ";" & "MODE=READ;"
Else
GoTo errorhandler
End If
Set ExcelTable = CreateObject("ADODB.Recordset")
ExcelTable.Open SQL, Con, 3, 1
Exit Function
End If
errorhandler:
Set ExcelTable = Nothing
3. Ansatz
GetValue = ExecuteExcel4Macro(arg)
(Scheint mir relativ langsam zu sein, daher habe ich das noch nicht näher betrachtet.)
Im Prinzip, muss ich mit einer ID immer nur maximal eine Zeile auslesen. Eigentlich wollte ich den zweiten Ansatz (AdoDB und SQL) verfolgen, habe aber dabei nun die Problematik, dass die Datei scheinbar immer in einem schreibenden Modus geöffnet wird. Auch dann wenn ich die Option "Mode=Read" mitgebe.
Da ich einen relativ großen Anwenderkreis habe (größer 100 Personen), hätte ich die Befürchtung, dass es über kurz oder lang, Zugriffsprobleme auf die zentrale Datei xls-Datei gibt.
Die zentrale xls-Datei in eine echte DB zu wandeln ist mir als Lösungsansatz bewusst, allerdings scheint mir der Aufwand recht hoch, zumal ich ja eigentlich nur aus der Datei lesen möchte? Und ich ja eigentlich auch eine Option dafür habe, die aber scheinbar ignoriert wird.
Könnt Ihr mir an dieser Stelle weiterhelfen? Oder habt Ihr noch andere Lösungsansätze?
Für Eure Unterstützung schon mal vielen Dank im voraus.
Mit freundlichen Grüßen
Manuel

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

Betreff
Datum
Anwender
Anzeige
AW: VBA - Zugriff mehrerer Anwender auf zentrales XLS
12.10.2018 12:25:51
EtoPHG
Hallo,
Die "zentrale Datei" einfach im Read-Only Mode öffnen. Dann gibst dann müssten deine "Befürchtung, dass es über kurz oder lang, Zugriffsprobleme auf die zentrale Datei xls-Datei gibt" verschwinden.
Gruess Hansueli
AW: VBA - Zugriff mehrerer Anwender auf zentrales XLS
12.10.2018 12:42:10
Manuel
Hallo Hansueli,
vielen Dank erstmal, dass Du dich des Themas annimmst. Kannst Du mir auch sagen, wie ich die Datei im ReadOnly-Mode öffne?
Ich dachte, dass ich mit "Mode=Read" den ReadOnly-Modus angegeben hätte. Dem ist aber nicht so...
Hier der Vollständigkeit halber der gesamte Parameter nochmal:
Con = "Provider=Microsoft.ACE.OLEDB.12.0;" & "Extended Properties=""Excel 12.0;HDR=YES"";" & "Data Source=" & Path & ";" & "MODE=READ;"
Anzeige
AW: VBA - Zugriff mehrerer Anwender auf zentrales XLS
12.10.2018 12:44:20
Manuel
...gibt es denn noch einen anderen Parameter?
Nicht OLEDB, sondern Workbook.Open! (owT)
12.10.2018 13:22:14
EtoPHG

AW: Nicht OLEDB, sondern Workbook.Open! (owT)
12.10.2018 13:27:31
Manuel
Hi,
wenn möglich möchte ich ohne die Workbook.Open-Methode arbeiten....sorry, dass hatte ich vergessen anzugeben.
1. Um das Flackern beim Öffnen zu unterbinden (ich weiß, dass man das mit ScreenUpdating etc. unterbinden kann...)
2. Scheint es mir langsamer zu sein (wenn auch nicht all zu viel...)
3. Leuchtet es mir nicht ein, dass die Methode Workbook.Open lesend öffnen kann, aber ein SQL mit OLEDB nicht...
4. Würde ich gerne lernen, wie es geht, wenn es geht.... :)
Viele Grüße und Danke.
Manuel
Viele Grüße
Manuel
Anzeige
AW: Nicht OLEDB, sondern Workbook.Open! (owT)
12.10.2018 13:43:21
EtoPHG
Hallo Manuel,
1. Da hast du die Lösung schon.
2. Dem Schein kann man oft nicht vertrauen. Warum sollte ein zusätzlich Software-Layer (OLEDB) schneller sein, als Standard-Excel?
3+4. Frag Microsoft warum das so ist.
Die "zentrale Datei" könnte man ja z.B. im Hintergrund über ein AddIn öffnen. Dann wären diese Referenzdaten immer (in-memory) verfügbar und müssten nicht jedesmal wieder geöffnet werden!
Gruess Hansueli
AW: Nicht OLEDB, sondern Workbook.Open! (owT)
12.10.2018 13:27:43
Manuel
Hi,
wenn möglich möchte ich ohne die Workbook.Open-Methode arbeiten....sorry, dass hatte ich vergessen anzugeben.
1. Um das Flackern beim Öffnen zu unterbinden (ich weiß, dass man das mit ScreenUpdating etc. unterbinden kann...)
2. Scheint es mir langsamer zu sein (wenn auch nicht all zu viel...)
3. Leuchtet es mir nicht ein, dass die Methode Workbook.Open lesend öffnen kann, aber ein SQL mit OLEDB nicht...
4. Würde ich gerne lernen, wie es geht, wenn es geht.... :)
Viele Grüße und Danke.
Manuel
Viele Grüße
Manuel
Anzeige

311 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige