Microsoft Excel

Herbers Excel/VBA-Archiv

BeforeDoubleClick und Inhalt

Betrifft: BeforeDoubleClick und Inhalt von: Umberto
Geschrieben am: 04.08.2020 12:16:43

Hallo zusammen,

ich habe eine Frage bezüglich der BeforeDoubleClick Funktion. Gibt es eine Möglichkeit die Doppelklickfunktion vom Inhalt der Zelle abhängig zu machen? Sprich wenn der Inhalt "XYZ" in der Zelle steht dann öffne bei einem Doppelklick den folgenden Link. Und beim Inhalt "ABC" bitte diesen Link öffnen, usw...

Ich habe bereits einen Code der einwandfrei funktioniert. Sobald ich jedoch eine Zeile lösche muss ich immer wieder die Target.Address manuell anpassen. Das geht doch bestimmt auch einfacher. Das ganze mache ich für acht weitere Links, jedoch immer nur in der Spalte A. Dies ist ein Ausschnitt meines Codes für einen Link:

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Excel.Range, Cancel As Boolean)

If Target.Address = "$A$1" Or Target.Address = "$A$2" Or Target.Address = "$A$3" Or Target.Address = "$A$4" Or Target.Address = "$A$5" Or Target.Address = "$A$6" Then
ThisWorkbook.FollowHyperlink "LINK"
Cancel = True
End If

Vielen Dank für eure Hilfe!

Betrifft: AW: BeforeDoubleClick und Inhalt
von: volti
Geschrieben am: 04.08.2020 12:32:08

Hallo Umberto,

Du könntest den betroffen Range der Zeilen einen Namen geben, z.B. "MeinRange" und folgendermaßen anwenden:
Wenn innerhalb dieses Bereichs Zeilen eingefügt werden, wird der Bereich automatisch erweitert.


Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
 
 If Not Application.Intersect(Target, Range("MeinRange")) Is Nothing Then
   ThisWorkbook.FollowHyperlink "LINK"
   Cancel = True
 End If
End Sub
viele Grüße
Karl-Heinz

Betrifft: AW: BeforeDoubleClick und Inhalt
von: volti
Geschrieben am: 04.08.2020 13:01:10

Hallo Umberto,

ich glaube, ich hatte es falsch verstanden.

Du könntest jeder betroffenen Zeile einen Namen geben, z.B. "Link1" und folgendermaßen anwenden:
Wenn Zeilen eingefügt, gelöscht oder verschoben werden, verweist der jeweilige Name immer noch auf die entsprechende Zelle.
Option Compare Text

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
 Cancel = True
 On Error GoTo Fehler
 With Target
  If .Name.Name = "Link1" And .Value Like "abc" Then
    ThisWorkbook.FollowHyperlink "LINK1"
  ElseIf .Name.Name = "Link2" And .Value Like "abc" Then
    ThisWorkbook.FollowHyperlink "LINK2"
  Else
Fehler:
    Cancel = False
  End If
 End With
End Sub
viele Grüße
Karl-Heinz

Betrifft: AW: BeforeDoubleClick und Inhalt
von: Umberto
Geschrieben am: 04.08.2020 13:03:00

Hallo Karl-Heinz,

vielen Dank für die Hilfe. Das mit dem Range ist gar nicht mein eigentliches Problem. Meinetwegen kann der VBA Code die gesamte Spalte A nach dem gesuchten Inhalt überprüfen und genau dann in dieser Zelle eine Doppelklick-Funktion hinterlegen, sofern dieser gesuchte Inhalt in der Zelle steht.

Sprich: Wenn "Hallo" in der Spalte A in Zelle A1, A2 und A10 steht soll er automatisch bei einem Doppelklick den hinterlegten Link öffnen. So wie in dem eigentlichen Code von mir. Nur ohne diese Aufzählung jeder einzelnen Zelle. Wenn "Tschüss" in der Spalte A in Zelle A3, A4 und A11 genau dasselbe spiel, nur mit einem anderen Link. Das gleiche dann auch für die weiteren Fälle und Links. Ist das möglich?

Betrifft: AW: BeforeDoubleClick und Inhalt
von: EtoPHG
Geschrieben am: 04.08.2020 13:12:29

Hallo Umberto,

Du redest immer von einem hinterlegten Link. Was ist das? Wo ist der im Tabellenblatt zu finden?
Soll einfach der Inhalt der Zelle als Hyperlink aufgerufen werden? Wenn dem so ist, was macht das Ganze für einen Sinn, denn dann kann ich ja auf den Link klicken, statt doppelklicken?

Ich finde deine Formulierungen entsprechen nicht den angegebenen Levels.

Gruess Hansueli

Betrifft: AW: BeforeDoubleClick und Inhalt
von: Rudi Maintaire
Geschrieben am: 04.08.2020 13:07:17

if target.column=1 then
  select case target
    case "abc": ThisWorkbook.FollowHyperlink "LINK"
    case "def": ThisWorkbook.FollowHyperlink "LINK2"
  end select
end if


Betrifft: AW: BeforeDoubleClick und Inhalt
von: Umberto
Geschrieben am: 04.08.2020 13:30:11

Vielen Dank an alle! Nun funktioniert es. Der Vorschlag von Rudi war genau das, nachdem ich gesucht habe.

Betrifft: AW: BeforeDoubleClick und Inhalt
von: Umberto
Geschrieben am: 04.08.2020 15:15:15

Hallo Rudi, könntest du mir eventuell noch einmal kurz helfen? Ich wäre dir sehr dankbar. Das Problem in der ersten Spalte ist jetzt behoben. In der zweiten habe ich auch eine BeforeDoubleClick Funktion eingefügt, die bei einem Doppelklick in der jeweiligen Zelle ein unsichtbares Arbeitsblatt zunächst erstmal wieder sichtbar macht und dann direkt darauf wechselt. Der Code sieht so aus:

If Target.Address = "$B$2" Or Target.Address = "$B$3" Or Target.Address = "$B$4" Or Target.Address = "$B$5" Or Target.Address = "$B$6" Or Target.Address = "$B$7" Then
Sheets("Arbeitsblatt 1").Visible = True
Sheets("Arebitsblatt 1").Select
Cancel = True
End If

Auch hier habe ich das Problem mit den verschiedenen Target Adressen. Wenn ich etwas hinzufüge oder lösche, muss ich auch hier alles manuell anpassen. Den gleichen Code wie bei Spalte 1 zu nutzen ist leider nicht möglich, da die Zellen in Spalte 2 alle verschiedene Inhalte haben.

Ich habe bereits eine Idee, kann diese aber nicht ganz umsetzen. Bei einem Doppelklick in einer Zelle in Spalte 2, wechsle auf die linke Zelle (in Spalte 1), überprüfe was hier drin steht (der Inhalt steht in Verbindung mit der Zelle in Spalte 2) und je nachdem was in dieser Zelle steht Arbeitsblatt XYZ wieder sichtbar machen und auswählen. Dieser Code wäre ein Ansatz, funktioniert aber leider nicht:

If Target.Column = 2 Then
ActiveCell.Offset(0, -1).Select

Select Case Target
Case "Arbeitsblatt 1": Sheets("Arbeitsblatt 1").Visible = True
Sheets("Arbeitsblatt 1").Select
Case "Arbeitsblatt 2": Sheets("Arbeitsblatt 2").Visible = True
Sheets("Arbeitsblatt 2").Select
'das ganze für 6 weitere Arbeitsblätter
End Select
End If

Betrifft: AW: BeforeDoubleClick und Inhalt
von: Rudi Maintaire
Geschrieben am: 04.08.2020 15:52:01

Hallo,
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
  Dim bolCANCEL As Boolean
  Select Case Target.Column
    Case 1  'A
      bolCANCEL = True
      Select Case Target
        Case "abc": ThisWorkbook.FollowHyperlink "LINK"
        Case "def": ThisWorkbook.FollowHyperlink "LINK2"
      End Select
    Case 2  'B
      bolCANCEL = True
      Select Case Target.Offset(, -1)
        Case "Arbeitsblatt2"
          With Sheets("Arbeitsblatt2")
            .Visible = xlSheetVisible
            .Select
          End With
          'etc
      End Select
    '+++++++++++++++++++++++++++
    '      wenn der Blattname in der NebenZelle steht, kannst du Select Case Target weglassen:
'          With Sheets(Target.Offset(, -1))
    '        .Visible = xlSheetVisible
    '        .Select
    '      End With
    '+++++++++++++++++++++++++++
  End Select
  Cancel = bolCANCEL
End Sub

Gruß
Rudi

Betrifft: AW: BeforeDoubleClick und Inhalt
von: Umberto
Geschrieben am: 04.08.2020 16:01:42

Super, vielen lieben Dank!

Beiträge aus dem Excel-Forum zum Thema "BeforeDoubleClick und Inhalt"