Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1596to1600
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

[VBA] SheetSelectionChange und Hyperlinks

[VBA] SheetSelectionChange und Hyperlinks
02.01.2018 11:43:00
Nils
Hallo liebe VBA-Experten,
ich habe ein Excel-Addin mit folgendem Code in einem Klassenmodul, was mir bei Aktivierung einer Zelle in einem festgelegten Bereich ein Datum einträgt:

Private Sub mobjApplication_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
Dim objRange As Range, objCell As Range
If Sh.Name = "Blatt_1" Then
Set objRange = Intersect(Target, Range(Cells(37, "AB"), Cells(Rows.Count, "AB")))
If Not objRange Is Nothing Then
For Each objCell In objRange
If objCell.Value = "" Then
objCell.Value = Format$(Date, "dd.mm.yy")
End If
Next
Set objRange = Nothing
End If
End If
End Sub
Der Code funktioniert 1A. Allerdings bekomme ich einen Runtime-Error, wenn ich über einen Hyperlink eine Arbeitsmappe öffne und ich die erste If-Bedingung erfülle. Der Grund ist meiner Meinung nach "Target", welches sich auf das Tabellenblatt und die Arbeitsmappe bezieht, von wo ich komme, also Tabellenblatt mit dem Hyperlink.
Wie kann ich Target auf die Zelle beziehen, die nach öffnen der neuen Arbeitsmappe aktiv ist?
ich hoffe man versteht das problem...
Vielen Dank für jede Hilfe
Nils

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: [VBA] SheetSelectionChange und Hyperlinks
02.01.2018 11:55:11
Sepp
Hallo Nils,
probier es so.
Private Sub mobjApplication_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
Dim objRange As Range, objCell As Range
If Sh Is Nothing Then Set Sh = ActiveSheet
If Target Is Nothing Then Set Target = ActiveCell
If Sh.Name = "Blatt_1" Then
  Set objRange = Intersect(Target, Range(Cells(37, "AB"), Cells(Rows.Count, "AB")))
  If Not objRange Is Nothing Then
    For Each objCell In objRange
      If objCell.Value = "" Then
        objCell.Value = Format$(Date, "dd.mm.yy")
      End If
    Next
    Set objRange = Nothing
  End If
End If
End Sub

Gruß Sepp

Anzeige
AW: [VBA] SheetSelectionChange und Hyperlinks
03.01.2018 09:30:49
Nils
Hallo Sepp,
Danke für deine Antwort! Aber mein „Target“ ist ja nicht nothing. Es bezieht sich eben bloß (noch) aufs falsche tabellenblatt, eben auf das, woraus ich über einen link die neue Mappe öffne.
Also offensichtlich muss ich mein Target abfragen, ob es sich auf das activesheet bezieht und wenn das nicht so ist, muss ich mein Target mit set Target = activecell neu setzen, richtig?
Wie frage ich das ab? Sowas wie:
If not target = range in activesheet then
AW: [VBA] SheetSelectionChange und Hyperlinks
03.01.2018 10:01:02
Sepp
Hallo Nils,
das wird so nicht funktionieren, da wenn das Event gefeuert wird, ja noch die Tabelle in der du klickst die aktive Tabelle ist.
da müsstest du eher mit 'Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)' arbeiten und daraus das Ziel ermitteln.
Gruß Sepp

Anzeige
AW: [VBA] SheetSelectionChange und Hyperlinks
03.01.2018 17:42:53
Nils
Hallo Sepp,
kann ich nicht das target einfach neu setzen mit set target = activecell? oder bezieht sich dann activecell immernoch auf die Excelmappe, wo ich den Hyperlink geöffnet habe?
Alternative: Den fehler abfangen und das makro beenden? bei erneutem wechsel der zelle im neuem blatt sollte es dann gehen, oder?
AW: [VBA] SheetSelectionChange und Hyperlinks
03.01.2018 18:37:19
Sepp
Hallo Nils,
das war ja mein erster Vorschlag!
Den Fehler fängst du am besten so ab.
Private Sub mobjApplication_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
Dim objRange As Range, objCell As Range
If Sh.Name = "Blatt_1" Then
  On Error Resume Next
  Set objRange = Intersect(Target, Range(Cells(37, "AB"), Cells(Rows.Count, "AB")))
  Err.Clear
  On Error GoTo 0
  If Not objRange Is Nothing Then
    For Each objCell In objRange
      If objCell.Value = "" Then
        objCell.Value = Format$(Date, "dd.mm.yy")
      End If
    Next
    Set objRange = Nothing
  End If
End If
End Sub

Gruß Sepp

Anzeige

305 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige