Определение переменных в подпрограммах (с модулем) в VBA - PullRequest
2 голосов
/ 21 октября 2019

Хотелось бы определить ссылочные переменные (вызывает значение из ячейки на листе, используя ActiveSheet.Cells [row, col]) в одном месте в модуле, для использования в нескольких подпрограммах в файле MS Excel. Файл представляет собой трекер действий, подпрограммы автоматизируют некоторые электронные рассылки (каждая подпрограмма открывает электронные письма при определенных условиях)Все ссылочные переменные одинаковы для каждого подопределения в одном месте, что значительно упростит ведение электронной таблицы.

При попытке определить переменные над первым подпунктом, сообщение об ошибке появляется при первом значении (как подробно описано ниже). Я искал (а) глобальные переменные и (б), как определить над сабвуферами. Однако (a) переменные все в одном модуле (b) сообщение об ошибке, как описано ниже. Я не нашел руководство по определению переменных с использованием ссылок ActiveSheet.Cells ().

Option Explicit
'Defines variables for all macros:

'Defining Reference Variables
Today = ActiveSheet.Cells(2, 4)
ActionLogTitle = ActiveSheet.Cells(3, 3)
IPT_Leader = ActiveSheet.Cells(7, 7)

(при Today = ActiveSheet.Cells(2,4) ошибка подсвечивается на «2»)

Ошибка компиляции: Недопустимая внешняя процедура

Ответы [ 2 ]

5 голосов
/ 21 октября 2019

Поскольку компилятор намекает, вы не можете писать назначения вне Sub / Function.

Вы можете объявить функцию для каждой переменной:

Function MyValue()
    MyValue = ActiveSheet.Cells(2, 4).Value
End Function

В идеале вы не используете ActiveSheet, если это действительно то, что вам нужно.

4 голосов
/ 21 октября 2019

Сегодня существует множество способов определения, но использование слова, которое используется в формуле Excel English =TODAY(), вероятно, является дискуссионной идеей (хотя она будет работать!). В общем, рассмотрите объявление этой переменной где-то в модулях:

Public myToday as Date

Затем вы можете сбросить ее при каждом открытии рабочего листа:

Private Sub Workbook_Open()
    myToday = Date
    'or 
    myToday = Worksheets("Name").Range("D2").Value
End Sub

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

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