如何使用超链接调用Sub

时间:2015-07-10 22:27:40

标签: vba excel-vba excel

我是VBA的新手;我有一个问题:

如何使用其他工作表中的超链接调用sub来删除工作表中的单元格。

非常感谢代码的结构。

2 个答案:

答案 0 :(得分:2)

工作表中包含超链接的事件处理程序:

Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)

    If Target.TextToDisplay = "Clear Cell" Then
        ClearThatCell
    End If

End Sub

请注意,还有一个工作簿级事件:如果您希望能够捕获工作簿中的任何超链接,请使用该事件。

Private Sub Workbook_SheetFollowHyperlink(ByVal Sh As Object, _
                                      ByVal Target As Hyperlink)

End Sub 

被叫代码:

Sub ClearThatCell()
    ThisWorkbook.Sheets("Sheet2").Range("A1").ClearContents
End Sub

答案 1 :(得分:0)

' Public m_data_wks As Worksheet
Sub init_links
  Dim v_r As Range, n_rows as Integer
  Set v_r = m_data_wks.Cells(1, 1)
  n_rows = 3 'is an example of filling up cells with hyperlinks
  For I = 1 To n_rows
    v_r.Value = I
    'The key: adding hyperlink to the v_r cell with a special subaddress for alternative usage.
    'The hyperlink looks like the ordinary but points to itself.
    m_data_wks.Hyperlinks.Add Anchor:=v_r, Address:="", SubAddress:=v_r.Address(External:=False, RowAbsolute:=False, columnAbsolute:=False)
    Set v_r = v_r.Offset(1)
  Next I
end sub

'Private WithEvents App As Application
Private Sub App_SheetFollowHyperlink(ByVal Sh As Object, ByVal Target As Hyperlink)
  Dim v_dst As Worksheet, v_index_s As String, v_index_i As Integer
  'get_context sets v_dst the proper worksheet
  'get_context Sh.Parent, v_dst
  If v_dst Is Nothing Then Exit Sub
On Error GoTo Ext
  'Using the value of the cell for choosing which to delete
  v_index_s = CStr(Sh.Range(Target.SubAddress).Value)
  If v_index_s = "#" Then
    v_index_i = 0
  Else
    v_index_i = CLng(v_index_s)
  End If
  'Here the v_index_i points to the row instead of a cell for deleting
  v_dst.Rows(v_index_i).Delete
  Exit Sub
Ext:
  If Err.Number <> 0 Then
    MsgBox "Error occured while deleting by hyperlink: " & Err.Number & ", " & Err.Description, vbExclamation, "Non critical error"
    Err.Clear
  End If
End Sub