Userform durch Klick auf Zelle aufrufen und mit anderen Zellinhalt füllen

Guten Abend allerseits,

Folgende Situation:

Ich habe in einer Excel-Datei eine Tabelle, in der sich eine Liste mit Fragen befindet.

Zu jeder Frage gibt es eine ausführliche Erläuterung (mehrzeilig, teilweise bis zu 30 Zeilen hoch) in einer zweiten Tabelle.

Ich möchte nun gerne die Frage anklicken (kein Hyperlink, sondern der Klick auf die Zelle soll das Ereignis auslösen).

Nach dem Klick auf die Zelle soll sich ein Userform öffnen, dessen Textinhalt aus der passenden Zelle (die Erläuterung steht in der gleichen Zelle wie die Frage -  z.B. Zelle A5 - nur im Tabellenblatt 2) angezeigt wird.

Die Userform soll so breit wie die Bildschirmauflösung es zulässt sein. Die Höhe soll so hoch sein, wie es der Text erfordert. Mit einem Klick auf X soll die Userform geschlossen werden können.

Kann mir jemand von euch sagen, wie ich das in VBA erstellen kann und wie ich diese Funktion dann mit der Zelle verküpfe (es soll ja mit allen Zellen im Fragebogen funktionieren.

Ich danke euch schon jetzt für eure Hilfe!

Viele Grüße Andreas

Annehmen
Annehmen
Hallo Andreas.

Na da hast Du ja was vor. :-)

Ich stimme Claus zu, die Userform generell so breit wie den Monitor zu machen ist keine gute Idee.
Ich denke mal es reicht den Text "passend" anzuzeigen, also quasi so wie er in der Zelle steht.

Klingt komisch, aber Du musst Dich zuerst von der Vorstellung trennen das Du den Text so wie Du ihn in einer Zelle siehst auch ausgelesen bekommst.... das ginge nur mit einem Screenshot. Ich sag mal die Stichworte "Zeilenumbruch" und "An Zellgröße anpassen".

Recht einfach wäre es wenn die Zelle so groß ist das Sie den Text komplett anzeigt, aber kleiner als der Bildschirm ist.
Dann kannst Du den Zelle einfach in die TextBox reindonnern und den Rest anpassen (lassen).

Mach Dir mal eine Userform, erstelle auf dieser eine TextBox und einen CommandButton und kopiere diesen Code in das Codemodul:


Option Explicit

Public MeinText As Range

Private Sub CommandButton1_Click()
  Unload Me
End Sub

Private Sub UserForm_Activate()
  With Me.TextBox1
    'Kein Rand
    .SelectionMargin = False
    'Nach links oben verschieben
    .Top = 3
    .Left = 3
    'Wie die Zelle einstellen
    .MultiLine = True
    .Width = MeinText.Width
    .Height = MeinText.Height
    .Value = MeinText.Value
    'Größe anpassen lasen
    .AutoSize = True
  End With
  With Me
    'Userform an die TextBox anpassen
    .Width = .Width - .InsideWidth + Me.TextBox1.Width + Me.TextBox1.Left * 2
    .Height = .Height - .InsideHeight + Me.TextBox1.Height + Me.TextBox1.Top * 2
  End With
End Sub

Private Sub UserForm_Initialize()
  With Me.CommandButton1
    'Aus dem sichtbaren Bereich schieben
    .Left = -.Width
    'Bei ESC auslösen
    .Cancel = True
  End With
  Set MeinText = ActiveCell
End Sub


Dann klick auf eine Zelle mit Text und starte die Userform, drück ESC um sie zu schließen.

Das wäre dann der Anfang.

Wenn Du jetzt in Deinem Fragekatalog klicken willst und dann die Userform mit dem Text aus dem anderen Blatt anzeigen lassen möchtest ist das auch nicht weiter schwierig:


Option Explicit

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  Dim Wo As Range
  'Nur bei einer Zelle
  If Target.Count > 1 Then Exit Sub
  'Die Zelle mit dem Text in dem anderen Blatt
  Set Wo = Sheets(2).Range(Target.Address) '           <= "Sheets(2)" anpassen
  'Userform laden
  Load UserForm1
  With UserForm1
    'Zelle zuweisen
    Set .MeinText = Wo
    'Anzeigen
    .Show
  End With
End Sub


Der Haken kommt nun mit dem Bildschirm, auf den kannst Du nur mit der Windows-API zugreifen...
Dazu kommt dann ggf. das Problem das heutzutage ein Rechner 2 Monitore hat / haben kann... auf welchem ist also die Form?
Die Größe eines Monitors ist in Pixel, die Größen der Form sind in Punkt...
Willst Du Dich damit wirklich rumquälen?

Andreas.

War diese Antwort hilfreich?

Das war leider nicht hilfreich.

Toll! Vielen Dank für Ihr Feedback.

Wie zufrieden sind Sie mit dieser Antwort?

Vielen Dank für Ihr Feedback. Das hilft uns, die Website zu verbessern.

Wie zufrieden sind Sie mit dieser Antwort?

Vielen Dank für Ihr Feedback.

Annehmen
Annehmen

Hallo Andreas,

wenn du das unbedingt mit einer UserForm machen willst, würde ich sie aber nicht den ganzen Bildschirm ausfüllen lassen. Ich würde sie kleiner lassen und modeless anzeigen, dann muss sie zum Wechseln der Zelle und für das Ausfüllen der Nachbarzellen nicht geschlossen werden.

Setze eine Textbox auf die UserForm und setze für die Textbox die Eigenschaft "Multiline" auf true. Dann schreibe in das Codemodul von Tabellenblatt1:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Intersect(Target, Range("A1:A20")) Is Nothing Or _
    Target.Count > 1 Then Exit Sub
   
With UserForm1
    .Show vbModeless
    .TextBox1.Text = Sheets("Tabelle2").Range(Target.Address)
End With
End Sub

Das gilt nun für Zellen im Bereich A1:A20.

Claus

War diese Antwort hilfreich?

Das war leider nicht hilfreich.

Toll! Vielen Dank für Ihr Feedback.

Wie zufrieden sind Sie mit dieser Antwort?

Vielen Dank für Ihr Feedback. Das hilft uns, die Website zu verbessern.

Wie zufrieden sind Sie mit dieser Antwort?

Vielen Dank für Ihr Feedback.

 
 

Frageninformationen


Zuletzt aktualisiert 5 Oktober, 2021 Aufrufe 2.454 Gilt für: