在Excel中,我可以使用超链接运行vba宏吗?

时间:2015-02-25 20:06:49

标签: excel-vba vba excel

我有一个包含许多行数据的电子表格。我希望能够使用该行中的数据单击将运行宏的单元格。由于行数总是在变化,我虽然每行的超链接可能是最好的方法。

   ROW MeterID   Lat    Long   ReadX  ReadY  ReadZ   CoeffA  CoeffB  CoeffC
   2   10f62gs   34.1   33.3   102.2  231.3  382.2   4.34    22.1    0.002
   3   83gs72g   34.4   31.4   109.2  213.1  372.1   2.23    12.7    0.023
   4   43gS128   33.3   32.2   118.8  138.7  241.8   1.94    5.08    0.107

有没有办法通过点击超链接运行vba宏,并且能够知道单击超链接的单元格行?

5 个答案:

答案 0 :(得分:11)

这对你有用

Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)
        MsgBox "Row " & ActiveCell.Row & " is clicked"
End Sub

答案 1 :(得分:7)

是的,您可以按照以下简单步骤进行操作:

步骤1.选择要制作超链接的单元格 第2步.Righ Click - >超链接... 步骤3.输入要在其中创建超链接的相同单元格的地址,并为链接指定名称。见下图:

将宏指定给超链接

步骤4.单击“确定”。 步骤5.创建HyperLink。

注意:单击此超链接,将不执行任何操作,因为它已分配给相同的单元格地址。

步骤6.现在按Alt + F11 步骤7.复制粘贴以下代码

点击超链接

运行Excel宏
Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)  
    'Check if the Target Address is same as you have given  
    'In the above example i have taken A4 Cell, so I am  
    'Comparing this with $A$4  

    If Target.Range.Address = "$A$4" Then  
        'Write your all VBA Code, which you want to execute  
        'Or Call the function or Macro which you have  
        'written or recorded.  
        MsgBox "Write your Code here to be executed"  
        Exit Sub  
    End If  
End Sub  

在上面的代码中,我们比较单元格地址然后执行一组代码或功能。还有另一种方法可以做到这一点。我们可以与目标名称进行比较并执行代码。在上面的例子中,因为我已经将超链接目标的名称命名为MyMacro。

Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)  
    'Check if the Target Name is same as you have given  
    'In the above example i have given the Name of the HyperLink  
    'is MyMacro.  

    If Target.Name = "mymacro" Then  
        'Write your all VBA Code, which you want to execute  
        'Or Call the function or Macro which you have  
        'written or recorded.  
        MsgBox "Write your Code here to be executed"  
        Exit Sub  
    End If  
End Sub  

答案 2 :(得分:5)

运行宏的超链接的一种更有趣的方式,似乎是下一种方法(超链接公式)。它不需要任何事件:

  1. 在单元格中写一个超链接公式。这也可以在VBA中完成:
    Sub testCreateHyperlinkFunction()
       'Very important to have # in front of the function name!
       Range("A1:A5").Formula = "=HYPERLINK(""#MyFunctionkClick()"", ""Run a function..."")"
    End Sub

下一个方法将是更为壮观的用法,它能够保持已处理范围的初始像元值(例如“ A1:A5”):

Sub testCreateHyperlinkFunctionBis()
  Dim rng As Range, arr As Variant, c As Range, i As Long
   Set rng = Range("A1:A5")
   arr = rng.Value
   For i = 1 To UBound(arr, 1)
     Range("A" & i).Formula = "=HYPERLINK(""#MyFunctionkClick()"", " & _
            IIf(IsNumeric(arr(i, 1)), arr(i, 1), """" & arr(i, 1) & """") & ")"
   Next i
End Sub
  1. 在模块中创建要调用的函数:
    Function MyFunctionkClick()
      Set MyFunctionkClick = Selection 'Do not miss this part!
      MsgBox "The clicked cell addres is " & Selection.row
    End Function
  1. 单击单元格,功能MyFunctionkClick()运行...

答案 3 :(得分:4)

我想添加另一种方法,该方法受我过去使用的一种答案的启发。这意味着您不必创建超链接或帮助程序列即可开始处理该行,只需双击要处理的行中的任何单元格即可:

要在其中进行双击工作的工作表上,请使用以下方法:

Private Sub Worksheet_Activate()
Application.OnDoubleClick = "Module1.ProcessRow"
End Sub

Private Sub Worksheet_Deactivate()
Application.OnDoubleClick = ""
End Sub

然后在Module1中有一个例程,该例程将处理活动单元:

Sub processRow()
MsgBox "Row " & ActiveCell.Row & " on " & ActiveSheet.Name & " was clicked"
End Sub

您还应该在工作簿事件中禁用Excel双击方法:

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.OnDoubleClick = ""
End Sub

我发现双击方法对于很多过程来说确实非常方便和直观,例如使用行中填充的数据来显示UserForm或将其传输到另一张表中,可能需要使用计算或格式等。

答案 4 :(得分:0)

我认为,不管是为每个单元格创建超链接的麻烦,最好创建一个引用Activecell属性的宏。接下来,为要运行的宏创建键盘快捷方式。为此:

  1. 按ALT + F8
  2. 选择Options
  3. 选择一个键作为快捷键
  4. 如果您已有超链接,则使用Hyperlink_Follow事件触发宏可能是最佳选择。如果没有,那么请考虑我的建议。