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.