Eingabeaufforderung beim Schließen des Dokuments?

Hallo liebe Community,

Folgendes Szenario:
Ich habe eine Excel-Tabelle, an der viele Leute arbeiten. Leider weiss hinterher keiner mehr, wer, wann, was geändert hat.
Meine idee für das wer und wann wäre jetzt ein Macro.
Dieses sollte beim schließen des Dokuments ein Fenster erscheinen lassen, wo der User seinen Namen einträgt.
Das Macro sollte dann auf einer extra Seite im Dokument den Namen in einer Zelle und das Datum + Uhrzeit in die Zelle daneben schreiben.
Das ganze sollte dann eine fortlaufende Liste werden, damit das ganze ein bisschen nachvollzogen werden kann.
(Ja das könnten die Leute auch einfach so per Hand machen aber ihr wisst ja wie die User sind… wenn kein „*ping* bitte tun sie jetzt das und das…“ kommt passiert da nix. ^^

Ich hab leider auch überhaupt keine Ahnung von VBA-Programmierung… deswegen bräuchte ich eine recht genaue Vorlage von dem Ganzen.

Vielen Dank im Vorraus.

kann leider auch nicht helfen…

Hallo nexum86,

ich habe ein fertiges Exceltool für Dich.
Wo soll ich es hinschicken?
Gruß,
Jochen

Juche!

am besten an [email protected]

Danke Jochen !

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Marco,

Excel ist nicht mein Themengebiet. Ich weiß aber, dass da VisualBasic integriert ist und wenn du das mit VisualBasic lösen möchtest musst du daran denken, dass es das berühmte X in den meisten Forms gibt. Das ist der FormClos-Dialog den du nutzen musst.

Ich habe dazu mal eine kleine Anwendung geschrieben, die aus zwei Forms besteht. Die erste Form würde deiner Excel-Tabelle entsprechen. Dort musst du das Form1_FormClosing-Event nutzen. Das heißt nichts anderes, als dass ein Klick auf dieses X das gewünschte Ereignis auslöst. Normal eben das Schließen der Anwendung analog Me.Close().

Über diesen Event kannst du aber mehr machen.
e.Cancel = True bricht das Schließen der Anwendung ab.Stattdessen öffne ich in meinem Programm das gewünschte Abfrageformular (hier Username). Das musst du halt vorher erzeugen (ggf. umbenennen).

Public Class Form1

Private Sub Form1_FormClosing(ByVal sender As System.Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles MyBase.FormClosing
'Verhindert, dass die Form sofort geschlossen wird
e.Cancel = True
'öffnet ein neues Form, in das man den Usernamen eingibt
Username.Show()
End Sub
End Class

Das ist der erste Teil der Aufgabe:
Im zweiten Teil hast du ein Form namens Username.
Um zu vermeiden, dass nun hier jemand das X klickt, stellen wir die Minimize-, Maximize- und FormClose-Dialoge erst gar nicht dar. (Wie steht im Code).
Außerdem gibst du der Form ein Eingabefeld = TextBox1
Auch hier musst du überlegen, wann – also bei welchem Event, was passieren soll.
Form_Load (hier Username_Load) weil deine Form Username heißt, enthält alle Befehle, die ausgeführt werden, wenn das Formular geladen wird. Weiter passiert noch nichts.
Du hast ein Fenster (=Form) ggf. mit Titelleiste aber ohne Dialoge und hast ein Eingabefeld. Mehr nicht.

Public Class Username

Private Sub Username_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

'Anweisung in TextBox1 schreiben = alles noch nur Optik
Me.TextBox1.Text = " Bitte Namen eingeben …"

'Alle Form Controls ausblenden
Me.MinimizeBox = False
Me.MaximizeBox = False
Me.ControlBox = False

'Oder gleich einen Boderstyle ohne Controls wählen
Me.FormBorderStyle = Windows.Forms.FormBorderStyle.None

End Sub

Ich habe mir das so vorgestellt, dass das nächste Ereignis (speichern der gewünschten Daten) passiert, wenn man seine Eingabe mit Enter abschließt.
Daher das TextBox1_KeyDown-Event.

So lange die was in die TextBox1 schreibst, veränderts du nur den Inhalt (mehr noch nicht). Erst indem du Enter drückst, passiert das, was der Code dafür vorsieht.
In meinem Programm erscheint eine Messagebox mit der Mitteilung „Programm geschlossen durch: Eingegebener Name um Datum und Uhrezeit“
Nachdem der OK-Button gedrückt wurde, wird die komplette Anwednung geschlossen.

Private Sub TextBox1_KeyDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TextBox1.KeyDown

If e.KeyCode = Keys.Enter Then
'Hier kommt die gewünschte Operation hin also speichern des Anwendernamens
'Ersatzweise eine MsgBox und danach wird die Anwendung geschlossen

MsgBox("Programm geschlossen duch: " & Me.TextBox1.Text & " um: " & Now, MsgBoxStyle.Information)

'Die Daten aus der MsgBox musst du noch weiterverabeiten.
Application.ExitThread()
End If
End Sub
End Class

Da ich dein Programm nicht kenne und wie Eingangs erwähnt mit Excel kaum was mache, ist es nun dein Job in die gewünschte Tabelle /Zelle zu schreiben.

Ich hoffe, das hilft dir weiter und war nicht am Thema vorbei.

LG
Stefan

PS: Die Darstellung von Quellcode ist hier nicht sonderlich toll. Falls die Antwort das ist was du sucht, den Quellcode aber im Original benötigst, schicke noch mal eine Anfrage, ich stelle dann das Projekt als Zip-File (Visuals basic 2008) für 8 Tage zum Download bereit und maile dir dann den Link.