dynamischer Tooltip bei click

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
Frame
Bild

Betrifft: dynamischer Tooltip bei click
von: bma
Geschrieben am: 24.06.2015 09:17:25

Da ich nicht schnell genug war und auf meinen ersten Beitrag nicht rechtzeitig geantwortet habe musste ich jetzt einen neuen erstellen (jetzt mit Anhang).
Ich baue einen Produktkonfigurator.
Dabei kann man verschiedene Optionen per Dorpdown-Datenüberprüfung auswählen.
In der Auswahl stehen die möglichen Optionen per Buchstaben oder Zahlen die dem Typenschlüssel entsprechen.
Ich habe das Tool so erstellt, das die Sprache jeder Zeit umgestellt werden kann.
Jetzt möchte ich eine Hilfetext anbieten die die Buchstaben / Zahlen beschreibt.
So das man auch eine Auswahl treffen kann wenn man den Typenschlüssel nicht kennt.
Mir fallen 2 Wege ein, die normale Notiz oder die Eingabemeldung der Datenüberprüfung.
Der Text der hineingeschieben werden soll muss in dem moment in dem ich ihn anzeigenlasse aktuallisiert werden, damit die richtige Sprache genutzt wird und nur die möglichen Kombinationen angezeigt werden. Das würde ich auf einem anderen Blatt in 2 Spalten und ca. 10 Zeilen zur verfügung stellen.
Hätte gern eine VBA Funktion in der ich die Zelle angeben kann wo der Text erscheinen soll und die Angabe (vielleicht per Namensdefinition) wo der Text her kommen soll.
Wenn mouse click in zelle XY dann schreibe Text aus Bereich (Namensdefinition) in die Eingabemeldung.
Im Anhang befindet sich ein Auszug aus dem Tool.
Im Register Start in D4 kann man die Sprache einstellen.
In D11 ist eine manuell eingefügte Notiz. Diese soll dynamisch den Text in der richtigen Sprache anzeigen. Der Text ist auszulesen im Register 3-Antriebsart AI3 bis AJ15.
https://www.herber.de/bbs/user/98422.xlsm

Bild

Betrifft: AW: dynamischer Tooltip bei click
von: {Boris}
Geschrieben am: 24.06.2015 23:03:17
Hi,
als Ansatz - als Ereigniscode in der Tabelle "Start". Bezieht sich jetzt nur auf D11 - und die Zelle muss auch angeklickt werden, damit sich der Kommentar an die eingestellte Sprache anpasst:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim str As String
If Target.Address(0, 0) = "D11" Then
    With Tabelle24
        For x = 3 To 15
            str = str & .Cells(x, 35) & "   " & .Cells(x, 36) & vbLf
        Next x
    End With
    On Error Resume Next
    Target.Comment.Delete
    On Error GoTo 0
    Target.AddComment str
    Target.Comment.Shape.TextFrame.Characters.Font.Name = "Courier New"
    Target.Comment.Shape.TextFrame.AutoSize = True
End If
End Sub
Vielleicht hilft Dir das ja schon ein wenig.
VG, Boris

Bild

Betrifft: Alternative: Du kannst auch VollAutomatik ...
von: Luc:-?
Geschrieben am: 25.06.2015 04:29:40
…erreichen, bma,
wenn du eine weitere benannte Fml (hier KommentAABer) hinzufügst. Das kann dann so …
KommentAABer: ='3-Antriebsart'!$AI$3:$AI$15&WENN(LÄNGE('3-Antriebsart'!$AI$3:$AI$15)=1;"  ";" ")&
BEREICH.VERSCHIEBEN('3-Antriebsart'!$AJ$3:$AJ$15;0;Allgemein!$A$4)
…oder so aussehen:
KommentAABer: ='3-Antriebsart'!$AI$3:$AI$15&WENN(LÄNGE('3-Antriebsart'!$AI$3:$AI$15)=1;"  ";" ")&
INDEX('3-Antriebsart'!$AK$3:$BC$3;Allgemein!$A$4):INDEX('3-Antriebsart'!$AK$15:$BC$15;Allgemein!$A$4)
["  ";" " → en-Abstand+¼-em-Abstand;Leerzeichenhier bezogen auf Calibri — exakte Ausrichtung nur mit nicht-proportionaler Schriftart wie bei Boris' Variante möglich!]
Für eine sofortige Reaktion des Kommentars in D11 kann dann auch das Calculate-Ereignis gewählt wdn, weil die Wahl einer anderen Sprache stets Berechnungen (auch auf diesem Blatt) auslöst. Zu beachten ist beim folgd Pgm nur, dass das betroffene Kommentarfeld bereits angelegt worden sein muss:

Option Explicit
Private Sub Worksheet_Calculate()
    Const adKomBer$ = "D11", fmRelKom$ = "KommentAABer"
    Dim kTxt As Variant, aWb As Workbook, wf As WorksheetFunction
    Set aWb = Me.Parent: Set wf = WorksheetFunction
    kTxt = aWb.Names(fmRelKom).Value
    kTxt = Join(wf.Transpose(Me.Evaluate(kTxt)), vbLf)
    With Me.Range(adKomBer).Comment.Shape.TextFrame
        .Characters.Text = Left(kTxt, 255)
        .Characters(256).Text = Mid(kTxt, 256)
'        .Font.Name = "Calibri"
    End With
    Set aWb = Nothing: Set wf = Nothing
End Sub
Du kannst natürlich auch Boris' Variante entsprd abgeändert (es gibt hier kein Target!) - mit diesem Ereignis einsetzen.
Gruß, Luc :-?

Besser informiert mit …

Bild

Betrifft: AW: Alternative: Du kannst auch VollAutomatik ...
von: bma
Geschrieben am: 25.06.2015 09:07:08
Super - beide Antworten funktionieren von Boris so wie von Luc:-?.
Die Kombination mit dem definierten Bereich (Namensmanager) und dem VBA ist zwar etwas aufwendiger aber funktioniert hervorragend.
Da ich ca. 10 weiter Tabellenblätter habe mit jeweils 5-10 Zellen die einen Tooltipp bekommen sollen, gibt es noch etwas zu beachten oder zu vereinfachen oder kann ich einfach für jeden Tooltipp so verfahren?
Das hab ich leider nicht ganz verstanden:
["  ";" " → en-Abstand+¼-em-Abstand;Leerzeichen ← hier bezogen auf Calibri — exakte Ausrichtung nur mit nicht-proportionaler Schriftart wie bei Boris' Variante möglich!]
Eine bessere Ausrichtung wäre ein nice to have um es ewas lessbarer zu machen.
Anstelle:
A  Tooth belt, driven slider
NZ Without drive, tooth belt base
NS Without drive, ball screw base
SN Ball screw drive
T  Trapezoidal screw drive
wäre es so vielleicht besser:
A   - Tooth belt, driven slider
NZ - Without drive, tooth belt base
NS - Without drive, ball screw base
SN - Ball screw drive
T   - Trapezoidal screw drive
Z   - Tooth belt
Ist das möglich?
Auch die Größe des Notizfeldes muss beim anlegen auf die maximal möglich notwendige Fläche eingestellt werden. Kann man das auch automatisieren? So das es sich immer anpasst auf die notwendige Größe?
Ist allerdings nicht so wichtig.
Super vielen Dank.
Gruß Björn

Bild

Betrifft: Das Anpassen findest du in Boris' Code, ...
von: Luc:-?
Geschrieben am: 25.06.2015 13:06:39
…Björn,
musst du nur noch in meinem nachtragen (hielt ich nicht für erforderlich). Was du nicht verstanden hast, ist die Erklärung, um welche Sonderzeichen es sich bei meiner Abstandsregulierung handelt (Menü Einfügen - Symbol - Sonderzeichen). Es gibt in Unicode noch mehr, aber für eine weitgehend exakte Darstellung in einer Proportionalschrift würde die Fml nur dafür recht aufwendig wdn. Nur mit zusätzlichem Strich-Leerzeichen sähe der entsprd FmlTeil so aus: …;"  ";" ")&"- "&…
Im Prinzip kannst du das immer so machen, nur sind es nicht immer gleiche Zellbereiche. Also benötigst du mehrere benannte Fmln und musst dann im Pgm eine Auswahl* je nach Standort treffen, um den jeweils richtigen Namen zu erwischen. Falls so etwas auch auf anderen Blättern gemacht wdn soll, benötigen die ein eigenes, angepasstes Pgm, falls du nicht alle im entsprd Ereignis der Mappe zusammenfassen willst.
* Const adKomBer$ = "D9 D10 D11", fmRelKom$ = "KommentXYBer KommentXZBer KommentAABer", diese dann gesplittet in ein String-Array übernehmen → Dim adKomBers$(), fmRelKoms und später zB: adKomBers = Split(adKomBer) → mit einer For-Schleife können dann alle Standort-Adress-Elemente durchlaufen wdn: For ix = 0 To UBound(adKomBers) … Next, dazwischen stehen die relevanten Befehle, wobei bspw fmRelKom durch fmRelKoms(ix) zu ersetzen ist.
Luc :-?

Bild

Betrifft: AW: Das Anpassen findest du in Boris' Code, ...
von: bma
Geschrieben am: 25.06.2015 15:41:32
Ich bin leider von VBA fast keine Ahnung.
Die Texte etwas besser dar zu stellen mit den Leerzeichen und dem Bindestrich hab ich hin bekommen.
Auch das mit dem Fenster automatische Größe und so.
Aber mehrer Notitzen auf einem Blatt an zu passen bekomme ich leider nicht hin.
Habe also einen weiteren Bereich im Namensmanager angelget:
KommentBRBer
='1-Baureihe'!$A$4:$A$10&WENN(LÄNGE('1-Baureihe'!$A$4:$A$10)=1;"   - ";" - ") & BEREICH.VERSCHIEBEN('1-Baureihe'!$B$4:$B$10;0;Allgemein!$A$4)
und im VB bin ich leider nur so weit gekommen, dann hab ich es nicht mehr verstanden:
Option Explicit

Private Sub Worksheet_Calculate()
    Const adKomBer$ = "D9 D11", fmRelKom$ = "KommentBRBer KommentAABer"
    Dim kTxt As Variant, aWb As Workbook, wf As WorksheetFunction
    Set aWb = Me.Parent: Set wf = WorksheetFunction
    kTxt = aWb.Names(fmRelKom).Value
    kTxt = Join(wf.Transpose(Me.Evaluate(kTxt)), vbLf)
    With Me.Range(adKomBer).Comment.Shape.TextFrame
        .Characters.Text = Left(kTxt, 255)
        .Characters(256).Text = Mid(kTxt, 256)
        .Characters.Font.Name = "Arial"
        .AutoSize = True
    End With
    Set aWb = Nothing: Set wf = Nothing
End Sub

hier das Beispiel update:
https://www.herber.de/bbs/user/98478.xlsm


Bild

Betrifft: ...Weshalb ich dir wohl auch das fktsfähige ...
von: Luc:-?
Geschrieben am: 29.06.2015 19:24:34
…Pgm aufschreiben muss, Björn… ;-)
Hatte dich in der Zwischenzeit fast vergessen, aber nun denn so:

Private Sub Worksheet_Calculate()
    Const adKomBer$ = "D9 D11", fmRelKom$ = "KommentBRBer KommentAABer"
    Dim ix As Long, adKomBers$(), fmRelKoms$(), kTxt As Variant, _
        aWb As Workbook, wf As WorksheetFunction
    Set aWb = Me.Parent: Set wf = WorksheetFunction
    adKomBers = Split(adKomBer): fmRelKoms = Split(fmRelKom)
    For ix = 0 To UBound(adKomBers)
        kTxt = aWb.Names(fmRelKoms(ix)).Value
        kTxt = Join(wf.Transpose(Me.Evaluate(kTxt)), vbLf)
        With Me.Range(adKomBers(ix)).Comment.Shape.TextFrame
            .Characters.Text = Left(kTxt, 255)
            .Characters(256).Text = Mid(kTxt, 256)
            .Characters.Font.Name = "Arial"
            .AutoSize = True
        End With
    Next ix
    Set aWb = Nothing: Set wf = Nothing
End Sub
Gruß, Luc :-?

Besser informiert mit …

 Bild

Beiträge aus den Excel-Beispielen zum Thema "dynamischer Tooltip bei click"