VBA: Anzeige und bearbeiten der aktiven Zelle mit Userform durch Doppelklick
#1
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
Top
#2
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
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Top
#3
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
Top
#4
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


Angehängte Dateien
.xlsm   TextboxGross.xlsm (Größe: 15,65 KB / Downloads: 38)
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
[-] Folgende(r) 1 Nutzer sagt Danke an RPP63 für diesen Beitrag:
  • Gigbert62
Top
#5
Thumbs Up 
Hi Ralf,
genial ... Genau so dachte ich mir das.

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

Viele Grüße

Dirk
Top
#6
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.
Gruß Atilla
Top
#7
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
Top
#8
Hallo,

ein Versatz geht z.B. mit Offset()

Tetxbox2 = ActiveCell.Offset(0, -2).Value  'bedeutet die aktive Zelle zwei Spalten nach links versetzen
Gruß Atilla
[-] Folgende(r) 1 Nutzer sagt Danke an atilla für diesen Beitrag:
  • Gigbert62
Top
#9
.. und klappt natürlich Smile ....

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

Gruß
Dirk
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste