我有一个电子表格,其中包含每行数据的按钮。一列包含可以按升序排序的值,另一列包含可以按名称过滤掉行的过滤器。当我运行完成这两项任务的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
答案 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