Excel 如何创建链接到宏代码的超链接以进行剪切和粘贴?

Excel 如何创建链接到宏代码的超链接以进行剪切和粘贴?,excel,vba,Excel,Vba,非常新的excel编码在这里,我的头撞在墙上试图通过谷歌来完成这一点,但似乎每次我推地毯从一个地方下来,它从另一个弹出lol 我有一张excel表格,上面有5个标签,每个标签上都有一个冒号,这是我想要点击的单元格所在的位置。单击该单元格时,我希望它将同一行右侧的4个单元格剪切并粘贴到下一个选项卡上。因此,单击A1将剪切B1、C1、D1、E1并将其粘贴到下一个选项卡上,但粘贴到下一个可用的空行上。 对下一个选项卡执行相同操作,直到该行进入最后一个选项卡 所有的数据都在第一张纸上,其他的都是空的。因

非常新的excel编码在这里,我的头撞在墙上试图通过谷歌来完成这一点,但似乎每次我推地毯从一个地方下来,它从另一个弹出lol 我有一张excel表格,上面有5个标签,每个标签上都有一个冒号,这是我想要点击的单元格所在的位置。单击该单元格时,我希望它将同一行右侧的4个单元格剪切并粘贴到下一个选项卡上。因此,单击A1将剪切B1、C1、D1、E1并将其粘贴到下一个选项卡上,但粘贴到下一个可用的空行上。 对下一个选项卡执行相同操作,直到该行进入最后一个选项卡 所有的数据都在第一张纸上,其他的都是空的。因此,一旦我在第一张纸上单击它,我希望它移动到下一张纸,然后当我在下一张纸上单击它时,我希望它移动到第三张纸

到目前为止,我有一个代码可以在我高亮显示的单元格上创建Hyperllink,但它会显示(工作表名称!单元格编号),我想显示一个特定的txt,而不是(完成)或(接收)。每个选项卡的显示都不同。 我在第一张图纸中的代码用于将剪切行移动到第二张图纸,但我尝试在下一张图纸中粘贴该代码以将其移动到第三张图纸,但我不断遇到错误

提前感谢您的帮助!问这个问题我感到内疚,通常我会坐下来学习整个过程,但我在这里的时间紧迫

模块中的代码

Sub HyperActive()
    Dim nm As String

    nm = ActiveSheet.Name & "!"
    For Each r In Selection
        t = r.Text
        addy = nm & r.Address(0, 0)
        ActiveSheet.Hyperlinks.Add Anchor:=r, Address:="", SubAddress:= _
            addy, TextToDisplay:=r.Text
    Next r
End Sub
表中代码

Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)
    Dim r As Range

    Set r = Range(Target.SubAddress)

    r.Offset(0, 1).Resize(1, 4).Cut
    Sheets("Wash Bay").Select
    Worksheets("Wash Bay").Range("B" & Rows.Count).End(xlUp).Offset(1).Select
    ActiveSheet.Paste

End Sub
我建议使用这里的活动。这是工作簿级别的事件,与工作表级别的
工作表\u FollowHyperlink
事件相反

从文档中:

在Microsoft Excel中选择任何超链接时发生

参数

Sh
:包含超链接的
工作表
对象

目标
:表示超链接目标的
超链接
对象

将以下代码添加到
此工作簿
模块(不是工作表代码模块)

重要提示:在当前状态下,这假定工作簿只有工作表(例如,没有图表表)


编辑:如果工作簿包含工作表以外的其他工作表类型,则可以使用此修订代码:

Private Sub Workbook_SheetFollowHyperlink(ByVal Sh As Object, ByVal Target As Hyperlink)
    Dim indx As Long
    indx = GetWorksheetIndex(Sh)
    
    If indx = Me.Worksheets.Count Then Exit Sub
    
    Dim rng As Range
    Set rng = Sh.Range(Target.SubAddress)
      
    Dim nextWs As Worksheet
    Set nextWs = Me.Worksheets(indx + 1)
    
    With nextWs
        Dim lastRow As Long
        lastRow = .Range("B" & .Rows.Count).End(xlUp).Row
    End With
    
    rng.Offset(, 1).Resize(1, 4).Cut Destination:=nextWs.Range("B" & lastRow + 1)
    
    Application.CutCopyMode = False
End Sub

Private Function GetWorksheetIndex(ByVal ws As Worksheet) As Long
    Dim w As Worksheet

    For Each w In ws.Parent.Worksheets
        Dim counter As Long
        counter = counter + 1
        
        If w.Name = ws.Name Then
            GetWorksheetIndex = counter
            Exit Function
        End If
    Next w
End Function
第二次编辑

我想你可以把过度活跃改写成这样:

Sub HyperActive(ByVal rng As Range)
    Dim ws As Worksheet
    Set ws = rng.Parent
    
    Dim fullAddress As String
    fullAddress = "'" & ws.Name & "'!" & rng.Address
    
    ws.Hyperlinks.Add Anchor:=rng, Address:="", SubAddress:=fullAddress, TextToDisplay:=rng.Text
End Sub
然后在主
工作簿中添加以下行:

HyperActive rng:=nextWs.Range("A" & lastRow + 1)
我建议使用这里的活动。这是工作簿级别的事件,与工作表级别的
工作表\u FollowHyperlink
事件相反

从文档中:

在Microsoft Excel中选择任何超链接时发生

参数

Sh
:包含超链接的
工作表
对象

目标
:表示超链接目标的
超链接
对象

将以下代码添加到
此工作簿
模块(不是工作表代码模块)

重要提示:在当前状态下,这假定工作簿只有工作表(例如,没有图表表)


编辑:如果工作簿包含工作表以外的其他工作表类型,则可以使用此修订代码:

Private Sub Workbook_SheetFollowHyperlink(ByVal Sh As Object, ByVal Target As Hyperlink)
    Dim indx As Long
    indx = GetWorksheetIndex(Sh)
    
    If indx = Me.Worksheets.Count Then Exit Sub
    
    Dim rng As Range
    Set rng = Sh.Range(Target.SubAddress)
      
    Dim nextWs As Worksheet
    Set nextWs = Me.Worksheets(indx + 1)
    
    With nextWs
        Dim lastRow As Long
        lastRow = .Range("B" & .Rows.Count).End(xlUp).Row
    End With
    
    rng.Offset(, 1).Resize(1, 4).Cut Destination:=nextWs.Range("B" & lastRow + 1)
    
    Application.CutCopyMode = False
End Sub

Private Function GetWorksheetIndex(ByVal ws As Worksheet) As Long
    Dim w As Worksheet

    For Each w In ws.Parent.Worksheets
        Dim counter As Long
        counter = counter + 1
        
        If w.Name = ws.Name Then
            GetWorksheetIndex = counter
            Exit Function
        End If
    Next w
End Function
第二次编辑

我想你可以把
过度活跃改写成这样:

Sub HyperActive(ByVal rng As Range)
    Dim ws As Worksheet
    Set ws = rng.Parent
    
    Dim fullAddress As String
    fullAddress = "'" & ws.Name & "'!" & rng.Address
    
    ws.Hyperlinks.Add Anchor:=rng, Address:="", SubAddress:=fullAddress, TextToDisplay:=rng.Text
End Sub
然后在主
工作簿中添加以下行:

HyperActive rng:=nextWs.Range("A" & lastRow + 1)

错误消息是什么?注意-与其使用
工作表超链接
事件,不如使用该事件。然后您将只有一个代码实例(在
ThisWorkbook
模块中),而不是多个工作表模块中的代码。它提供的引用无效。然后出现运行时错误“1004”:对象“”工作表的方法“range”失败。当我点击Debugger时,它突出显示了set r=range(target.subaddress)部分。老实说,我是这里的新手,我不知道使用工作簿sheetfollowhyperlink是什么意思。错误消息是什么?注意-与其使用
工作表超链接
事件,不如使用该事件。然后您将只有一个代码实例(在
ThisWorkbook
模块中),而不是多个工作表模块中的代码。它提供的引用无效。然后出现运行时错误“1004”:对象“”工作表的方法“range”失败。它突出显示了set r=range(target.subaddress)部分,当我点击Debugger时,老实说,我是一个完全的新手,我不知道使用工作簿sheetfollowhyperlink是什么意思,谢谢,这是一种更好的方法,而不是将我的原始代码添加到每个工作表中。至于创建超链接单元格的模块中的代码;有没有一种方法可以让它沿着选项卡移动,或者我需要为每个选项卡在a行中设置链接?我的第一张工作表包含大约3000行。你的意思是在每个工作表中循环并在A列中创建超链接吗?是的,当单元格B->E被剪切并粘贴到下一个选项卡时,在单元格A中创建一个超链接,以便能够剪切并粘贴到下一个选项卡中。如果这是太多,我同意预先创建的链接,在A列的每个选项卡。这只是我现在拥有的模块,只在第一张纸上创建链接,当我尝试使用它在第二张纸上创建链接时,当我尝试使用该链接时出现错误消息。。。因此,您需要重写
超活动
,以在特定范围内工作,而不是
选择
。如果我可以给您发送一些,我会的!酷,谢谢,这是一种更好的方法,而不是将我的原始代码添加到每个工作表中。至于创建超链接单元格的模块中的代码;有没有一种方法可以让它沿着标签移动呢