簡體   English   中英

單擊 Excel 中的超鏈接會在運行宏之前清除范圍選擇

[英]Clicking a Hyperlink in Excel Clears a Range Selection Before Running Macro

我正在從放置在工作表單元格中的超鏈接運行宏。 該宏要求用戶 select 下表中的一些單元格,然后將其轉移到工作表上的另一個位置。 問題是單擊超鏈接將清除用戶的選擇,而不是 select 超鏈接的單元格。

我想做的:讓用戶 select 單元格,單擊超鏈接並能夠通過宏引用選擇范圍。

備選方案 1 :我之前實現過但必須刪除它:創建一個鏈接到宏的形狀,因此用戶在單擊形狀時不會清除選擇...

這樣做的問題是工作表是自動生成的並且非常復雜。 當用戶操作位於形狀上方的行和表格時,我無法在工作表中維護形狀的 position。 因此,該形狀要么變形,要么失去其位置並進入外太空(或出現在其他桌子的中間)。 即使像這樣固定形狀位置也會發生這種情況:

Set sh = ws.Shapes.AddShape(msoShapeRoundedRectangle, l, t, w, h) 'Non-KtCpl
With sh
  sh.ShapeStyle = msoShapeStylePreset40
  sh.OnAction = "'macroName """ & ws.name & """, ""shapeName""'"
  sh.Placement = 1
End With

position 沒有得到維護。

備選方案 2 :用戶在單擊超鏈接使用多選輸入選擇范圍,即:

Application.InputBox("Please select the range from the sheet", Title:="Select Range", Type:=8)

備選方案 2 可行,但我真的很想知道我原來的問題是否可行。

謝謝!

我真的很想知道我最初的問題是否可能。

邏輯

  1. 將先前的選擇存儲在 object 范圍內。
  2. 當用戶單擊超鏈接時,檢查先前的選擇與當前的選擇,看看是否不相同並運行宏。

代碼

這是你正在嘗試的嗎? 我假設超鏈接在A1中。 根據需要進行更改。

Option Explicit

Dim rng As Range

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Intersect(Target, Range("A1")) Is Nothing Then Set rng = Target
End Sub

Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)
    If rng Is Nothing Then
        MsgBox "Select relevant cells"
        Exit Sub
    End If
    
    If Not Intersect(Target.Range, Range("A1")) Is Nothing Then
        MsgBox "The range selected is " & rng.Address '<~~ Do what you want here
    End If
End Sub

在行動

在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM