CallByName работает с MsgBox, но не при назначении значения (ошибка «Требуется объект») - PullRequest
0 голосов
/ 19 февраля 2019

Использование VBA в Excel:

У меня есть функция, в которой я хочу получить доступ к свойствам класса, используя переменные для имен свойств.Мне удалось использовать переменную с CallByName, чтобы MsgBox вернул мне значение свойства:

MsgBox CallByName(oThisInvoice, DataType, VbGet)

Где oThisInvoice - это объект класса, а DataType - это переменная, которая содержит имя свойства, к которому я хочу получить доступ.Этот оператор работает и переписывает:

MsgBox oThisInvoice.InvoiceDate

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

CallByName(oThisInvoice, DataType, VbGet) = 5

не работаетЯ получаю сообщение об ошибке «Ошибка выполнения 424: требуется объект».Использование VbLet и VbSet также не работало, выдавая «Ошибка времени выполнения 446: объект не поддерживает именованные аргументы».

Это переписывает следующее:

oThisInvoice.InvoiceDate = 5

который работает.

Кто-нибудь знает, что я могу использовать для присвоения значения свойству класса в VBA при использовании переменной для ссылки на имя свойства?

1 Ответ

0 голосов
/ 19 февраля 2019

CallByName(oThisInvoice, DataType, VbGet) = 5

Конечно, это не работает для установки значения.Вы вызываете процедуру Get, о чем свидетельствует использование VbGet.Get не устанавливает значения, он получает их.

Вместо этого вам нужно использовать CallByName с VbLet:

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