Перейти к содержимому

Excel vba воспринимать текстовую переменную как список

  • автор:

Excel vba воспринимать текстовую переменную как список

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

Макрос работает только при активном листе «Sheet1» и поле C2.

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

Макрос работает только при активном листе «Sheet1» и поле C2. Almost

К сообщению приложен файл: test.xlsb (21.0 Kb)

Сообщение Добрый день!

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

Макрос работает только при активном листе «Sheet1» и поле C2. Автор — Almost
Дата добавления — 16.07.2023 в 21:32

Группа: Друзья
Ранг: Участник клуба
Сообщений: 3249
Замечаний: 0% ±

2019
Добрый день.
Вот так работает:
[vba]

For lDx = 1 To lDx ‘цикл по массиву ошибок
If aMist(lDx, 5) = sMis Then ‘если попался выбранный код ошибки
‘sRows = sRows & «, «»» & CStr(aMist(lDx, 1)) & «»»»
sRows = sRows & «|» & aMist(lDx, 1)
‘Накопление строк с ошибкой»
End If
Next lDx

‘ sRows = Right(sRows, Len(sRows) — 2) ‘Обрезка первой запятой с пробелом
sRows = Mid(sRows, 2) ‘Обрезка

wsRep.Select ‘Фокус на отчёт
wsRep.Range(«A5:EA5»).AutoFilter ‘Снятие фильтров

lDx = wsRep.Cells(wsRep.Rows.Count, «A»).End(xlUp).Row ‘Количество строк в отчёте
‘ wsRep.Range(«A5:EA» & lDx).AutoFilter Field:=3, Criteria1:=Array(sRows), Operator:=xlFilterValues
wsRep.Range(«A5:EA» & lDx).AutoFilter Field:=3, Criteria1:=Split(sRows, «|»), Operator:=xlFilterValues

Добрый день.
Вот так работает:
[vba]

For lDx = 1 To lDx ‘цикл по массиву ошибок
If aMist(lDx, 5) = sMis Then ‘если попался выбранный код ошибки
‘sRows = sRows & «, «»» & CStr(aMist(lDx, 1)) & «»»»
sRows = sRows & «|» & aMist(lDx, 1)
‘Накопление строк с ошибкой»
End If
Next lDx

‘ sRows = Right(sRows, Len(sRows) — 2) ‘Обрезка первой запятой с пробелом
sRows = Mid(sRows, 2) ‘Обрезка

wsRep.Select ‘Фокус на отчёт
wsRep.Range(«A5:EA5»).AutoFilter ‘Снятие фильтров

lDx = wsRep.Cells(wsRep.Rows.Count, «A»).End(xlUp).Row ‘Количество строк в отчёте
‘ wsRep.Range(«A5:EA» & lDx).AutoFilter Field:=3, Criteria1:=Array(sRows), Operator:=xlFilterValues
wsRep.Range(«A5:EA» & lDx).AutoFilter Field:=3, Criteria1:=Split(sRows, «|»), Operator:=xlFilterValues

Сообщение Добрый день.
Вот так работает:
[vba]

For lDx = 1 To lDx ‘цикл по массиву ошибок
If aMist(lDx, 5) = sMis Then ‘если попался выбранный код ошибки
‘sRows = sRows & «, «»» & CStr(aMist(lDx, 1)) & «»»»
sRows = sRows & «|» & aMist(lDx, 1)
‘Накопление строк с ошибкой»
End If
Next lDx

‘ sRows = Right(sRows, Len(sRows) — 2) ‘Обрезка первой запятой с пробелом
sRows = Mid(sRows, 2) ‘Обрезка

wsRep.Select ‘Фокус на отчёт
wsRep.Range(«A5:EA5»).AutoFilter ‘Снятие фильтров

lDx = wsRep.Cells(wsRep.Rows.Count, «A»).End(xlUp).Row ‘Количество строк в отчёте
‘ wsRep.Range(«A5:EA» & lDx).AutoFilter Field:=3, Criteria1:=Array(sRows), Operator:=xlFilterValues
wsRep.Range(«A5:EA» & lDx).AutoFilter Field:=3, Criteria1:=Split(sRows, «|»), Operator:=xlFilterValues

[/vba] Автор — Hugo
Дата добавления — 16.07.2023 в 21:45
Группа: Админы
Ранг: Местный житель
Сообщений: 19095
Замечаний: ±

Excel 365 & Mac Excel
Можно сформировать массив значений и его уже использовать в качестве критерия
[vba]

Dim arr(), ims As Long
For lDx = 1 To lDx ‘цикл по массиву ошибок
If aMist(lDx, 5) = sMis Then ‘если попался выбранный код ошибки

ReDim Preserve arr(0 To ims)
arr(ims) = CStr(aMist(lDx, 1))
ims = ims + 1
End If
Next lDx

wsRep.Select ‘Фокус на отчёт
wsRep.Range(«A5:EA5»).AutoFilter ‘Снятие фильтров

lDx = wsRep.Cells(wsRep.Rows.Count, «A»).End(xlUp).Row ‘Количество строк в отчёте
wsRep.Range(«A5:EA» & lDx).AutoFilter Field:=3, Criteria1:=arr, Operator:=xlFilterValues

Можно сформировать массив значений и его уже использовать в качестве критерия
[vba]

Dim arr(), ims As Long
For lDx = 1 To lDx ‘цикл по массиву ошибок
If aMist(lDx, 5) = sMis Then ‘если попался выбранный код ошибки

ReDim Preserve arr(0 To ims)
arr(ims) = CStr(aMist(lDx, 1))
ims = ims + 1
End If
Next lDx

wsRep.Select ‘Фокус на отчёт
wsRep.Range(«A5:EA5»).AutoFilter ‘Снятие фильтров

lDx = wsRep.Cells(wsRep.Rows.Count, «A»).End(xlUp).Row ‘Количество строк в отчёте
wsRep.Range(«A5:EA» & lDx).AutoFilter Field:=3, Criteria1:=arr, Operator:=xlFilterValues

Сообщение Можно сформировать массив значений и его уже использовать в качестве критерия
[vba]

Dim arr(), ims As Long
For lDx = 1 To lDx ‘цикл по массиву ошибок
If aMist(lDx, 5) = sMis Then ‘если попался выбранный код ошибки

ReDim Preserve arr(0 To ims)
arr(ims) = CStr(aMist(lDx, 1))
ims = ims + 1
End If
Next lDx

wsRep.Select ‘Фокус на отчёт
wsRep.Range(«A5:EA5»).AutoFilter ‘Снятие фильтров

lDx = wsRep.Cells(wsRep.Rows.Count, «A»).End(xlUp).Row ‘Количество строк в отчёте
wsRep.Range(«A5:EA» & lDx).AutoFilter Field:=3, Criteria1:=arr, Operator:=xlFilterValues

Объявление переменных

При объявлении переменных обычно используется оператор Dim. Оператор объявления может быть помещен внутрь процедуры для создания переменной на уровне процедуры. Или он может быть помещен в начале модуля в разделе объявлений, чтобы создать переменную на уровне модуля.

В примере ниже создается переменная и указывается тип данных «String».

Dim strName As String 

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

Чтобы предоставить доступ к переменной всем процедурам проекта, перед ней нужно поставить оператор Public, как показано в примере ниже:

Public strName As String 

Дополнительные сведения об именовании переменных см. в статье Правила именования в Visual Basic.

Переменные могут быть объявлены одним из следующих типов данных: Boolean, Byte, Integer, Long, Currency, Single, Double, Date, String (для строк переменной длины), String * length (для строк фиксированной длины), Object или Variant. Если тип данных не указан, по умолчанию присваивается тип данных Variant. Вы также можете создать определяемый пользователем тип с помощью оператора Type.

Вы можете объявить несколько переменных в одном операторе. Чтобы указать тип данных, необходимо задать тип данных для каждой переменной.

В приведенном ниже операторе переменные intX , intY и intZ объявлены типом Integer.

Dim intX As Integer, intY As Integer, intZ As Integer 

В приведенном ниже операторе intX и intY объявлены как Variant и только intZ объявлен как тип Integer.

Dim intX, intY, intZ As Integer 

Нет необходимости указывать тип данных переменной в операторе объявления. Если вы не укажите тип данных, переменной будет присвоен тип Variant.

Сокращение для объявления переменных x и y типом Integer в приведенном выше операторе

Dim intX%, intY%, intZ as Integer 

Сокращение для типов: % -integer; & -long; @ -currency; # -double; ! – Single; $ – String

Оператор Public

Используйте оператор Public для объявления общих переменных на уровне модуля.

Public strName As String 

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

Оператор Private

Используйте оператор Private для объявления частных переменных на уровне модуля.

Private MyName As String 

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

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

Оператор Static

Если для объявления переменной в процедуре используется оператор Static вместо оператора Dim, объявленная переменная сохраняет свое значение между вызовами в этой процедуре.

Оператор Option Explicit

В Visual Basic можно неявно объявить переменную, просто используя оператор присвоения значения. Все неявно объявленные переменные относятся к типу Variant. Для переменных типа Variant требуется больший объем памяти, чем для большинства других переменных. Приложение будет работать эффективнее, если переменные будут явно объявленными и им будет присвоен определенный тип данных. Явное объявление переменных снижает вероятность возникновения ошибок, вызванных конфликтом имен или опечатками.

Если вы не хотите, чтобы в Visual Basic были неявные объявления, то оператор Option Explicit должен стоять в модуле перед всеми процедурами. Этот оператор требует явного объявления всех переменных модуля. Если модуль содержит оператор Option Explicit, то при обнаружении необъявленной ранее переменной или опечатки в ее имени Visual Basic выдаст ошибку времени компиляции.

В программной среде Visual Basic имеется возможность задавать параметр, который будет автоматически включать оператор Option Explicit во все новые модули. Справочная информация по изменению параметров среды Visual Basic предоставлена в документации приложения. Обратите внимание, что данный параметр не меняет уже написанный код.

Статические и динамические массивы нужно объявлять в явном виде.

Объявление объектной переменной для автоматизации

При использовании приложения для управления объектами другого приложения необходимо указать ссылку на библиотеку типов этого другого приложения. Когда ссылка указана, можно объявлять объектные переменные в соответствии с наиболее подходящими для них типами. Например, если вы указываете ссылку на библиотеку типов Microsoft Excel при работе в Microsoft Word, то можете объявить переменную типа Worksheet внутри Word, чтобы она представляла объект Worksheet приложения Excel.

При использовании другого приложения для управления объектами Microsoft Access, как правило, можно объявлять объектные переменные согласно наиболее подходящим для них типам. Вы можете также использовать ключевое слово New для автоматического создания нового экземпляра объекта. Однако может возникнуть необходимость указать, что объект принадлежит Microsoft Access. Например, при объявлении объектной переменной, представляющей форму Access внутри Visual Basic, необходимо сделать различимыми объект Form приложения Access и объект Form приложения Visual Basic. Для этого следует включать имя библиотеки типов в объявление переменной, как показано в примере ниже:

Dim frmOrders As New Access.Form 

Некоторые приложения не распознают отдельные объектные типы Access. Даже если в этих приложениях указана ссылка на библиотеку типов Access, все объектные переменные Access необходимо объявлять с типом Object. Также невозможно использовать ключевое слово New для создания нового экземпляра объекта.

В примере ниже показано, как объявлять переменную, представляющую экземпляр объекта Application Access в приложении, которое не распознает объектные типы Access. Затем приложение создает экземпляр объекта Application.

Dim appAccess As Object Set appAccess = CreateObject("Access.Application") 

В документации приложения предоставлена информация о поддерживаемом им синтаксисе.

См. также

  • Сводка типов данных
  • Сводка по ключевым словам для переменных и констант
  • Темы по основам Visual Basic

Поддержка и обратная связь

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.

Обратная связь

Были ли сведения на этой странице полезными?

Список файлов в папке

Для реализации подобной задачи можно использовать несколько способов.

Способ 1. Скелет из шкафа — функция ФАЙЛЫ

Этот способ использует древнюю функцию ФАЙЛЫ (FILES) , оставшуюся в Microsoft Excel с далеких девяностых. Вы не найдете эту функцию в общем списке функций, но для совместимости, она всё ещё остаётся внутри движка Excel, и мы вполне можем её использовать.

1. В любую ячейку листа (например, в А1) введём путь к папке, список файлов из которой мы хотим получить.

Путь к папке

Обратите внимание, что путь должен оканчиваться шаблоном со звездочками:

  • *.* — любые файлы
  • *.xlsx — книги Excel (только с расширением xlsx)
  • *.xl* — любые файлы Excel
  • *отчет* — файлы, содержащие слово отчет в названии

2. Создадим именованный диапазон с помощью вкладки Формулы — далее кнопка Диспетчер имен — Создать (Formulas — Names Manger — Create) . В открывшемся окне введем любое имя без пробелов (например Мои_файлы) и в поле диапазона выражение:

Создаем именованный диапазон с функцией ФАЙЛЫ

После нажатия на ОК будет создан именованный диапазон с именем Мои_файлы, где хранится список всех файлов из указанной в А1 папки. Останется их оттуда только извлечь.

3. Чтобы извлечь имена отдельных файлов из созданной переменной, используем функцию ИНДЕКС (INDEX) , которая в Excel вытаскивает данные из массива по их номеру:

Список файлов

Если лениво делать отдельный столбец с нумерацией, то можно воспользоваться костылем в виде функции СТРОКИ (ROWS) , которая будет подсчитывать количество заполненных строк с начала списка автоматически:

=ИНДЕКС(Мои_файлы; ЧСТРОК($B$3:B3) )

Ну, и скрыть ошибки #ССЫЛКА! в конце списка (если вы протягиваете формулу с запасом) можно стандартной функцией ЕСЛИОШИБКА (IFERROR) :

= ЕСЛИОШИБКА( ИНДЕКС(Мои_файлы; ЧСТРОК($B$3:B3)) ; «»)

Важное примечание : формально функция ФАЙЛЫ относится к макро-функциям, поэтому необходимо будет сохранить ваш файл в формате с поддержкой макросов (xlsm или xlsb).

Способ 2. Готовый макрос для ленивых

Если вы знакомы с макросами (не в смысле их программирования, а в смысле копипастинга готовых кодов на VBA), то вам, возможно, отлично зайдёт небольшой макрос, добавляющий в текущую книгу новый пустой лист и выводящий на него список всех файлов с их параметрами из заданной пользователем папки.

Для добавления макроса в вашу книгу нажмите сочетание клавиш Alt + F11 , или кнопку Visual Basic на вкладке Разработчик (Developer) , в открывшемся окне редактора Visual Basic вставьте новый модуль через меню Insert — Module и скопируйте туда текст этого макроса:

Sub FileList() Dim V As String Dim BrowseFolder As String 'открываем диалоговое окно выбора папки With Application.FileDialog(msoFileDialogFolderPicker) .Title = "Выберите папку или диск" .Show On Error Resume Next Err.Clear V = .SelectedItems(1) If Err.Number <> 0 Then MsgBox "Вы ничего не выбрали!" Exit Sub End If End With BrowseFolder = CStr(V) 'добавляем лист и выводим на него шапку таблицы ActiveWorkbook.Sheets.Add With Range("A1:E1") .Font.Bold = True .Font.Size = 12 End With Range("A1").Value = "Имя файла" Range("B1").Value = "Путь" Range("C1").Value = "Размер" Range("D1").Value = "Дата создания" Range("E1").Value = "Дата изменения" 'вызываем процедуру вывода списка файлов 'измените True на False, если не нужно выводить файлы из вложенных папок ListFilesInFolder BrowseFolder, True End Sub Private Sub ListFilesInFolder(ByVal SourceFolderName As String, ByVal IncludeSubfolders As Boolean) Dim FSO As Object Dim SourceFolder As Object Dim SubFolder As Object Dim FileItem As Object Dim r As Long Set FSO = CreateObject("Scripting.FileSystemObject") Set SourceFolder = FSO.getfolder(SourceFolderName) r = Range("A65536").End(xlUp).Row + 1 'находим первую пустую строку 'выводим данные по файлу For Each FileItem In SourceFolder.Files Cells(r, 1).Formula = FileItem.Name Cells(r, 2).Formula = FileItem.Path Cells(r, 3).Formula = FileItem.Size Cells(r, 4).Formula = FileItem.DateCreated Cells(r, 5).Formula = FileItem.DateLastModified r = r + 1 X = SourceFolder.Path Next FileItem 'вызываем процедуру повторно для каждой вложенной папки If IncludeSubfolders Then For Each SubFolder In SourceFolder.SubFolders ListFilesInFolder SubFolder.Path, True Next SubFolder End If Columns("A:E").AutoFit Set FileItem = Nothing Set SourceFolder = Nothing Set FSO = Nothing End Sub

Для запуска макроса нажмите сочетание клавиш Alt + F8 ,или кнопку Макросы (Macros) на вкладке Разработчик (Developer) , выберите наш макрос FileList и нажмите кнопку Выполнить (Run) . В диалоговом окне выберите любую папку или диск и — вуаля!

Если захотите, чтобы вместо пути к файлу в столбце B выводилась живая гиперссылка, то замените 52-ю строку

Cells(r, 2).Formula = FileItem.Path

Cells(r, 2).Formula = «=HYPERLINK(«»» & FileItem.Path & «»»)»

Способ 3. Мощь и красота — надстройка Power Query

Power Query — это очень мощная и при этом бесплатная надстройка для Excel от Microsoft, упрощающая множество задач по загрузке и трансформации данных. В нашей ситуации она тоже может здорово помочь.

Если у вас Excel 2016 или новее, то Power Query уже встроена в Excel по умолчанию, поэтому просто на вкладке Данные выберите команду Создать запрос / Получить данные — Из файла — Из папки (Create Query / Get Data — From file — From folder) . Если у вас Excel 2010-2013, то Power Query нужно будет скачать с сайта Microsoft и установить как отдельную надстройку и она появится у вас в Excel в виде отдельной вкладки Power Query. На ней будет аналогичная кнопка Из файла — Из папки (From file — From folder) .

В открывшемся окне нужно будет указать папку, содержимое которой мы хотим получить. После нажатия на ОК Power Query обшарит указанную папку и все вложенные подпапки и выдаст на экран окно с предварительным просмотром результатов:

Предварительный просмотр списка файлов в Power Query

Если внешний вид списка вас устраивает, то можно смело жать внизу кнопку Загрузить (Load) , чтобы залить эти данные на новый лист. Если же хочется дополнительно обработать список (удалить лишние столбцы, отобрать только нужные файлы и т.п.), то нужно выбрать команду Изменить / Преобразовать данные (Edit / Transform Data).

Поверх окна Excel откроется окно редактора Power Query, где мы увидим список всех наших файлов в виде таблицы:

Окно Power Query

Дальше возможны несколько вариантов:

    Если нужны только файлы определенного типа, то их можно легко отобрать с помощью фильтра по столбцу Extension:

Фильтр по расширению файла

Фильтры по дате

Фильтры по пути и папкам

После того, как необходимые файлы отобраны, можно смело удалить ненужные столбцы, щелкнув по заголовку столбца правой кнопкой мыши и выбрав команду Удалить (Remove column ) . Это, кстати, уже никак не повлияет на фильтрацию или сортировку нашего списка:

Готовый список

Если в будущем планируется подсчитывать количество файлов в каждой папке (например, для контроля поступивших заявок или подсчета статистики по заявкам), то имеет смысл дополнительно сделать ещё пару действий:

  • Щелкните правой кнопкой мыши по столбцу Folder Path и выберите команду Дублировать столбец (Duplicate Column) .
  • Выделите скопированный столбец и на вкладке Преобразование (Transform) выберите Разделить столбец — По разделителю (Split Column — By delimiter)

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

Разделить столбец пути по разделителю

Получившиеся столбцы можно переименовать (Диск, Папка1, Папка2 и т.д.), просто щёлкнув дважды по заголовку каждого.

И, наконец, когда список готов, то его можно выгрузить на лист с помощью команды Главная — Закрыть и загрузить — Закрыть и загрузить в. (Home — Close & Load — Close & Load to. ) :

Выгруженные на лист результаты

И, само-собой, теперь можно построить по нашей таблице сводную (вкладка Вставка — Сводная таблица), чтобы легко подсчитать количество файлов в каждой папке:

Сводная со статистикой по каждой папке

Дополнительным бонусом можно сделать еще один столбец с функцией ГИПЕРССЫЛКА (HYPERLINK) , которая создаст красивые стрелочки-ссылки для моментального перехода к каждому файлу:

Функция ГИПЕРССЫЛКА

Мелочь, а приятно 🙂

И вдвойне приятно, что в будущем, при изменении содержимого исходной папки, достаточно будет просто щелкнуть мышью по нашей таблице и выбрать команду Обновить (Refresh) — и Power Query выполнит всю цепочку запрограммированных нами единожды действий уже автоматически, отобразив все изменения в составе папки.

Ссылки по теме

  • Что такое макрос, куда вставлять код макроса на Visual Basic
  • Создание резервных копий ценных файлов
  • Что такое Power Query и что можно делать с её помощью

Excel vba воспринимать текстовую переменную как список

Раздел 2. Разработка программных кодов на VBA

Вариант 1. Импорт текстовых данных на лист Excel

Список сотрудников из файла поместим на листе Excel с наименованием «Список», для чего откроем в строке Меню→ Данные→ Импорт внешних данных → И мпортировать данные, как показано на рис 22.

Рис. 22. Подготовительные действия для импорта таблицы из файла

При импорте внешних данных на лист Excel , сначала следует найти местоположение файла (с помощью окна – Импорт текстового файла), а затем провести три последовательных шага в приложении – Мастер текстов.

Для тех, кто работает с Excel 2007, необходимо в Меню раскрыть вкладку Данные, чтобы обратиться к списку команд группы – Получить внешние данные. На рис 23 выделена пиктограмма – Из текста, которая запускает диалоговое окно для поиска файла и Мастер текстов, при работе с этими диалоговыми окнами, все последующие действия при импорте текстового файла будут аналогичны, как в Excel 2003.

Рис. 23. Импортирование внешних данных, созданных в виде текста

Приложение Мастер текстов преобразует строки в отдельные записи (создаёт списки), поэтому при выполнении второго шага, следует указать, что является символом-разделителем в файле. На рис 24 показано окно Мастер текстов, в котором отмечен символ-разделитель – запятая.

Рис. 24. Пример преобразования строк текста в табличные данные с помощью приложения Мастер текстов

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

Рис. 25. Пример импортированного списка на лист Excel для подготовки пропуска сотруднице Вавиловой

Так как на листе Excel размещена одна кнопка, то только для неё создаётся программный код, представленный на рис 26. Рассмотрим некоторые особенности программы, с помощью которой создаётся диалоговое окно для ввода диапазона ячеек со сведениями о сотруднике, а затем эти сведения передаются на лист «Пропуск» в шаблон.

Воспользуемся возможностями объекта Application , который обладает обширной коллекцией свойств, позволяет программно установить значения многих опций для объектов, которые используются в программе VBA (подробно об объекте Application можно ознакомиться в литературе, например, [1]). В данной программе используем функцию InputBox () в качестве диалогового окна для сбора параметров о сотруднике. Поэтому, сначала дадим описание параметров этого окна в операторе Set (Установить), запись будет выглядеть следующим образом:

Set input_sveden = Application.InputBox ( _

Title := «Найдите необходимую ячейку», _

Prompt := «Выделите в таблице ячейки в строке,» & Chr (13) _

& » которые относятся к сотруднику», _

Зададим имя переменной — input _ sveden , которой будут передаваться сведения из текстовой строки диалогового окна. Application . InputBox — это новый объект (на основе функции InputBox ). Объекту следует задать параметры, которые являются атрибутами функции, к которым относятся:

Title – строковое выражение, отображаемое в строке заголовка диалогового окна;

Prompt – строковое выражение, отображаемое как сообщение в диалоговом окне;

Type – параметр, указывающий что должно отображаться в текстовом окне (код 8 – адрес выделяемой ячейки на листе).

Рис. 26. Программные коды для обработки выделенной строки после свершения события Click при передачи в шаблон документа

Для того , чтобы осуществить работу с выделенными ячейками на листе, необходимо выяснить их количество (количество столбцов и количество строк), что осуществляется операторами:

Операторы цикла осуществляют просмотр содержимого переменной input _ sveden с последующей записью в индексированный массив Mas ( i ), далее формируется общая строка FIO , содержащая фамилию имя и отчество сотрудника. Для создания сообщения о выполнении работы использован оператор MsgBox (обратите внимание, в операторе не используются круглые скобки). Но вместе с тем, в этот оператор встроена функция Chr (13), которая воспринимает код 13, как возврат каретки и перевод курсора на новую строку, что позволяет в диалоговом окне сообщение делить на несколько строк. Пример результатов выполнения запроса показан на рис 27.

Рис. 27. Пример использования оператора MsgBox для формирования сообщения в виде диалогового окна

Сохранив значения в переменных FIO и Mas (4) для заполнения пропуска (так можно собрать из таблицы большое количество данных, а в нашем примере показано, как выбирать данные и объединять в одну строку), осталось их передать на другой лист, что выполняется с помощью следующих кодов:

Worksheets( » Пропуск «).Cells(6, 2) = FIO

Worksheets( » Пропуск «).Cells(8, 3) = Mas (4)

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *