当我对列表进行排序时,如何让按钮移动?

时间:2018-06-06 17:31:36

标签: excel vba excel-vba

我有一个电子表格,其中包含每行数据的按钮。一列包含可以按升序排序的值,另一列包含可以按名称过滤掉行的过滤器。当我运行完成这两项任务的Sort和Filter宏时,按钮明显地保持在同一行中,但是当我单击按钮以根据按钮的行执行特定任务时它已移动。我真的迷失了这个,所以我将包括对数据进行排序和过滤的代码,以及获取点击按钮的行和列的代码。按钮'属性设置为随单元格移动和调整大小。由于某种原因,当行地址发生变化时,该按钮变为深灰色。我环顾四周,似乎无法找到解决这个问题的方法......对不起,如果我错过了某个地方,并提前感谢您的帮助。

识别点击按钮的行和列的代码......

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

1 个答案:

答案 0 :(得分:0)

不是使用所有这些按钮,为什么不使用基于单元格选择的私有Sub-特别是如果你说的话,运行相同的代码(尽管是针对不同的行),而不管单击哪个按钮?如果选择了使用范围中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