【问题标题】:How can I get buttons to move when I sort a list?当我对列表进行排序时,如何让按钮移动?
【发布时间】:2018-06-07 10:24:58
【问题描述】:

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

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

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

【问题讨论】:

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

标签: vba excel


【解决方案1】:

与其使用所有这些按钮,为什么不使用基于单元格选择的 Private 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

【讨论】:

    猜你喜欢
    • 2021-03-13
    • 2022-01-06
    • 2018-02-10
    • 2020-08-06
    • 2010-11-18
    • 2012-08-31
    • 1970-01-01
    • 1970-01-01
    • 2015-12-03
    相关资源
    最近更新 更多