Vba 在对列表排序时,如何使按钮移动?

Vba 在对列表排序时,如何使按钮移动?,vba,excel,Vba,Excel,我有一个电子表格,每行数据都有按钮。一列包含可按升序排序的值,另一列包含可按名称筛选行的筛选器。当我运行完成这两项任务的排序和筛选宏时,按钮明显保留在同一行中,但当我单击按钮以根据按钮所在行执行特定任务时,它已移动。我真的很迷恋这个,所以我将包括排序和过滤数据的代码,以及获取单击按钮的行和列的代码。按钮的属性设置为随单元格移动和调整大小。当按钮的行地址因某种原因发生更改时,按钮将变为深灰色。我环顾四周,似乎找不到解决这个问题的办法。。。如果我错过了一些东西,请道歉,并提前感谢您的帮助 用于标识已

我有一个电子表格,每行数据都有按钮。一列包含可按升序排序的值,另一列包含可按名称筛选行的筛选器。当我运行完成这两项任务的排序和筛选宏时,按钮明显保留在同一行中,但当我单击按钮以根据按钮所在行执行特定任务时,它已移动。我真的很迷恋这个,所以我将包括排序和过滤数据的代码,以及获取单击按钮的行和列的代码。按钮的属性设置为随单元格移动和调整大小。当按钮的行地址因某种原因发生更改时,按钮将变为深灰色。我环顾四周,似乎找不到解决这个问题的办法。。。如果我错过了一些东西,请道歉,并提前感谢您的帮助

用于标识已单击按钮的行和列的代码

Dim b  As Object

Set b = ActiveSheet.Buttons(Application.Caller)

With b.TopLeftCell
    task_row = .Row
    button_col = .Column
End With
对行进行排序和筛选的代码

Sub Filter_List()
    ActiveSheet.Range(Cells(start_data_row - 1, 1), Cells(start_data_row +   num_tasks - 1, last_col)).AutoFilter _
        Field:=name_col, Criteria1:=task_owner
End Sub

Sub Sort_List()
    Range(Cells(start_data_row, 1), Cells(start_data_row + num_tasks - 1, last_col)).Sort _
        key1:=Range(Cells(start_data_row, days_left_col), Cells(start_data_row, days_left_col)), _
        order1:=xlAscending
    Worksheets(sht_name).Range(Cells(start_data_row - 1, days_left_col), Cells(start_data_row + num_tasks - 1, days_left_col)).AutoFilter _
        Field:=days_left_col, Criteria1:="<" & max_days, Operator:=xlAnd
End Sub
子过滤器列表()
ActiveSheet.Range(单元格(开始数据行-1,1),单元格(开始数据行+num任务-1,最后一列)).AutoFilter_
字段:=名称\u列,标准1:=任务\u所有者
端接头
子排序列表()
范围(单元格(开始数据行,1),单元格(开始数据行+数量任务-1,最后一列))。排序_
键1:=范围(单元格(起始数据行,天数左列),单元格(起始数据行,天数左列))_
顺序1:=xl
工作表(sht_名称)。范围(单元格(开始_数据行-1,左栏天数),单元格(开始_数据行+num_任务-1,左栏天数))。自动筛选_

Field:=days\u left\u col,Criteria1:=“与其使用所有这些按钮,为什么不基于单元格选择使用私有子节点?特别是如果,正如您所说,运行相同的代码(尽管针对不同的行)无论单击哪个按钮?如果选择了“使用范围”中A列中的任何单元格,则以下子项都有效。只需将代码放在我建议的位置,即可省去所有按钮

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Dim LastRow As Long

LastRow = ActiveSheet.UsedRange.Rows(ActiveSheet.UsedRange.Rows.Count).Row

    If Not Intersect(Range("A1:A" & LastRow), Target) Is Nothing Then

      ‘Put your generic code here

    End If

End Sub

为什么不将按钮更改为不随单元格移动或调整大小。这样,它总是静止的,如果需要,您可以更好地操纵它。它需要随它对应的数据行移动。如果它只是一个按钮,为什么它的位置如此重要?如果它是每行数据的一个按钮(如果是,有多少?它们是否都做相同的事情,但针对不同的数据行?)然后你可能应该重新思考如何完成它们所做的事情。有将近一千行的数据,每行有一个按钮。它们都做相同的事情,但对不同的数据行。我同意在每行上有一个按钮没有意义,但我为之构建电子表格的人希望这样。超链接是如果可以对数据进行排序或筛选,则比按钮更易于管理。