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

Schreibgeschütztes workbook

Schreibgeschütztes workbook
21.03.2016 19:38:12
Dennis
Hallo,
ich habe gerade ein Projekt, bei dem User über ein Userform bestimmte Daten angeben können. Bei klick auf den Absenden-Button wird dann eine anderes workbook (datenbank) minimiert geöffnet und die eingegeben daten dort eingetragen.
das funktioniert auch alles ohne probleme. da es aber auch vorkommen kann, dass die datei von mehreren usern gleichzeitig genutzt wird/werden soll. da fehlermeldungen selbstverständlich ausgeschaltet sind, werden derzeit die eingaben des zweiten users nicht gespeichert, da die "datenbank" ja nur schreibgeschützt geöffnet wird.
ich hatte also die idee, dass ich von der datenbank-datei einfach mehrere exemplare bereitstelle ("datenbank1.xlsm", "datenbdank2.xlsm", usw.).
die datenbank wird dann in vba folgendermaßen geöffnet (vereinfachter code):
dim i as integer
i=1
on error goto fehler
workbooks.open ("c:\pfad....\datenbank" & i & ".xlsm")
'im folgenden werden dann die eingaben erfasst und in die tabellen geschrieben sowie
'die tabelle gespeichert und wieder geschlossen
exit sub
fehler:
i=i+1
resume
end sub
in meinem kopf geht excel also wenn es die meldung bekommt, dass die datei bereits geöffnet ist in den abschnitt "fehler", dort wird i um 1 erhöht und er spring wieder hoch und "sollte" die datei dokument2 öffnen und da hinein schreiben. ich habe selbstverständlich alle zellenaufrufe mit dem pfad mit der variable ersetzt.
jetzt das problem: so einfach scheint es nicht zu sein, denn nach wie vor kann nur ein user gleichzeitig arbeiten und alle anderen werden nicht gespeichert, als hätte ich die fehlerbehandlung gar nicht eingebaut. wo ist mein denk- bzw codefehler? der zweite user bekommt keine fehlermeldung und es wird nach wie vor dokument1 geöffnet, obwohl dieses schreibgeschützt ist.

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Schreibgeschütztes workbook
21.03.2016 20:01:13
Michael
Hi Dennis,
Excel ist halt KEINE Datenbank!
Mehrere Kopien führen nur dazu, daß keiner mehr nachvollziehen kann, was wer wann eingegeben hat.
Die grundlegende Frage ist: wie aktuell müssen die Daten in der "datenbank" sein? Genügt es, die einmal in der Stunde oder gar nur einmal am Tag zu aktualisieren?
Schöne Grüße,
Michael

AW: Schreibgeschütztes workbook
21.03.2016 20:17:30
Dennis
als erstes vielen dank für die schnelle antwort!
die daten wer etwas eingegeben hat etc werden über environ automatisch mit erfasst und in die tabelle geschrieben. das ist für meine zwecke auch völlig ausreichend.
um dem ganzen etwas kontext zu geben:
ich sammle vorschläge für einen firmennamen. und da mir keine datenbank zur verfügung steht, mache ich es halt über excel. mit einem user parallel funktioniert es ja auch exakt wie gewünscht. ich will excel bzw. vba halt nur verständlich machen, dass wenn er "datenbank i" öffnen will und diese bereits von jemand anderem geöffnet ist, er stattdessen "datenbank i+1" öffnen soll.
warum springt er in diesem fall nicht in meine fehlerbehandlung? wird diese "bereits geöffnet"-notification nicht als fehlermeldung erkannt? falls dem so ist, wie könnte ich das problem lösen.
dass excel kein vollwertiges datenbankprogramm ist, ist mir durchaus klar. aber für meine zwecke ist es durchaus ausreichend. ich wüsste halt nur gerne wie ich ihm den trigger gebe, dass er i einen hochzählt und dann das entsprechnde workbook öffnet.
und um deine abschließende frage zu beantworten, einmal pro stunde oder einmal am tag würde völlig reichen.

Anzeige
Workaround
22.03.2016 15:03:17
KlausF
Hallo Dennis,
die Vermutung liegt nahe, dass eine bereits geöffnete Datei (warum auch immer) mit
dem vorliegenden Code so nicht abgefragt werden kann. Vielleicht hilft folgender Workaround:
Setze z.B. die Zelle IV1 jeder Datei beim Öffnen über die Workbook_Open auf den Wert 1
Analog beim Schließen der Datei wieder auf 0
Frage jetzt VOR dem Öffnen jeder Datei den Wert ab und öffne nur dann wenn der Wert ungleich 1 ist.
Zur externen Abfrage gibt es hier verschiedene Makros.
Könnte vielleicht klappen.
Gruß
Klaus

AW: Workaround
22.03.2016 16:35:55
Dennis
das ist grundsätzlich eine gute idee, danke dafür.
das problem ist, dass der "geöffnet"-status einige sekunden über das schließen der datei hinaus bestehen bleibt. sprich jemand öffnet die datei, schließt sie wieder, ich bekomme wenn ich sie unmittelbar danach öffne aber immer noch die meldung "ist durch anderen nutzer gesperrt".
in deinem workaround würde das heißen, dass der wert der zelle schon wieder auf 0 wäre, die datei aber noch für einige sekunden gesperrt sein könnte. deshalb kommt das nicht in frage.
ich habe es inzwischen mal mit GetAttr(dateipfad) probiert. laut msdn sollte bei readonly dann der wert 1 ausgegeben werden. bei dieser methode gibt er mir aber immer den wert 32 aus, welcher aussagt, dass die datei seit der letzten sicherung geändert wurde. das ist allerdings schwachsinn, denn diese 32 gibt er mir immer aus, egal ob die datei gerade von jemandem geöffnet ist, geöffnet und geändert oder ob sie gar nicht geöffnet ist.das bedeutet GetAttr ist unbrauchbar :(
so komme ich also auch nicht weiter...

Anzeige
Verständnisproblem
22.03.2016 16:46:12
KlausF
Hallo Dennis,
ich verstehe Dein Argument nicht. Was macht es denn aus, wenn der „Geöffnet“-Status
einige Sekunden über das Schließen der Datei hinaus bestehen bleibt? Dann wird eben
die nächste Dateiversion geöffnet und geändert. Du wolltest doch nur ausschließen,
dass eine Datei doppelt geöffnet werden kann und das passiert doch damit nicht mehr.
Oder mache ich einen Denkfehler?
Gruß
Klaus

AW: Verständnisproblem
22.03.2016 18:33:51
Dennis
Was ich meinte war, dass die Datei ja dann trotzdem schreibgeschützt geöffnet wird, wenn sie erst unmittelbar vorher von jemand anderem geschlossen wurde.
aber ich habe schon eine lösung für das problem gefunden, hierfür vielen herzlichen dank an michael, dessen link hat mir weitergeholfen.

Anzeige
AW: Schreibgeschütztes workbook
22.03.2016 11:40:57
Dennis
Hat da niemand einen Tip für mich?
die Fehlerbehandlung an sich scheint zu funktionieren, das habe ich eben ausprobiert. leider scheint ein bereits geöffnetes workbook keinen "echten" fehler zu produzieren, die diese auslöst.
ich habe schon etwas mit application.workbooks(pfad+dateiname).readonly herumexperimentiert, jedoch bekomme ich da immer einen fehler, da durschaue ich die verlangte syntax nicht ganz. mit ....readonly=true (könnte man für eine if-abfrage nutzen) kommt er jedenfalls nicht klar.

AW: Schreibgeschütztes workbook
22.03.2016 15:45:14
Michael
Hi,
die offizielle Variante findest Du hier: https://support.microsoft.com/de-de/kb/291295
Das könnte man in eine Schleife verpacken á la
dim i as variant
i=""
while isfileopen("datenbank" & i)
if i="" then i=1 else i=i+1
wend
Abgesehen davon: die Eingabe eines FIRMENNAMENs in eine Userform zu packen, kommt mir vor, wie mit Kanonenkugeln auf Spatzen zu schießen.
Schöne Grüße,
Michael

Anzeige
AW: Schreibgeschütztes workbook
22.03.2016 18:49:33
Dennis
vielen dank!
ich hatte diese Lösung auch schon gesehen, da ich einige befehle darin aber nicht kannte bzw. nicht nachvollziehen konnte, habe ich zunächst die anderen methoden wie GetAttr und meine Fehlerbehandlung probiert, die aus mir teilweise unverständlichen Gründen nicht funktionierten. Habe den Code jetzt kopiert, angepasst und es funktioniert genau wie gewollt.
zu meinen Beweggründen, dies über ein Userform zu machen:
Wir haben über 1000 Mitarbeiter, jeder soll mehrere Vorschläge einreichen können. Es muss nachvollziehbar sein wer jeden vorschlag abgegeben hat, dies leiste ich über die environ userid-abfrage. über tausend papierformulare zu drucken und -viel schlimmer- hinterher auszuwerten wäre ein um ein vielfaches höherer aufwand als dass ich mich ein bisschen hinsetze und "programmiere". und einfach eine exceltabelle zur verfügung zu stellen würde wiederum jedem ermöglich die vorschläge der anderen einzusehen, was ebenfalls nicht gewollt ist.
so bleibt das papierformular nur für die paar einzelnen mitarbeiter, die absolut keinen zugang zu einem PC haben (reinigungskräfte etc.)
der restliche code war ja kein problem für mich, nur dieser blöde schreibschutz wollte nicht so wie ich, aber das hab ich ja jetzt auch hinbekommen.

Anzeige
Saubere Sache
23.03.2016 14:20:03
Michael
Hi Dennis,
wenn es funktioniert, ist es ja gut, aber so "ganz sauber" erscheint es mir dennoch nicht...
Wie wäre es, wenn Du an Deine Kollegen eine Datei weitergibst, die einzelne Text- (oder meinetwegen auch Excel -) Datein in einen bestimmten Ordner im Netz schreibt? Der Dateiname wird dabei nach dem Muster:
"NV" & username & format(date,"wieDuwillst") & format(time,"wieDuwillst") & ".txt oder .xlsx"
gestrickt (NV wie NamensVorschlag) und im Ordner H:\NVA (wie NamensvorschlagAblage) abgelegt.
Aus dem kannst Du dann periodisch alle Textdatein einlesen, samt Zeit und Username usw. und in Deine Haupttabelle schreiben. Es ist unmöglich, daß EIN user (es gibt ja sicher keine zwei mit gleichem Namen) eine Datei zu zwei GLEICHEN Zeitpunkten schreibt...
Schöne Grüße,
Michael
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige