Clever-Excel-Forum

Normale Version: VBA: Anzeige und bearbeiten der aktiven Zelle mit Userform durch Doppelklick
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo zusammen,
folgende Herausforderung (für erfahrene VBA Fachleute vermutlich recht einfach):

Ich möchte durch Doppelklick in die aktive Zelle das sich eine Userform öffnet, der Text aus der Zelle in der Userform angezeigt wird.
Ausserdem sollte der Text bearbeitbar sein, also Ändern usw.
Nach Bearbeitung soll der aktuelle Text in der Userform wieder in die aktive Zelle zurückgeschrieben werden.

Ich gehe mal davon aus das "Userform" die beste Möglichkeit ist, bin aber natürlich auch für andere Anregungen dankbar.

Ist die Frage ausreichend beschrieben?

Vielen Dank
Gruß .. Dirk
Hallo Dirk!
Ein, sagen wir mal, ungewöhnlicher Wunsch.
Warum die Zellenbearbeitung nicht gleich in der Tabelle?

Sei es drum, hier braucht es kein Userform, Code kommt ins Modul der Tabelle:

Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim NeuerWert
NeuerWert = Application.InputBox("Dann ändere mal!", "Quatsch", Target)
If Not NeuerWert = False Then Target = NeuerWert
Cancel = True
End Sub

Gruß Ralf
Hi Ralf,
danke für die super schnelle Antwort. Schon klar das der Wunsch ein wenig "komisch" ist.

Hintergrund ist eigentlich das ich einem Benutzer ermöglichen möchte längere Texte innerhalb einer Zelle (die jeweils aktive Zelle)
sowohl "besser" zu lesen als auch diesen Text "einfacher" zu verändern.

Dachte mir, da der Text doch länger sein kann und das in einer Zelle dann doch mal schlecht zu lesen ist, das ganze in einem "neuem" Fernster zu zeigen (daher die Userform), entweder durch Doppelklick auf die Zelle oder aber durch nen Command Button der dann ein Macro aufruft.

Dann sollte eben der Text aus der aktiven Zelle in der sich der Benutzer gerade befindet angezeigt werden und auch veränderbar sein.

Habe eben mal deinen Vorschlag ausprobiert, aber mache da wohl irgendwas falsch. Klappt nicht so wirklich.
Und ich glaube mit der Inputbox wird das wohl nicht ausreichen, oder kann man Text auch mehrzeilig darstellen?

Also, unter dem Strich geht es um die Benutzerfreundlichkeit bei lesen und Eingabe von Text In- und aus der aktiven Zelle.

Vielen Dank und Gruß
Dirk
Aha!  :19:
Dann macht das Userform Sinn.
Ich habe fpolgende Eigenschaften der Textbox geändert:
- Font: Schriftgröße
- Multiline: True
- Scrollbars: 2 (vertikal)

Code im Tabellenmodul:
Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
UserForm1.Show
Cancel = True
End Sub

Code im UserForm:
Code:
Private Sub UserForm_Initialize()
TextBox1 = ActiveCell
End Sub

Private Sub CommandButton1_Click()
ActiveCell = TextBox1
Unload Me
End Sub

Private Sub CommandButton2_Click()
Unload Me
End Sub

Datei im Anhang.

Gruß Ralf
Hi Ralf,
genial ... Genau so dachte ich mir das.

Nochmals vielen Dank für die prompte Hilfe ....

Viele Grüße

Dirk
Hallo zusammen,

ich würde das Anzeigen der userform auf Zellen mit Text bzw ohne Zahlen beschränken.
Denn sonst müsste man beim zurückschreiben Prüfungen einbauen.

Dann könnte auch mit ControlSource der Textbox gearbeitet werden.

Der Code hinter der Tabelle würde so aussehen:

Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Not IsNumeric(ActiveCell) Then
 UserForm1.Show
 Cancel = True
End If
End Sub

Die userform würde ich auf zwei Arten ohne Schaltflächen schließen.
Einmal so, wie ich sie auch geöffnet habe, mit einem Doppelklick in die Textbox und zum
Zweiten nach Nutzung der Enter-oder Tab-Taste.

Dazu muss folgender Code hinter die Tabelle


Code:
Private Sub TextBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
  Unload Me
End Sub

Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
  If KeyCode = 9 Then Unload Me 'diese Zeile wurde nachträglich korrigiert; Enter macht keinen Sinn, da sonst kein Zeilenumbruch möglich
End Sub

Private Sub UserForm_Initialize()
  TextBox1.ControlSource = ActiveCell.Address
End Sub


Damit es nicht untergeht, auf jeden Fall muss man wissen, dass Zahlen besonders behandelt werden müssen.
Hi Attila,
danke für den Hinweis, werde das auch mal ausprobieren.

Noch kurz eine weitere Frage .. auch an den Ralf vielleicht:

Würde gern noch 2 weitere Textboxen einbauen in denen mir der Inhalt der der beiden Zellen links von der aktiven Zelle angezeigt wird.
Abzeige reicht, da muss nicht geänder oder zurückgeschrieben werden.

Habe da auch schon ein bischen rumprobiert aber funzt nicht wirklich.

Vielleicht könnt Ihr mir da auch noch kurz Hilfestellung geben.

Vielen Dank und Gruß
Dirk
Hallo,

ein Versatz geht z.B. mit Offset()

Tetxbox2 = ActiveCell.Offset(0, -2).Value  'bedeutet die aktive Zelle zwei Spalten nach links versetzen
.. und klappt natürlich Smile ....

Man lernt dazu, prima .. und herzlichen Dank für die wirklich schnelle Hilfe ..

Gruß
Dirk