Vvmebel.com

Новости с мира ПК
5 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Access вызов процедуры

Процедуры и функции, их вызов и передача параметров

Основными компонентами программы на VBA являются процедуры и функции, Они представляют собой фрагменты программного кода, заключенные между операторами Sub и End Sub или между операторами Function и End Function. Вот как может выглядеть процедура VBA:

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

Для того чтобы использовать написанную вами процедуру или функцию, необходимо вызвать ее. Как же осуществляется вызов процедур и функций? Процедуру с непустым списком аргументов можно вызвать только из другой процедуры или функции, использовав ее имя со списком фактических значений аргументов в качестве одного из операторов VBA. Функцию же можно вызвать не только с помощью отдельного оператора VBA, но и поместив ее имя со списком фактических значений аргументов прямо в формулу или выражение в программе на VBA или, например, прямо в формулу в вычисляемых полях запросов, форм и отчетов Access. Процедура с пустым списком аргументов (так называемый командный макрос) может быть вызвана не только из другой процедуры или функции, но и с помощью комбинации клавиш быстрого вызова, команд раскрывающихся меню или кнопок панелей инструментов. Можно также связать такую процедуру с выполнением самых различных событий: например, с открытием формы или отчета, со щелчком мышью по кнопке в форме, с воздействием на элементы управления форм, в частности элементы управления ActiveX. Такие процедуры называют процедурами обработки событий. Понятно, что функции или процедуры, нуждающиеся в передаче им аргументов, таким способом вызвать нельзя. Подробнее о том, как создаются процедуры обработки событий, будет рассказано в разд. «Программирование в формах и отчетах» данной главы.

Если вызываемая процедура имеет уникальное имя и находится в том же модуле, что и вызывающая процедура, то для ее вызова достаточно указать это имя и задать список фактических значений аргументов, не заключая его в скобки. Второй способ вызова процедуры состоит в использовании оператора Call. Сначала идет оператор Call, затем имя процедуры и список параметров, в этом случае обязательно заключенный в скобки. Функцию можно вызывать точно так же, как и процедуру, но гораздо чаще используется другой, специфический способ вызова функций: использованием ее имени с заключенным в скобки списком параметров в правой части оператора присваивания.

Вот примеры вызова процедуры под именем CrossRC с передачей ей двух аргументов (константы и выражения):

А вот пример вызова двух функций — Left и Mid, и использования возвращаемого ими значения в выражении:

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

Способ передачи параметров процедуре или функции указывается при описании ее аргументов: имени аргумента может предшествовать явный описатель способа передачи. Описатель ByRef задает передачу по ссылке, a ByVal — по значению. Если же явное указание способа передачи параметра отсутствует, то по умолчанию подразумевается передача по ссылке.

Поясним сказанное на примере. Пусть имеются следующие описания двух процедур:

Вспомогательная процедура Examplel использует в качестве формальных аргументов три переменные, описанные по-разному. Далее в теле этой процедуры каждый из них увеличивается на единицу, а затем их значения выводятся на экран с помощью функции MsgBox. Основная процедура Main устанавливает значения переменных a, b и с, а затем передает их в качестве (фактических) аргументов процедуре Examplel. При этом первый аргумент передается по ссылке (действует умолчание), второй — по значению, а третий — снова по ссылке. После возврата из процедуры Examplel основная процедура также выводит на экран значения трех переменных, передававшихся в качестве аргументов. Всего на экран выводится шесть значений:

  • сначала это числа 11, 21 и 31 (все полученные значения увеличены на 1 и выводятся процедурой Examplel);
  • затем это числа 11, 20 и 31 (эти значения выводятся процедурой Main, причем переменные, переданные по ссылке, увеличились, а переменная, переданная по значению — нет).

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

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

Если при этом имя модуля состоит из нескольких слов, следует заключить это имя в квадратные скобки. Например, если модуль называется «Графические процедуры», а процедура — «Крестик», вызов может выглядеть следующим образом:

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

Вызов хранимых процедур. Работа с транзакциями

Хранимые процедуры в Microsoft Access

В завершение этой лекции рассмотрим хранимые процедуры в Microsoft Access. Хранимые процедуры? А разве Microsoft Access их поддерживает? По правде говоря, нет. Мы не можем создавать в MSAccess такие процедуры, как мы это делали в MS SQL Server, синтаксис не будет содержать ключевого слова «PROC» или «PROCEDURE», и вообще, это совсем не так называется! Но база данных способна хранить SQL-запросы, и если их запускать из внешнего приложения, то функциональность уже будет напоминать саму концепцию хранимых процедур.

Читать еще:  Формат презентации powerpoint 2020

Открываем базу BDTur_firm2.mdb. В окне базы данных переключаемся на вкладку «Запросы» и дважды щелкаем на заголовке «Создание запроса в режиме конструктора» (рис. 7.14):

В появившемся окне добавления таблицы выбираем «Туристы» и нажимаем кнопку «OK» (рис. 7.15).

В режиме конструктора требуется установить столбцы, которые будут извлекаться в запросе. Для этого последовательно выбираем из выпадающего списка названия полей таблицы (рис. 7.16).

Добавим сортировку по столбцу «Фамилия». В поле «Сортировка» из выпадающего списка выбираем значение «по возрастанию» (рис. 7.17).

Можно просмотреть SQL-конструкцию готового запроса. В главном меню выбираем «Вид Режим SQL». Окно конструктора изменяет свой вид — в нем появляется текст запроса:

Сохраняем запрос, называя его «Сортировка_туристы». Дважды щелкнув на нем в окне базы данных, запускаем — записи таблицы отсортированы (рис. 7.18).

Займемся теперь созданием приложения, которое будет запускать этот запрос как хранимую процедуру. Создайте новый Windows-проект и назовите его «Stored_Procedure_MSAccess». Перетаскиваем на форму элемент управления ListBox , его свойству Dock устанавливаем значение «Fill» . Подключаем пространство имен для работы с базой данных:

В классе формы определяем строку connectionString :

В конструкторе формы создаем объекты ADO .NET, причем в свойстве CommandType объекта Command задаем тип запроса StoredProcedure :

Весь код уже достаточно хорошо знаком — мы его применяли для запуска хранимых процедур MS SQL Server. Запускаем приложение — на форму выводится результат запроса (рис. 7.19).

В программном обеспечении к курсу вы найдете приложение Stored_ Procedure_MSAccess (CodeGlava3Stored_Procedure_MSAccess).

VBA Excel. Вызов процедуры Sub из другой подпрограммы VBA

Вызов процедур Sub (подпрограмм) из кода других процедур, расположенных в одном или разных модулях, в одной или разных книгах Excel (проектах VBA), с аргументами или без. Примеры.

Вызов процедур Sub в пределах одной книги

Вызов подпрограммы из кода другой процедуры Sub, расположенной в том же модуле или другом модуле одной рабочей книги (проекта VBA) осуществляется с помощью ключевого слова Call или без него по имени подпрограммы. Вызывающая процедура Sub может быть любой видимости, как Public, так и Private, а вызываемая, если расположена в том же модуле, может быть любой видимости, но если расположена в другом модуле, должна быть объявлена как Public.

Синтаксис вызова подпрограмм в пределах одной книги

[ Call ] ИмяПроцедуры [ (Аргументы) ]

  • Call – необязательное ключевое слово;
  • ИмяПроцедуры – обязательный компонент, имя вызываемой подпрограммы;
  • Аргументы – необязательный компонент, список аргументов вызываемой процедуры Sub, разделенных запятой.

Вызов подпрограмм без аргументов в пределах одного модуля

Скобки рядом с именами вызываемых подпрограмм без аргументов не ставятся:

Вы можете скопировать приведенный код в свой модуль и посмотреть, запустив процедуру test1, как она последовательно запускает процедуры test2 и test3.

Вызов подпрограмм с аргументами в пределах одного модуля

При вызове процедур Sub с аргументами и ключевым словом Call, аргументы заключаются в скобки, без ключевого слова Call – аргументы не заключаются в скобки:

Вы можете разместить этот код в своем модуле и протестировать его.

Вызов подпрограмм из разных модулей одной книги

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

Вызываемая подпрограмма расположена в Стандартном модуле

  • ИмяМодуля – уникальное имя стандартного модуля, отображаемое в проводнике проекта VBA.

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

Вызываемая подпрограмма расположена в модуле книги, модуле листа, модуле формы

  • ЭтаКнига – так и пишется, указывает на текущую книгу в которой расположены вызывающая и вызываемая подпрограммы.
  • ИмяЛиста – уникальное имя листа, которое в проводнике проекта VBA указано без скобок (по умолчанию: Лист1, Лист2, Лист3 и т.д.).
  • Имя ярлычка листа – дублирующее имя листа, которое в проводнике проекта VBA указано в скобках.
  • ИмяФормы – уникальное имя пользовательской формы, отображаемое в проводнике проекта VBA.

Вызов процедур Sub из модулей разных книг

Если вызываемая подпрограмма расположена в другой книге, она должна быть объявлена как Public, а книга открыта. Запустить такую процедуру Sub можно с помощью метода Application.Run (протестировано в Excel 2016).

Синтаксис метода Application.Run

Application.Run “ИмяКниги!ИмяМодуля.ИмяПроцедуры”, Арг1, Арг2, …, Арг30

  1. ИмяКниги!ИмяМодуля.ИмяПроцедуры – обязательный компонент, полный адрес подпрограммы, заключен в двойные кавычки.
    • ИмяКниги – имя рабочей книги Excel с расширением, в которой находится вызываемая подпрограмма, если имя содержит пробелы, оно заключается в одинарные кавычки – апострофы (‘Имя Книги’).
    • ИмяМодуля – имя модуля для стандартного модуля (для уникальных имен вызываемых подпрограмм может не указываться), имя листа для модуля листа, словосочетание «ЭтаКнига» (без кавычек) для модуля книги.
    • ИмяПроцедуры – имя вызываемой процедуры Sub.
  2. Арг1, Арг2, …, Арг30 – необязательные компоненты, аргументы вызываемой подпрограммы, максимальное количество которых ограничено 30 элементами.

Полный адрес вызываемой процедуры заключен в двойные кавычки, отделен от аргументов и аргументы друг от друга запятыми.

Полный адрес вызываемой процедуры

Может показаться сложным составить полный адрес вызываемой подпрограммы, но на самом деле все очень просто – Excel уже сделал это за нас.

Список макросов во всех открытых книгах

2. Найдите в списке вызываемую подпрограмму и кликните по ней. Ее полный адрес отобразится в поле «Имя макроса».

3. Скопируйте полное имя вызываемой процедуры Sub и вставьте ее в метод Application.Run, заключив в двойные кавычки.

Один нюанс: в окне «Макрос» не отображаются процедуры с аргументами. Чтобы отобразить такую процедуру, закомментируйте аргументы, а после копирования и вставки раскомментируйте их.

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

Читать еще:  User access control

Пример вызова подпрограмм из другой книги

Допустим, у нас есть рабочая книга Excel под именем «Книга1.xlsm» (или «Книга1.xls» в ранних версиях программы). В ней находятся вызываемые из другой книги процедуры Sub, перечисленные ниже.

В стандартном модуле «Module1»:

В модуле листа «Лист1»:

В модуле книги «ЭтаКнига»:

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

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

И еще раз напомню, что имя книги с пробелами заключается в одинарные кавычки (апострофы):

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

Заключение

В этой статье не рассмотрено добавление ссылок из одного проекта VBA на другой, которые позволяют работать с модулями и процедурами, находящимися в другом проекте так, как с находящимися в текущем. Причем книга, с которой установлена связь, может быть закрыта. Я предпочитаю работать с Личной книгой макросов, а при попытке, из любопытства, установить связь между двумя книгами, программа Excel, почему-то, отказала мне в этом и эксперименты закончились.

Если хотите поэкспериментировать со связанными книгами, откройте проект VBA, из которого надо установить связь с другой книгой, и выберите в главном меню «Tools» – «References…». В открывшемся окне «References – VBAProject» все открытые книги будут отображены одним словом – «VBAProject». Выделяйте по очереди строки с этим словом и внизу, в информационной рамке, смотрите, какой книге этот проект принадлежит. Поставьте галочку рядом с выбранным проектом и нажмите кнопку «OK». Если книга, с проектом которой устанавливается связь, закрыта, ее не будет в списке. В этом случае, нажмите на кнопку «Browse…», найдите, выбрав расширение, нужную книгу и откройте ее в проводнике. Связь будет установлена, и процедуры из связанных книг будут вызываться по имени с ключевым словом Call или без него, как будто они расположены в одной книге.

Как вызвать функцию VBA в подпроцедуру

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

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

Я попробовал это .

Я знаю, что это довольно плохо, но я понятия не имею, как включить это в процедуру.

5 ответов

Вот несколько разных способов называть вещи в Microsoft Access:

Чтобы вызвать подпрограмму или функцию из модуля

Подпункт в форме, которую вы вызываете, ДОЛЖЕН быть общедоступным, как в:

Назовите подпрограмму следующим образом:

Форма должна быть открыта до совершения звонка.

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

Вызов подпрограммы в модуле из формы

. просто позвоните прямо из процедуры вашего мероприятия:

Вызов подпрограммы из формы без использования процедуры события

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

Затем, если у вас есть кнопка в форме, вместо того, чтобы помещать [Процедура обработки события] в событие OnClick окна свойств, укажите это:

Когда вы нажимаете кнопку, она вызывает публичную функцию в модуле.

Чтобы вызвать функцию вместо процедуры

Если вызов подпрограммы выглядит следующим образом:

Тогда вызов функции выглядит следующим образом:

где Result — переменная типа, возвращаемого функцией.

ПРИМЕЧАНИЕ. Вам не всегда нужно ключевое слово Call. В большинстве случаев вы можете просто вызывать подпрограмму следующим образом:

если pptCreator — это функция /процедура в том же файле, вы можете вызвать ее, как показано ниже

Вызов подпроцедуры — трехсторонняя техника

Если у вас есть процедура, независимо от того, создали ли вы ее или она является частью языка Visual Basic, вы можете использовать ее. Использование процедуры также называется ее вызовом.

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

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

При вызове процедуры, без или без ключевого слова Call, вы можете дополнительно ввести открывающую и закрывающую скобки справа от ее имени. Вот пример:

Процедуры и уровни доступа

Подобно переменному доступу, доступ к процедуре может контролироваться уровнем доступа. Процедура может быть частной или публичной. Чтобы указать уровень доступа к процедуре, поставьте перед ним ключевое слово Private или Public. Вот пример:

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

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

Кроме того, когда процедура является закрытой, ее имя не отображается в диалоговом окне «Макросы»

Public: процедура, созданная как public, может вызываться процедурами того же модуля и процедурами других модулей.

Кроме того, если процедура была создана как общедоступная, при доступе к диалоговому окну «Макросы» появляется ее имя, и вы можете запустить ее оттуда

Процедуры в модуле становятся полезными и общими, когда вы передаете аргументы.

Теперь может отображать любое сообщение, переданное с помощью строковой переменной с именем strMessage.

Чтобы добавить функцию к новой кнопке в форме: (и не используйте макрос для вызова функции)

После того как вы создали свою функцию (Function MyFunctionName ()) и вы находитесь в режиме конструктора форм:

  1. Добавьте новую кнопку (я не думаю, что вы можете переназначить старую кнопку — хотя не уверен).
  2. Когда откроется окно мастера кнопок, нажмите Отмена.
  3. Перейдите в свойства кнопки. Вкладка «Событие» — поле «При нажатии».
  4. В раскрывающемся меню в этих полях выберите: Процедура обработки события.
  5. Теперь нажмите кнопку рядом с раскрывающимся меню, в котором есть . и вы попадете в новую частную подписку в окне форм Visual Basic.
  6. В этом частном типе Sub: Call MyFunctionName
    Это должно выглядеть примерно так:
Читать еще:  Vba access глобальная переменная

Private Sub Command23_Click ()

Позвонить в MyFunctionName

  1. Тогда просто сохраните его.

Access 2010 сравнение строк недопустимый вызов процедуры

Мы только что обновили Access 2003 до Access 2010, и сравнение строк не выполняется с ошибкой недопустимого вызова процедуры при использовании условий по умолчанию. Я воссоздал две предположительно связанные проблемы в новой базе данных формата Access 2007, содержащей только таблицу по умолчанию, запрос с SQL ниже и модуль, содержащий только код ниже, поэтому я серьезно сомневаюсь, что это проблема коррупции. Сначала в строке If Then происходит сбой следующего sub с ошибкой времени выполнения 5: недопустимый вызов процедуры или аргумент

Если я изменю Option Compare Database на Option Compare Text, sub работает так, как ожидалось, но это кажется плохой идеей, поскольку я могу захотеть предварительно сформировать текст, а также числовые сравнения внутри одного sub.

Я также получаю ошибки “Invalid procedure call” в функциях сравнения строк внутри SQL. Функция Replace требует предположительно необязательного параметра compare.

Генерирует ошибку “Invalid procedure call”

Установка параметра compare в любое из доступных значений (0 -3) работает как ожидалось:

Кто-нибудь еще видел это? Есть ли настройка, которая должна быть изменена? Любые другие идеи за пределами “Database corruption”, которые я смог найти через Google. TIA

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

UPDATE: я должен был упомянуть, что я запускаю XP Pro sp3.

Проблема, похоже, ограничена базами данных, которые я создаю на своем ящике. Когда я открыл тестовую базу данных, созданную на моем ящике с других рабочих станций в нашей сети, я увидел проблему, но затем не смог воссоздать ее при создании новой базы данных, как описано выше на этих рабочих станциях. Базы данных, которые я создал на двух других рабочих станциях (те же версии OS и MS Office), также работали правильно при открытии на моей машине. Я также не смог воссоздать проблему, когда я вставил новые модули в эти DBs с моей машины.

Короче говоря, проблема, похоже, существует только в базах данных, созданных на моей машине (и в старых базах данных формата 2003, которые я преобразовал в формат 2007 на моей машине). Мое лучшее предположение заключается в том, что моя установка отключена, но я хотел бы иметь некоторое представление о том, как и почему, прежде чем я подойду к IT с просьбой переустановить Office. Я также хотел бы исключить конфликт с другим программным обеспечением на моем ящике.

1 Ответ

Не все модули кода должны совместно использовать один и тот же параметр Option Compare . Таким образом, вы можете разместить эти процедуры, которые должны использовать текстовые сравнения в модуле, который имеет Option Compare Text в своем разделе объявлений.

Тем не менее, я не понимаю Вашего заявления : «я могу захотеть предварительно сформировать текст, а также числовые сравнения внутри одного суб. «Согласно разделу справки Access, Option Compare Statement » используется на уровне модуля для объявления метода сравнения по умолчанию, используемого при сравнении строковых данных«. Другими словами, Option Compare не влияет на сравнение числовых значений.

Edit: поскольку проблема ограничена Option Compare Database для файлов базы данных, созданных только на одной машине, я предлагаю вам проверить настройку Access’ «New database sort order» на этой машине. Измените его на выбор, который начинается с «General», если он установлен на что-нибудь еще. Затем создайте новую базу данных и посмотрите, есть ли у вас все еще проблема.

Причина этого предложения заключается в том, что Option Compare Database указывает Access использовать параметр кодовой страницы базы данных для сортировки. И «New database sort order» может установить кодовую страницу на ту, которая никогда не дает мне таких проблем. Однако мое понимание деталей кодовой страницы довольно поверхностно; я никогда не изменяю его и не знаю, каковы будут последствия других настроек.

Похожие вопросы:

Следующий запрос: SELECT DateDiff(‘month’,0,’2000-01-01 00:00:00′); Возвращает ошибку [ODBC драйвер Microsoft Access] недопустимый вызов процедуры с причудливым кодом 22018. Характеристики: Версия.

Я использовал команду Shell в MS Access в течение нескольких лет в нескольких базах данных в разных версиях. Совсем недавно я получил эту ошибку времени выполнения 5-недопустимый вызов процедуры или.

Я получаю эту ошибку на тип команды=0: Ошибка времени выполнения: ‘5’. Недопустимый вызов процедуры или аргумент в excel это изображение отображается, когда Я пытаюсь запустить макрос при выполнении.

m получение ошибки при использовании Text1.SetFocus ошибка недопустимый вызов процедуры или аргумент

Я пишу VBScript, чтобы создать календарь и в этой строке, я получаю сообщение об ошибке, которое говорит With objExcel.Range(A1:U28) ‘.FormatConditions.Add xlCellValue, xlEqual, =TODAY() — CRASH.

Можно ли создать хранимые процедуры в MS Access 2010 ? Если да пожалуйста скажите мне как

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

Я использую SystemUtil.Run (pathName) в UFT, VBScript. Но это дает мне недопустимый вызов процедуры или аргумент. Я уверен насчет pathName, я уверен насчет команды, я уверен насчет всего. Как вы.

Я хочу создать несколько таблиц pivot, инкапсулируя сложность в функции и процедуры (мне уже удалось создать пивоты с VBA, но один модуль для каждого pivot, что означает много повторяющегося.

Ссылка на основную публикацию
Adblock
detector