MS Excel VBA: установить поле со списком сортировки - PullRequest
1 голос
/ 27 сентября 2011

Я новичок в VBA, хотя у меня есть некоторый опыт работы с Visual Basic.У меня есть лист Microsoft Excel 2010.Строка 29 имеет заголовки таблицы, а данные взяты из строки 30 и так далее.Эта таблица имеет 20 столбцов.

Я пытаюсь вставить комбо в этот рабочий лист с тремя вариантами, поэтому, когда вы выберете первый, будет применена сортировка по убыванию ко всей таблице в соответствии со столбцом R, а затемстолбец S. Если вы выберете второе, будет применена сортировка по убыванию в соответствии со столбцом S, а затем столбец R. Если вы выберете первое, будет применена сортировка по убыванию в соответствии со столбцом A. Столбец S и столбец R будут скрыты.Надеюсь, вы, ребята, сможете мне помочь.Спасибо и извините за мой английский.

1 Ответ

2 голосов
/ 27 сентября 2011

Просто чтобы описать словами, я предполагаю, что у вас есть лист Excel, который выглядит примерно так:

Initial ScreenShot of Worksbook

(в этом примере видимы столбцы S и R)

Вы хотите добавить поле со списком, который будет сортировать столбцы по значению, выбранному в поле со списком, которое будет выглядеть так:

  • Вариант 1 : сортировка по убыванию по столбцу R, затем S
  • Вариант 2 : сортировка по убыванию по столбцу S, затем R
  • Вариант 3 : сортировка по убыванию в столбце A.

Прежде всего, если вы еще не сделали этого, добавьте вкладку разработчика в Excel .

Затем поместите ячейки таблицы в именованный диапазон. Если строки в этой таблице изменятся, убедитесь, что вы создали динамический именованный диапазон . ( Динамические именованные диапазоны немного сложны, но очень полезны для динамических данных )

Добавьте поле со списком, нажав Вставить на вкладке Разработчик и выберите поле со списком из Элементы управления формой ( ПРИМЕЧАНИЕ: Поле со списком ActiveX совершенно другого типа контроля. Вы можете получить тот же результат, используя его, но код будет другим.)

Перетащите комбинированный список куда-нибудь на рабочий лист: Add combo box

Теперь добавьте значения параметров в комбо. Вы должны пойти куда-нибудь в своей книге и добавить поля со списком значений для вас (например, Sheet2, Cells A1, A2 и A3).

Combo box values

Вернитесь на свой лист, где находятся таблица и поле со списком. Щелкните правой кнопкой мыши поле со списком и выберите Управление форматами .

enter image description here

Диапазон ввода должен содержать ячейки, содержащие параметры сортировки. Это выглядит примерно так: Sheet2! $ A $ 1: $ A $ 3

Снова щелкните правой кнопкой мыши поле со списком и выберите Назначить макрос . Дайте Макро имя и поместите Макрос в Эта Рабочая тетрадь

Macro

Нажмите Новый. Вы попадете в редактор Visual Basic.

Здесь вы можете применить свой код сортировки:

Option Explicit

    Sub DropDown2_Change()
        Dim comboValue As String
        Dim Key1ColumnIndex As Integer
        Dim Key2ColumnIndex As Integer

        'You can get the name by doing something like this in the immediate window:  "? Sheet1.Shapes(1).OLEFormat.Object.Name"
        comboValue = Sheet1.Shapes("Drop Down 2").ControlFormat.List(Sheet1.Shapes("Drop Down 2").ControlFormat.ListIndex)

        Select Case comboValue

            Case "Option1"
                Key1ColumnIndex = 18
                Key2ColumnIndex = 19
            Case "Option2"
                Key1ColumnIndex = 19
                Key2ColumnIndex = 18
            Case "Option3"
                Key1ColumnIndex = 1
                Key2ColumnIndex = 1
        End Select


       Range("DataValues").Sort Key1:=Range("DataValues").Cells(1, Key1ColumnIndex), _
                                Order1:=xlDescending, Header:=xlNo, DataOption1:=xlSortNormal, _
                                Key2:=Range("DataValues").Cells(1, Key2ColumnIndex), order2:=xlDescending
    End Sub

Тебе должно быть хорошо идти. Если вам нужен рабочий пример, посмотрите на образец листа, который я создал здесь ; обратите внимание, что у него нет динамического диапазона имен для таблицы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...