Vba имя списка excel

Элемент управления пользовательской формы ListBox для выбора и ввода информации в VBA Excel. Свойства списка, его заполнение, извлечение данных, примеры кода.

Элемент управления ListBox на пользовательской форме

UserForm.ListBox – это элемент управления пользовательской формы, предназначенный для передачи в код VBA информации, выбранной пользователем из одностолбцового или многостолбцового списка.

Список используется в тех случаях, когда необходимо добавить в форму информацию, которая заранее известна, а ее отдельные позиции можно сгруппировать в список. Элемент управления ListBox оправдывает себя при небольших списках, так как большой список будет занимать много места на форме.

Использование полос прокрутки уменьшает преимущество ListBox перед элементом управления ComboBox, которое заключается в том, что при открытии формы все позиции для выбора на виду без дополнительных действий со стороны пользователя. При выборе информации из большого списка удобнее использовать ComboBox.

Элемент управления ListBox позволяет выбрать несколько позиций из списка, но эта возможность не имеет практического смысла. Ввести информацию в ListBox с помощью клавиатуры или вставить из буфера обмена невозможно.

Свойства списка

Свойство Описание
ColumnCount Указывает количество столбцов в списке. Значение по умолчанию = 1.
ColumnHeads Добавляет строку заголовков в ListBox. True – заголовки столбцов включены, False – заголовки столбцов выключены. Значение по умолчанию = False.
ColumnWidths Ширина столбцов. Значения для нескольких столбцов указываются в одну строку через точку с запятой (;).
ControlSource Ссылка на ячейку для ее привязки к элементу управления ListBox.
ControlTipText Текст всплывающей подсказки при наведении курсора на ListBox.
Enabled Возможность выбора элементов списка. True – выбор включен, False – выключен*. Значение по умолчанию = True.
Font Шрифт, начертание и размер текста в списке.
Height Высота элемента управления ListBox.
Left Расстояние от левого края внутренней границы пользовательской формы до левого края элемента управления ListBox.
List Позволяет заполнить список данными из одномерного или двухмерного массива, а также обращаться к отдельным элементам списка по индексам для записи и чтения.
ListIndex Номер выбранной пользователем строки. Нумерация начинается с нуля. Если ничего не выбрано, ListIndex = -1.
Locked Запрет возможности выбора элементов списка. True – выбор запрещен**, False – выбор разрешен. Значение по умолчанию = False.
MultiSelect*** Определяет возможность однострочного или многострочного выбора. 0 (fmMultiSelectSingle) – однострочный выбор, 1 (fmMultiSelectMulti) и 2 (fmMultiSelectExtended) – многострочный выбор.
RowSource Источник строк для элемента управления ListBox (адрес диапазона на рабочем листе Excel).
TabIndex Целое число, определяющее позицию элемента управления в очереди на получение фокуса при табуляции. Отсчет начинается с 0.
Text Текстовое содержимое выбранной строки списка (из первого столбца при ColumnCount > 1). Тип данных String, значение по умолчанию = пустая строка.
TextAlign Выравнивание текста: 1 (fmTextAlignLeft) – по левому краю, 2 (fmTextAlignCenter) – по центру, 3 (fmTextAlignRight) – по правому краю.
Top Расстояние от верхнего края внутренней границы пользовательской формы до верхнего края элемента управления ListBox.
Value Значение выбранной строки списка (из первого столбца при ColumnCount > 1). Value – свойство списка по умолчанию. Тип данных Variant, значение по умолчанию = Null.
Visible Видимость списка. True – ListBox отображается на пользовательской форме, False – ListBox скрыт.
Width Ширина элемента управления.

* При Enabled в значении False возможен только вывод информации в список для просмотра.
** Для элемента управления ListBox действие свойства Locked в значении True аналогично действию свойства Enabled в значении False.
*** Если включен многострочный выбор, свойства Text и Value всегда возвращают значения по умолчанию (пустая строка и Null).

В таблице перечислены только основные, часто используемые свойства списка. Еще больше доступных свойств отображено в окне Properties элемента управления ListBox, а все методы, события и свойства – в окне Object Browser.

Вызывается Object Browser нажатием клавиши «F2». Слева выберите объект ListBox, а справа смотрите его методы, события и свойства.

Свойства BackColor, BorderColor, BorderStyle отвечают за внешнее оформление списка и его границ. Попробуйте выбирать доступные значения этих свойств в окне Properties, наблюдая за изменениями внешнего вида элемента управления ListBox на проекте пользовательской формы.

Способы заполнения ListBox

Используйте метод AddItem для загрузки элементов в список по одному:

With UserForm1.ListBox1

  .AddItem «Значение 1»

  .AddItem «Значение 2»

  .AddItem «Значение 3»

End With

Используйте свойство List, чтобы скопировать одномерный массив значений в элемент управления ListBox.

UserForm1.ListBox1.List = Array(«Текст 1», _

«Текст 2», «Текст 3», «Текст 4», «Текст 5»)

Вместо функции Array можно использовать переменные одномерных и двухмерных массивов. При загрузке значений из двухмерного массива, требуется предварительно указать количество столбцов в списке.

Используйте свойство RowSource, чтобы загрузить в список значения из диапазона ячеек рабочего листа:

UserForm1.ListBox1.RowSource = «Лист1!A1:A6»

При загрузке данных из диапазона, содержащего более одного столбца, требуется предварительно указать количество столбцов в списке:

With UserForm1.ListBox1

  ‘Указываем количество столбцов

  .ColumnCount = 5

  .RowSource = «‘Лист со списком’!A1:E10»

End With

В качестве имени листа используется имя ярлыка. Если имя листа содержит пробелы, оно заключается в одинарные кавычки.

Подробнее о заполнении элемента управления ListBox вы можете ознакомиться в отдельной статье с наглядными примерами.

Привязка списка к ячейке

Для привязки списка к ячейке на рабочем листе используется свойство ControlSource. Суть привязки заключается в том, что при выборе строки в элементе управления, значение свойства Value копируется в привязанную ячейку.

Если привязанная к списку ячейка содержит значение одной из строк элемента управления ListBox, то при запуске пользовательской формы список откроется с выделенной строкой, содержащей это значение. Если привязанная ячейка при загрузке формы пустая, то список откроется без выделения какой-либо строки.

В случае, когда при открытии формы в привязанной к списку ячейке содержится значение, которого нет ни в одной из строк элемента управления ListBox, будет сгенерирована ошибка.

Привязать ячейку к списку можно, указав адрес ячейки в поле свойства ControlSource в окне Properties элемента управления ListBox. Или присвоить адрес ячейки свойству ControlSource в коде VBA Excel:

UserForm1.ListBox1.ControlSource = «Лист1!A2»

Теперь значение выбранной строки в списке автоматически копируется в ячейку «A2» на листе «Лист1»:

Элемент управления ListBox с привязанной ячейкой

В окне Properties адрес указывается без двойных кавычек. Если имя листа содержит пробелы, оно заключается в одинарные кавычки.

Извлечение информации из списка

Первоначально элемент управления ListBox открывается со строками, ни одна из которых не выбрана. При выборе (выделении) строки, ее значение записывается в свойства Value и Text.

Из этих свойств мы с помощью кода VBA Excel извлекаем информацию, выбранную в списке пользователем:

Dim myVar as Variant, myTxt As String

myVar = UserForm1.ListBox1.Value

‘или

myTxt = UserForm1.ListBox1.Text

Вторую строку кода можно записать myVar = UserForm1.ListBox1, так как Value является свойством списка по умолчанию.

Если ни одна позиция в списке не выбрана, свойство Value возвращает значение Null, а свойство Text – пустую строку. Если выбрана строка в многостолбцовом списке, в свойства Value и Text будет записана информация из первого столбца.

Что делать, если понадобятся данные из других столбцов многостолбцового списка, кроме первого?

Для получения данных из любого столбца элемента управления ListBox используется свойство List, а для определения выбранной пользователем строки – ListIndex.

Для тестирования приведенного ниже кода скопируйте таблицу и вставьте ее в диапазон «A1:D4» на листе с ярлыком «Лист1»:

Звери Лев Тапир Вивера
Птицы Грач Сорока Филин
Рыбы Карась Налим Парусник
Насекомые Оса Жук Муравей

Создайте в редакторе VBA Excel пользовательскую форму и добавьте на нее список с именем ListBox1. Откройте модуль формы и вставьте в него следующие процедуры:

Private Sub UserForm_Initialize()

With Me.ListBox1

  ‘Указываем, что у нас 4 столбца

  .ColumnCount = 4

  ‘Задаем размеры столбцов

  .ColumnWidths = «50;50;50;50»

  ‘Импортируем данные

  .RowSource = «Лист1!A1:D4»

  ‘Привязываем список к ячейке «F1»

  .ControlSource = «F1»

End With

End Sub

Private Sub UserForm_Click()

MsgBox Me.ListBox1.List(Me.ListBox1.ListIndex, 2)

End Sub

В процедуре UserForm_Initialize() присваиваем значения некоторым свойствам элемента управления ListBox1 перед открытием пользовательской формы. Процедура UserForm_Click() при однократном клике по форме выводит в MsgBox значение из третьего столбца выделенной пользователем строки.

Результат извлечения данных из многостолбцового элемента управления ListBox

Теперь при выборе строки в списке, значение свойства Value будет записываться в ячейку «F1», а при клике по форме функция MsgBox выведет значение третьего столбца выделенной строки.

Обратите внимание, что при первом запуске формы, когда ячейка «F1» пуста и ни одна строка в ListBox не выбрана, клик по форме приведет к ошибке. Это произойдет из-за того, что свойство ListIndex возвратит значение -1, а это недопустимый номер строки для свойства List.

Если для списка разрешен многострочный выбор (MultiSelect = fmMultiSelectMulti или MultiSelect = fmMultiSelectExtended), тогда, независимо от количества выбранных строк, свойство Value будет возвращать значение Null, а свойство Text – пустую строку. Свойство ListIndex будет возвращать номер строки, которую кликнули последней, независимо от того, что это было – выбор или отмена выбора.

Иногда перед загрузкой в ListBox требуется отобрать уникальные элементы из имеющегося списка. Смотрите, как это сделать с помощью объектов Collection и Dictionary.

title keywords f1_keywords ms.prod api_name ms.assetid ms.date ms.localizationpriority

Names object (Excel)

vbaxl10.chm487072

vbaxl10.chm487072

excel

Excel.Names

ffecf89d-7bae-c470-8e37-608857a9de2a

03/30/2019

medium

Names object (Excel)

A collection of all the Name objects in the application or workbook.

Remarks

Each Name object represents a defined name for a range of cells. Names can be either built-in names—such as Database, Print_Area, and Auto_Open—or custom names.

The RefersTo argument must be specified in A1-style notation, including dollar signs ($) where appropriate. For example, if cell A10 is selected on Sheet1 and you define a name by using the RefersTo argument «=sheet1!A1:B1», the new name actually refers to cells A10:B10 (because you specified a relative reference). To specify an absolute reference, use «=sheet1!$A$1:$B$1».

Example

Use the Names property of the Workbook object to return the Names collection. The following example creates a list of all the names in the active workbook, plus the addresses that they refer to.

Set nms = ActiveWorkbook.Names 
Set wks = Worksheets(1) 
For r = 1 To nms.Count 
    wks.Cells(r, 2).Value = nms(r).Name 
    wks.Cells(r, 3).Value = nms(r).RefersToRange.Address 
Next

Use the Add method to create a name and add it to the collection. The following example creates a new name that refers to cells A1:C20 on the worksheet named Sheet1.

Names.Add Name:="test", RefersTo:="=sheet1!$a$1:$c$20"

Use Names (index), where index is the name index number or defined name, to return a single Name object. The following example deletes the name mySortRange from the active workbook.

ActiveWorkbook.Names("mySortRange").Delete

This example uses a named range as the formula for data validation. This example requires the validation data to be on Sheet 2 in the range A2:A100. This validation data is used to validate data entered on Sheet1 in the range D2:D10.

Sub Add_Data_Validation_From_Other_Worksheet()
'The current Excel workbook and worksheet, a range to define the data to be validated, and the target range
'to place the data in.
Dim wbBook As Workbook
Dim wsTarget As Worksheet
Dim wsSource As Worksheet
Dim rnTarget As Range
Dim rnSource As Range

'Initialize the Excel objects and delete any artifacts from the last time the macro was run.
Set wbBook = ThisWorkbook
With wbBook
    Set wsSource = .Worksheets("Sheet2")
    Set wsTarget = .Worksheets("Sheet1")
    On Error Resume Next
    .Names("Source").Delete
    On Error GoTo 0
End With

'On the source worksheet, create a range in column A of up to 98 cells long, and name it "Source".
With wsSource
    .Range(.Range("A2"), .Range("A100").End(xlUp)).Name = "Source"
End With

'On the target worksheet, create a range 8 cells long in column D.
Set rnTarget = wsTarget.Range("D2:D10")

'Clear out any artifacts from previous macro runs, then set up the target range with the validation data.
With rnTarget
    .ClearContents
    With .Validation
        .Delete
        .Add Type:=xlValidateList, _
             AlertStyle:=xlValidAlertStop, _
             Formula1:="=Source"
        
'Set up the Error dialog with the appropriate title and message
        .ErrorTitle = "Value Error"
        .ErrorMessage = "You can only choose from the list."
    End With
End With

End Sub

Methods

  • Add
  • Item

Properties

  • Application
  • Count
  • Creator
  • Parent

See also

  • Excel Object Model Reference

[!includeSupport and feedback]

Вывод списка имён (Names) книги Excel на новый лист

Если вы хотите посмотреть, присутствуют ли в книге Excel назначенные имена,
сделать это просто — достаточно вызвать диспетчер имён нажатием комбинации клавиш Ctrl + F3: 

В диспетчере имён можно создать новые имена, просмотреть ранее созданные, и, при желании, изменить их.

Одно но: в диспетчере имён отображаются только видимые имена,

а в книге Excel могут присутствовать и скрытые.

Чтобы узнать количество имён в книге, а также посмотреть их значения,
мы воспользуемся макросом:

Sub ПолучениеСпискаИмёнВКниге()
    Dim n As Name, VisibleNames%, HiddenNames%, WB As Workbook, i As Long
    Set WB = ActiveWorkbook
    For Each n In WB.Names
        VisibleNames = VisibleNames - n.Visible
        HiddenNames = HiddenNames - Not n.Visible
    Next n
 
    If VisibleNames + HiddenNames = 0 Then
        MsgBox "Имена в книге отсутствуют (не назначены)", vbInformation
    Else
        msg = "Количество имён в книге: " & VisibleNames + HiddenNames & vbNewLine & _
              "Из них видимых: " & VisibleNames & ", скрытых: " & HiddenNames & vbNewLine & _
              vbNewLine & "Вывести на лист список всех имён?"
        If MsgBox(msg, vbInformation + vbYesNo, "Имена в открытом файле") = vbYes Then
            Dim sh As Worksheet: Set sh = Workbooks.Add(xlWBATWorksheet).Worksheets(1)
            sh.Cells(1, 1).Resize(, 4).Value = _
            Array("№", "Имя", "Видимость", "Ссылка (значение)")
            sh.Cells(1, 1).Resize(, 4).Interior.ColorIndex = 15
            For i = 1 To WB.Names.Count
                Set n = WB.Names(i)
                sh.Cells(i + 1, 1).Resize(, 4).Value = _
                Array(i, n.Name, IIf(n.Visible, "Видимое", "Скрытое"), "'" & n.RefersTo)
            Next i
            sh.UsedRange.EntireColumn.AutoFit
        End If
    End If
End Sub

Для этого в прикреплённом файле нажмём зеленую кнопку,
и увидим вообщение с информацией о количестве имен в книге:

Если в диаоговом окне мы нажмём «Да», то макрос создаст новую книгу, и сформирует в ней таблицу со списком всех имен книги:

Если же вам требуется вывести список видимых имён на лист Excel, то можно воспользоваться макросом из одной строки:

Sub СписокВидимыхИмён()
    ActiveCell.ListNames
End Sub

Того же эффекта можно добиться, нажав кнопку «Все имена» в диалоговом окне, вызываемом из меню Вставка — Имя — Вставить… (в Excel 2003):

  • 29049 просмотров

Не получается применить макрос? Не удаётся изменить код под свои нужды?

Оформите заказ у нас на сайте, не забыв прикрепить примеры файлов, и описать, что и как должно работать.

Что такое список в Excel VBA?

Поле списка в Excel VBA представляет собой список, назначенный переменной. Этот список имеет различные входы для выбора и позволяет выбрать несколько вариантов одновременно. Список можно вставить в пользовательскую форму, выбрав параметр списка.

Списки используют именованные диапазоны, имеющие определенные значения. Целью использования списка является отображение списка значений, из которых пользователи могут выбирать.

Оглавление

  • Что такое список в Excel VBA?
    • Как создать список в Excel?
    • Как создать список в VBA?
    • Как создать список в пользовательской форме?
    • Как добавить динамический элемент управления в список?
    • Как добавить элементы в список элементов управления в VBA?
    • Как удалить элементы из списка элементов управления с помощью VBA?
    • Пример
    • Константы списка в VBA
    • Часто задаваемые вопросы
    • Рекомендуемые статьи

Как создать список в Excel?

Шаги для создания списка в Excel перечислены ниже:

  1. Шаг 1. Включите вкладку «Разработчик» на ленте Excel, чтобы получить доступ к элементам управления ActiveX. В диалоговом окне «Параметры Excel» нажмите «Настроить ленту в Excel» и установите флажок «Разработчик».
    Шаг 2: На вкладке «Разработчик» нажмите «Вставить», а затем элемент управления «список». Это вставит новый список на лист Excel.

    Список-окно-в-Excel-1

  2. Шаг 3: Нарисуйте прямоугольник на листе Excel, чтобы создать список, как показано на следующем рисунке.

    Список-окно-в-Excel-2

  3. Шаг 4: Выберите список, перейдите на вкладку «Разработчик» и выберите «Свойства». Откроется окно «Свойства».

    Список-окно-в-Excel-3

  4. Шаг 5: В окне «Свойства» введите «дни» в «ListFillRange». «Дни» — это именованный диапазон дней недели.

    Список-окно-в-Excel-4

  5. Шаг 6: Щелкните свойство «MultiSelect». В раскрывающемся списке выберите «1-fmMultiSelectMulti», как показано на следующем изображении.

    Список-окно-в-Excel-5

  6. Шаг 7: Щелкните свойство «ListStyle». В раскрывающемся списке выберите «1-fmListStyleOption». Это добавит флажки слева от перечисленных элементов, как показано на следующем рисунке.

    Список-окно-в-Excel-6

  7. Шаг 8: Закройте окно «Свойства». Окно со списком выглядит так, как показано на следующем рисунке.

    Список-окно-в-Excel-7

    Примечание: Вы можете выбрать «режим дизайна выключен», нажав «Режим дизайна». Это закрывает «режим проектирования».

Как создать список в VBA?

Шаги для создания списка в VBA перечислены ниже:

.free_excel_div{фон:#d9d9d9;размер шрифта:16px;радиус границы:7px;позиция:относительная;margin:30px;padding:25px 25px 25px 45px}.free_excel_div:before{content:»»;фон:url(центр центр без повтора #207245;ширина:70px;высота:70px;позиция:абсолютная;верх:50%;margin-top:-35px;слева:-35px;граница:5px сплошная #fff;граница-радиус:50%} Вы можете скачать этот шаблон Excel для списков здесь — Шаблон Excel для списков

  • Шаг 1: Щелкните правой кнопкой мыши список и убедитесь, что выбран режим разработки. Это связывает поле со списком с ячейкой.
  • Шаг 2: В «свойствах» перейдите к свойству «LinkedCell» и заполните «B17», как показано на следующем рисунке.

Список в Excel 8

  • Шаг 3: В «ListFillRange» введите «Месяц».

Список в Excel 9

  • Шаг 4: Окно со списком выглядит так, как показано на следующем изображении.

Список в Excel 10

Данные в ячейке B17 изменяются, когда вы меняете свой выбор в списке. Это показано на следующем изображении.

Список в Excel 11

Как создать список в пользовательской форме?

Шаги для создания списка в пользовательской форме перечислены ниже:

  • Шаг 1: На вкладке «Разработчик» нажмите «Visual Basic» в разделе «Код» или нажмите клавиши ALT+F11.

Список в Excel 12

  • Шаг 2: В меню «Вставка» нажмите «Пользовательская форма».

Список в Excel 13

  • Шаг 3: Из панели инструментов перетащите элемент управления списком на «Пользовательскую форму».

Список в Excel 14

  • Шаг 4: Дважды щелкните «UserForm» и выберите «Событие UserForm», как показано на следующем снимке экрана.

Список в Excel 15

  • Шаг 5: Добавьте следующий код в промежуточную процедуру.

Частная подпрограмма UserForm_Initialize()

ListBox1.AddItem «MBA»

ListBox1.AddItem «MCA»

ListBox1.AddItem «MSC»

ListBox1.AddItem «MECS»

ListBox1.AddItem «CA»

Конец сабвуфера

Список в Excel 16

  • Шаг 6: Нажмите F5, чтобы запустить код.

Как добавить динамический элемент управления в список?

Действия по добавлению динамического элемента управления в поле со списком в форме UserForm с помощью VBAUserForm Использование VBA В VBA пользовательские формы представляют собой настраиваемые определяемые пользователем формы, предназначенные для приема пользовательского ввода в виде формы. Он имеет различные наборы элементов управления для добавления, такие как текстовые поля, флажки и метки. Подробнее перечислены ниже:

  • Шаг 1: На панели инструментов добавьте «CommandButton» в «UserForm».

Список в Excel 17

  • Шаг 2: Щелкните правой кнопкой мыши «Командную кнопку» и выберите «Свойства».

Список в Excel 18

  • Шаг 3: Измените заголовок «CommandButton» на «Create_Listbox».

Список в Excel 20

  • Шаг 4: Дважды щелкните кнопку команды, и появится следующий код.

Частная подпрограмма CommandButton1_Click()

Конец сабвуфера

Список в Excel 21

  • Шаг 5: Назовите следующую процедуру «Add_Dynamic_Listbox».

Подпрограмма Add_Dynamic_Listbox()

‘Добавить окно динамического списка и назначить его объекту ‘LstBx’

Установите LstBx = UserForm3.Controls.Add(«Forms.ListBox.1»)

‘Позиция списка

LstBx.Left = 20

LstBx.Top = 10

Конец сабвуфера

  • Шаг 6: Нажмите F5, чтобы запустить макрос.

Как добавить элементы в список элементов управления в VBA?

Код для добавления элементов в элемент управления списком в VBA упоминается следующим образом:

Частная подпрограмма Insert _Items _To_LstBox ()

ListBox1.AddItem «Элемент 1»

ListBox1.AddItem «Элемент 2»

ListBox1.AddItem «Элемент 3»

ListBox1.AddItem «Элемент 4»

ListBox1.AddItem «Элемент 5»

Конец сабвуфера

Как удалить элементы из списка элементов управления с помощью VBA?

Код для удаления элементов из элемента управления списком в VBA упоминается следующим образом:

Sub Clr_LstBx()

UserForm3.ListBox1.Clear

Конец сабвуфера

Пример

Допустим, у нас есть ежедневные данные о продажах. Мы хотим подготовить графический пользовательский интерфейс этих данных о продажах, который позволит нам выбирать элементы из списка. Чтобы получить данные о продажах, мы должны изменить ячейку индекса на «ссылку на ячейку» и применить формулу ВПРФормула ВПРФункция Excel выполняет поиск определенного значения и возвращает соответствующее совпадение на основе уникального идентификатора. Уникальный идентификатор однозначно связан со всеми записями базы данных. Например, идентификатор сотрудника, номер списка учащихся, контактный номер клиента, адрес электронной почты продавца и т. д. являются уникальными идентификаторами. читайте больше, как показано на следующих изображениях.

Список в Excel 22Список в Excel 23

Константы списка в VBA

Константы, их значения и описание приведены в следующей таблице:

Список в Excel 24

Часто задаваемые вопросы

#1 – Как использовать список в Excel?

Списки используются для управления таблицами в пользовательской форме. Строки информации аккуратно управляются без ненужного отображения информации в пользовательской форме.

Пользователь может прокручивать элементы списка. Настройка «типа выбора» позволяет пользователям выбирать несколько вариантов из списка. Когда пользователь выбирает элемент из списка, с таким выбором предпринимается действие.

По умолчанию поле со списком выдает результат, соответствующий порядковому номеру выбранного элемента. Таким образом, если выбран четвертый элемент, на выходе будет число 4.

# 2 — Как заполнить список в Excel VBA?

Обычно список необходимо заполнять значениями каждый раз при открытии рабочей книги. Процедура «Открыть» выполняется каждый раз при открытии Рабочей книги.

Для заполнения списка необходимо использовать следующий код:

С Sheet1.lstListBox
.AddItem «Джеймс»
.AddItem «Келли»
.AddItem «Элизабет»
.AddItem «Джордж»
.AddItem «Уильям»
Конец с

С этим кодом список заполняется 5 именами — Джеймс, Келли, Элизабет, Джордж и Уильям.

#3 – Как получить данные из списка в Excel?

Данные могут быть эффективно использованы только при правильном их извлечении. Шаги для извлечения данных из списка перечислены ниже:

1. Выберите «Управление форматом» в меню после щелчка правой кнопкой мыши по списку.
2. В поле «Ссылка на ячейку» введите координаты пустой ячейки.
3. Выберите ячейку, в которой будут отображаться данные из списка. Необходимо использовать следующую формулу:
«=ИНДЕКС([begin cell]:[end cell],[cell link],0)”

Примечание: «Начальная ячейка» означает первую ячейку списка. «Конечная ячейка» означает последнюю ячейку списка. «Ссылка на ячейку» означает ячейку, координаты которой были введены на втором шаге.

№ 4. В чем разница между списком и полем со списком?

Различия между полем со списком и полем со списком перечислены ниже.

– Окно списка состоит из списка элементов и позволяет пользователям выбирать один или несколько параметров. Напротив, поле со списком состоит из комбинации текстового поля и раскрывающегося списка. Текстовое поле позволяет пользователям вводить элемент. Выпадающий список позволяет пользователям выбирать элемент.
– В поле со списком отображаются все элементы в заданной области сразу, а в поле со списком — по одному элементу за раз. Элементы раскрывающегося списка поля со списком видны, когда пользователь щелкает
это.
– В поле со списком пользователь должен выбирать из доступных элементов, тогда как в поле со списком пользователь может ввести элемент, которого нет в списке.
– Окно списка используется, когда ввод ограничен элементами списка. Однако поле со списком используется там, где упоминается список предлагаемых вариантов.
– Окно со списком занимает больше места, поскольку сразу отображается полный список. С другой стороны, поле со списком помещается на маленьком пространстве, потому что список отображается только при нажатии кнопки
Кнопка «Стрелка вниз.

  • Поле со списком в Excel — это список, назначенный переменной, который можно использовать для выбора нескольких элементов.
  • В пользовательской форме список можно вставить, выбрав параметр списка.
  • При создании списка в Excel необходимо ввести данные в свойствах «ListFillRange», «MultiSelect» и «ListStyle».
  • «Режим дизайна» можно отключить, нажав «Режим дизайна».
  • При создании списка в пользовательской форме щелкните «Visual Basic» или нажмите клавиши ALT+F11.

Рекомендуемые статьи

Это было руководство по списку в Excel VBA. Здесь мы обсуждаем, как создать поле списка на листе Excel и в пользовательских формах, а также приводим практические примеры и загружаемые шаблоны. Вы также можете посмотреть на эти полезные функции в Excel –

  • Редактировать раскрывающийся список в ExcelРедактировать раскрывающийся список в ExcelРаскрывающиеся списки в Excel помогают пользователю вручную вводить данные в ячейку с определенными значениями на выбор.Подробнее
  • Флажок в ExcelФлажок в ExcelФлажок в Excel представляет собой квадратное поле, используемое для представления вариантов (или выбора) пользователю для выбора.Подробнее
  • Функция VBA MsgBoxVBA MsgBoxVBA MsgBox — это функция вывода, которая отображает обобщенное сообщение, предоставленное разработчиком. Этот оператор не имеет аргументов, и персонализированные сообщения в этой функции записываются в двойных кавычках, а для значений предоставляется ссылка на переменную.Подробнее
 

apfu

Пользователь

Сообщений: 20
Регистрация: 20.12.2018

Помогите пожалуйста получить список имен диапазонов из диспетчера имен из закрытой книги с помощью vba с помощью vba. Есть файл, в котором в столбце А указаны пути к файлам с таблицами. В этих файлах возникают неправильные имена умных таблиц и из большого количества файлов необходимо найти те, где имена таблиц неправильные, чтобы зайти в них и исправить.

 

Jack Famous

Пользователь

Сообщений: 10848
Регистрация: 07.11.2014

OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome

apfu, открыть книгу, пробежаться циклом по коллекции ActiveWorkbook.Names и запомнить в массив, закрыть книгу

Изменено: Jack Famous17.09.2021 14:42:51

Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄

 

apfu

Пользователь

Сообщений: 20
Регистрация: 20.12.2018

Jack Famous

, Спасибо за оперативный ответ. Логику я понимаю, Вы правильно написали: открыть книгу, пробежаться циклом по коллекции ActiveWorkbook.Names и запомнить в массив, закрыть книгу, и в исходном файле вывести список имен с указанием их диапазонов.
Проблема заключается в том, что я не умею писать коды VBA. Я два дня искал подобный вопрос и его решение по форумам Excel, но ничего не нашел. Есть один вариант, но там выводится список из диспетчера имен того файла, гле находится сам макрос, а поменять на то, чтобы получать из другой закрытой книги у меня не получается.

 

Jack Famous

Пользователь

Сообщений: 10848
Регистрация: 07.11.2014

OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome

#4

17.09.2021 15:50:11

Цитата
apfu: Я два дня искал подобный вопрос и его решение по форумам Excel, но ничего не нашел

Вывод списка имён (Names) книги Excel на новый лист

Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄

 

apfu

Пользователь

Сообщений: 20
Регистрация: 20.12.2018

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

Изменено: vikttur17.09.2021 16:47:28

 

New

Пользователь

Сообщений: 4581
Регистрация: 06.01.2013

apfu, из закрытой не получится. Нужно макросом открыть книгу, считать имена, закрыть книгу

 

МатросНаЗебре

Пользователь

Сообщений: 5516
Регистрация: 05.02.2014

#7

17.09.2021 16:12:15

Код
Option Explicit

Sub Main()
    Dim arr As Variant
    arr = ShowFileDialog()
    If UBound(arr) > 0 Then
        Dim wb As Workbook
        Application.EnableEvents = False
        Set wb = Workbooks.Open(arr(1), False, True)
        
        Dim brr As Variant
        brr = GetNamesArr(wb)
        wb.Close False
        
        Set wb = Workbooks.Add(1)
        With wb.Sheets(1).Cells(1, 1).Resize(UBound(brr, 1), UBound(brr, 2))
            .NumberFormat = "@"
            .Cells = brr
        End With
            
        Application.EnableEvents = True
    End If
End Sub

Function GetNamesArr(wb As Workbook) As Variant
    Dim arr As Variant
    ReDim arr(1 To 1, 1 To 1)
    Dim dic As Object
    Set dic = CreateObject("Scripting.Dictionary")
    
    Dim n As Name
    For Each n In wb.Names
        dic.Item(n.Name) = Array("Книга", n.Value)
    Next
    Dim sh As Worksheet
    For Each sh In wb.Sheets
    For Each n In sh.Names
        dic.Item(n.Name) = Array(sh.Name, n.Value)
    Next
    Next
    
    If dic.Count > 0 Then
        ReDim arr(1 To dic.Count, 1 To 3)
        Dim arK As Variant
        Dim arI As Variant
        arK = dic.Keys()
        arI = dic.Items()
        Dim y As Long
        For y = 1 To UBound(arr, 1)
            arr(y, 1) = arI(y - 1)(0)
            arr(y, 2) = arK(y - 1)
            arr(y, 3) = arI(y - 1)(1)
        Next
    End If
    GetNamesArr = arr
End Function

Function ShowFileDialog() As Variant
    Dim arr As Variant
    ReDim arr(0 To 0)
    Dim oFD As FileDialog
    Dim x, lf As Long
    'назначаем переменной ссылку на экземпляр диалога
    Set oFD = Application.FileDialog(msoFileDialogFilePicker)
    With oFD 'используем короткое обращение к объекту
    'так же можно без oFD
    'With Application.FileDialog(msoFileDialogFilePicker)
        .AllowMultiSelect = False
        .Title = "Выбрать файлы отчетов" 'заголовок окна диалога
        .Filters.Clear 'очищаем установленные ранее типы файлов
        .Filters.Add "Excel files", "*.xls*;*.xla*", 1 'устанавливаем возможность выбора только файлов Excel
        '.Filters.Add "Text files", "*.txt", 2 'добавляем возможность выбора текстовых файлов
        .FilterIndex = 1 'устанавливаем тип файлов по умолчанию - Text files(Текстовые файлы)
        .InitialFileName = ThisWorkbook.Path 'назначаем папку отображения и имя файла по умолчанию
        .InitialView = msoFileDialogViewDetails 'вид диалогового окна(доступно 9 вариантов)
        If oFD.Show = 0 Then 'показывает диалог
        Else
            ReDim arr(1 To .SelectedItems.Count)
            'цикл по коллекции выбранных в диалоге файлов
            For lf = 1 To .SelectedItems.Count
                arr(lf) = .SelectedItems(lf) 'считываем полный путь к файлу
            Next
        End If
    End With
    ShowFileDialog = arr
End Function
 

БМВ

Модератор

Сообщений: 21378
Регистрация: 28.12.2016

Excel 2013, 2016

#8

17.09.2021 16:18:11

Цитата
apfu написал:
В этих файлах возникают неправильные имена умных таблиц

а по любому это не имена в том виде который описан. Так что….
крутить еще два циклв по Worksheets.ListObjects.Name

Изменено: БМВ17.09.2021 16:21:49

По вопросам из тем форума, личку не читаю.

 

RAN

Пользователь

Сообщений: 7091
Регистрация: 21.12.2012

#9

17.09.2021 16:29:31

Цитата
apfu написал:
список имен диапазонов

и

Цитата
apfu написал:
имена умных таблиц

это разные вещи, хотя и то, и другое отображается в диспетчере задач.

Код
Sub qq()
    Dim sh As Worksheet, lb As ListObject
    For Each sh In ActiveWorkbook.Worksheets
        For Each lb In sh.ListObjects
            Debug.Print lb.Name
        Next
    Next
End Sub
 

apfu

Пользователь

Сообщений: 20
Регистрация: 20.12.2018

МатросНаЗебре, Спасибо большое. но есть проблемы: выводятся только определенные имена, а имена таблиц нет. В столбце А — «Область». в в столбце В — «Имя» (но почему-то по «1_ФОТ’!Print_Area» и «2_командировки’!Print_Area» в имени «область печати» хотя по Print_Area понять можно, в столбце С — «Диапазон».
Можно ли чтобы выводились и имена таблиц с теми же параметрами?
Скриншоты приложил.

 

apfu

Пользователь

Сообщений: 20
Регистрация: 20.12.2018

RAN, Спасибо, я таких тонкостей не знал. Попробовал Ваш код. но у меня ничего не получилось. Как его использовать или как-то изменить код МатросНаЗебре,

 

RAN

Пользователь

Сообщений: 7091
Регистрация: 21.12.2012

#12

17.09.2021 17:27:26

Цитата
apfu написал:
как-то изменить код  МатросНаЗебре

Я же не гадалка.
Вам лень правила прочитать, значит и ответ не шибко надобен.

Изменено: RAN17.09.2021 17:28:46

 

apfu

Пользователь

Сообщений: 20
Регистрация: 20.12.2018

RAN, я действительно попробовал Ваш код: вставил в модуль, запустил, ничего не произошло, по этому и задал вопрос как использовать Ваш код.
Ответ мне шибко надобен, поэтому еще раз прочитал правила и не понял, чем оскорбил. Если уточните, то постараюсь исправить.

 

RAN

Пользователь

Сообщений: 7091
Регистрация: 21.12.2012

#14

17.09.2021 18:56:16

Цитата
apfu написал:
Если уточните, то постараюсь исправить

Уточняю.
Для того, чтобы тренироваться на кошках, нужно этих кошек иметь.

 

New

Пользователь

Сообщений: 4581
Регистрация: 06.01.2013

apfu, от вас нужен небольшой файл-пример (это написано в правилах, вы никого не оскорбляли)

 

Дмитрий(The_Prist) Щербаков

Пользователь

Сообщений: 14182
Регистрация: 15.09.2012

Профессиональная разработка приложений для MS Office

#16

18.09.2021 14:31:18

Цитата
apfu написал:
вставил в модуль, запустил, ничего не произошло,

а если в редакторе VBE нажать сочетания клавиш Ctrl+G, а потом запустить? :)
По сути код не шибко сложный:

Код
Sub GetLO()
    Dim wb As Workbook, sh As Worksheet, lb As ListObject
    Dim sh_res As Worksheet
    Dim sf$, res(), lr&
    
    sf = Application.GetOpenFilename("Excel files(*.xls*),*.xls*", 1, "Выбрать файл Excel", , False)
    If VarType(sf) = vbBoolean Then
        Exit Sub
    End If
    
    Application.ScreenUpdating = 0
    Set sh_res = ActiveWorkbook.Sheets.Add(ActiveWorkbook.Sheets(1))
    Set wb = Application.Workbooks.Open(sf)
    ReDim res(1 To 10000, 1 To 3)
    lr = 1
    res(lr, 1) = "Лист"
    res(lr, 2) = "Имя таблицы"
    res(lr, 3) = "Адрес таблицы"
    For Each sh In wb.Worksheets
        For Each lb In sh.ListObjects
            lr = lr + 1
            res(lr, 1) = sh.Name
            res(lr, 2) = lb.Name
            res(lr, 3) = lb.Range.Address(external:=True)
        Next
    Next
    sh_res.Cells(1, 1).Resize(lr, 3).Value = res
    wb.Close False
    Application.ScreenUpdating = 1
End Sub

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы…

 

apfu

Пользователь

Сообщений: 20
Регистрация: 20.12.2018

Дмитрий(The_Prist) Щербаков, Спасибо огромное,
1. вставил в модуль от RAN, в редакторе, нажал сочетания клавиш Ctrl+G, а потом запустил, также ничего не произошло. Может я делаю что то не так.
2. Может быть для Вас это не шибко сложно, для меня это профессионально сделанный код. Еще раз огромное Спасибо, все прекрасно работает., это уже огромная помощь в решении моей задачи, но …
3. У меня есть 3 папки в которых по 100 файлов-отчетов. Я захожу в каждый фай и проверяю в диспетчере имен наличие ошибок. Сделал книгу, где получаю адреса (полный путь) к файлам-отчетов из папок. Была задумка получать список имен умных таблиц (в т.ч. имен диапазонов) из диспетчера имен файлов-отчетов и в каком есть ошибки конкретно заходить и исправлять не перебирая все файлы.
Можно ли изменить Ваш код так, чтобы выбирая в ячейке последовательно адреса (полный путь) к файлам-отчетов из папок или выбирая в диалоговом окне все файлы-отчетов из папки, получать список имен умных таблиц (в т.ч. имен диапазонов) из диспетчера имен, и где ошибки, уже конкретно заходить и исправлять.

 

Дмитрий(The_Prist) Щербаков

Пользователь

Сообщений: 14182
Регистрация: 15.09.2012

Профессиональная разработка приложений для MS Office

#18

18.09.2021 17:28:06

Цитата
apfu написал:
также ничего не произошло

потому что надо запускать когда активна книга с таблицами. Тогда в окне, отображенным по Ctrl+G, будет список.

Цитата
apfu написал:
Можно ли изменить Ваш код так

вообще лучше сразу писать задачу так, как хотите видеть её в итоге, раз в кодах не разбираетесь :) Подкорректировал

Код
Sub GetLO()
    Dim wb As Workbook, sh As Worksheet, lb As ListObject
    Dim sh_res As Worksheet
    Dim sf, af, res(), lr&
    
    af = Application.GetOpenFilename("Excel files(*.xls*),*.xls*", 1, "Выбрать файлы Excel", , True)
    If VarType(af) = vbBoolean Then
        Exit Sub
    End If
    
    Application.ScreenUpdating = 0
    Set sh_res = ActiveWorkbook.Sheets.Add(ActiveWorkbook.Sheets(1))
    ReDim res(1 To 10000, 1 To 4)
    lr = 1
    res(lr, 1) = "Книга"
    res(lr, 2) = "Лист"
    res(lr, 3) = "Имя таблицы"
    res(lr, 4) = "Адрес таблицы"
    For Each sf In af
        Set wb = Application.Workbooks.Open(sf)
        For Each sh In wb.Worksheets
            For Each lb In sh.ListObjects
                lr = lr + 1
                res(lr, 1) = wb.Name
                res(lr, 2) = sh.Name
                res(lr, 3) = lb.Name
                res(lr, 4) = lb.Range.Address(external:=True)
            Next
        Next
        wb.Close False
    Next
    sh_res.Cells(1, 1).Resize(lr, 4).Value = res
    Application.ScreenUpdating = 1
End Sub

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы…

 

apfu

Пользователь

Сообщений: 20
Регистрация: 20.12.2018

#19

18.09.2021 17:54:25

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

Понравилась статья? Поделить с друзьями:
  • Vba значение поля word
  • Vba запрет на редактирование ячейки в excel
  • Vba заполнение таблиц excel
  • Vba запись в файл word
  • Vba макрос excel заливка ячейки