Excel VBA: Automatischer Zähler ohne Speicherung

Hi,
ich möchte beim Öffnen einer Exceldatei, dass eine andere Exceldatei „Mappe2“ geöffnet wird, dort z.B. das Tabellenblatt „DH_BRD“ gewählt wird und in der Zelle „A1“ der Wert um 1 erhöht wird.

Ich möchte mir so einen automatischen Zähler für die Ausgangsdatei ertsellen.
Ich benötige denk ich diese zusätzliche Exceldatei (Mappe2) da die Ausgangsdatei nur geöffnet wird aber NICHT gespeichert wird!!!

Mappe2 und Ausgangsdatei liegen bei uns auf unserem Server „O“. Beide Dateien beinhalten mehrere Tabellenblätter.

Excel meckert mit dieser Fehlermeldung:
„Laufzeitfehler 9“
und markiertGELB die Zeile:
Sheets(„DH_BRD“).Activate

Code:
Private Sub Workbook_Open()
Workbooks.Open Filename:=„O:\LC\Mappe2.xls“
Workbooks(„Mappe2.xls“).Activate
Sheets(„DH_BRD“).Activate
Range(„A1“).Value = Range(„A1“).Value + 1
ActiveWorkbook.Save
Application.DisplayAlerts = False
ActiveWorkbook.SaveAs Filename:= _
„O:\LC\Mappe2.xls“, FileFormat:=xlNormal _
, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, _
CreateBackup:=False
ActiveWorkbook.Close
End Sub

Grüße
Lombe

Hallo Lombe,

Ich möchte mir so einen automatischen Zähler für die
Ausgangsdatei ertsellen.
Ich benötige denk ich diese zusätzliche Exceldatei (Mappe2) da
die Ausgangsdatei nur geöffnet wird aber NICHT gespeichert
wird!!!

na und, kannst doch beim Öffnen einen Zähler in einer Zelle der Mappe oder in der Mappe selbst hochzählen und die mappe kurz saven. Ich verstehe nicht wozu die zweite Datei notwendig ist.

Zum Code, ich mag Activate und Select nicht, probier mal diesen Code.
Wenn da Fehler kommen, sag welche. Ggfs. schau mal ob die Namen des Blattes korrekt geschrieben ist.

Private Sub Workbook\_Open()
Workbooks.Open Filename:="O:\LC\Mappe2.xls"
With Workbooks("Mappe2.xls").Worksheets("DH\_BRD").Range("A1")
 .Value = .Value + 1
End With
ActiveWorkbook.Close savechanges:=True
End Sub

Gruß
Reinhard

Hallo Reinhard,
danke für schnelle Antwort. Bei uns im Haus nutzen mehrere Mitarbeiter ein Excel Berechnungs-Tool (Ausgangsdatei). Sie greifen dabei über eine Verknüpfung auf das Tool, geben ein paar Daten/Eingangswerte ein und entnehmen am Bildschirm das Ergebnis und schließen danach die Datei (ohne Speicherung!). Diese Mitarbeiter haben nämlich keine Berechtigung auf „schreiben“ von Dateien auf dem Server wo die Ausgangsdatei liegt! Das Tool soll zu dem beim Öffnen auch stets den gleichen Stand bzw. Ausgangssituation an Eingangswerten haben sprich ohne die Einträge vom letzten Mitarbeiter. Das Erstelldatum der Exceldatei darf sich zusätzlich auch nicht ändern.
Ich (als Administrator/Entwickler dieses Tools) möchte aber eben festhalten wie viele Mitarbeiter bzw. wie oft wird überhaupt das Tool geöffnet/genutzt, also mehr für STATISTISCHE ZWECKE.
Ich hatte sogar Anfangs vor, die Anzahl der Klicks oder Anzahl der Enter-Befehle innerhalb der Ausgangsdatei zu zählen, da es ja i.d.R. vorkommt, dass der Mitarbeiter morgens das Tool erstmals öffnet, im Laufe des Tages aber mehrmals für Berechnungen nutzt und erst Abends schließt.
Ich glaube aber, das Tool würde dann zu langsam werden, da bei jedem Klick/Enter ca. 1 sek. lang der Code im Hintergrund ausgeführt wird… was natürlich nervt

DEIN „WITH BEFEHL“ HAT GEKLAPPT!!! ICH WUSSTE ES FEHLT NICHT MEHR VIEL IM CODE.

Hallo Lombe,

danke für die Ausführlichkeit und Verständlichkeit, jetzt blicke ich durch was da vorliegt.

Ich hatte sogar Anfangs vor, die Anzahl der Klicks oder Anzahl
der Enter-Befehle innerhalb der Ausgangsdatei zu zählen, da es
ja i.d.R. vorkommt, dass der Mitarbeiter morgens das Tool
erstmals öffnet, im Laufe des Tages aber mehrmals für
Berechnungen nutzt und erst Abends schließt.
Ich glaube aber, das Tool würde dann zu langsam werden, da bei
jedem Klick/Enter ca. 1 sek. lang der Code im Hintergrund
ausgeführt wird… was natürlich nervt

In Vba kannste locker jeden Zellenklick, also die Anwählung einer Zelle auswerten und auch zählen. Enter kannst du nicht direkt auswerten, nur dann wenn der zellinhalt geändert wurde, oder aufwendig mit API, die auswertet welche taste gedrückt wurde.

Daß der Code zu lange dauert, naja, Select, Activate kostet schonmal unnötige Zeit und dies und das. Zeig mal den Code, vielleicht kann man ihn „tunen“.

DEIN „WITH BEFEHL“ HAT GEKLAPPT!!! ICH WUSSTE ES FEHLT NICHT
MEHR VIEL IM CODE.

Das heißt, die Anfrage ist gelöst?

Gruß
Reinhard

Hallo Reinhard,
sorry, war längere Zeit wegen Umzug kaum online.

Ja, Problem ist mittlerweile weitesgehend gelöst. Die Leute aus dem Vertrieb greifen wie erwähnt über Verknüpfungen auf eines meiner Tools auf dem Server,
klicken mehrmals tagsüber im Tool herum und schließen entweder sofort oder abends die genutzten Tools. Hab somit mit der „Before Close“ Deklaration eine Zähler-Mappe öffnen lassen (hier im Code die Mappe BRD) und füge dort im Tabellenblatt „DH_BRD“ in Spalte 3 (Anzahl der Openings), Spalte daneben die Anzahl der Klicks.
Diese beiden Werte werden für jeden Folgetag eine Zeile drunter geschrieben (siehe Code).
Damit kann ich sehen an welchen Wochentagen stark/weniger die Nutzung erfolgte bzw. eine Monatsübersicht ist ja somit auch möglich.

Ich musste nur noch die Zähler Exceldatei (hier BRD) unter „Mappe freigeben“ freigeben, damit mehrere Leute aus dem Vertrieb gleichzeitig in die Mappe reinschreiben können… kann ja sein, dass zur selben zeit im Haus ein Excel Tool gleichzeitig geschlossen wird…

Ich will mit dieser Statistik übrigens nicht nur erkennen welche Tools wie oft und wann geöffnet wurden (quasi für mein Ego :wink: sondern auch rauslesen für welche Tools lohnt sich evtl. eine Weiterentwicklung der Tools mit neuen Feautures etc.

z.B. Viele Klicks -> weitere neue Features entwickeln
oder fast noch wichtiger, aufwendig entwickelte Tools mit wenig Klicks -> Entwicklungsstop

Hier der Code der in „Diese Arbeitsmappe“ in den Tools liegt:

Public b As Long

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)

b = b + 1

End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim i As Long
Application.ScreenUpdating = False
Workbooks.Open Filename:=„O:\10\LC\BRD.xls“

i = DateDiff(„d“, „09.12.2010“, Date)’

With Workbooks(„BRD.xls“).Worksheets(„DH_BRD“).Cells(i + 3, 3)
.Value = .Value + 1
End With

With Workbooks(„BRD.xls“).Worksheets(„DH_BRD“).Cells(i + 3, 4)
.Value = .Value + b
End With

Application.DisplayAlerts = False
ActiveWorkbook.SaveAs Filename:=„O:\10\LC\BRD.xls“
ActiveWorkbook.Close
Application.ScreenUpdating = True
End Sub

Danke nochmal für die Hilfe letztens

Gruß
Lombe