It is a PowerPoint constant and I am using late binding. But it worked perfectly numerous times.
Тогда вы были НЕ позднего связывания.
Поставьте себя в обувь VBA: вы компилируете этот проект, и вы сталкиваетесь с ppAlignCenter
как токен/идентификатор. Если включен Option Explicit
(он должен!), А в библиотеке объектов PowerPoint не указаны ссылки, то ppAlignCenter
- это необъявленная переменная, и вы не знаете, что с ней делать, - поэтому вы бросаете руки в воздух и кричать на пользователя:
Compile error: variable not defined.
Если Option Explicit
не включен, и PowerPoint не ссылается, то вы «объявить» неинициализированный Variant
переменную на рабочем месте, названном ppAlignCenter
, так что назначение MyTextBox.ParagraphFormat.Alignment
может быть скомпилирован.
Поскольку переменная не инициализирована, во время выполнения ее значение будет только 0
- и оттуда не ясно, что происходит, потому что PpParagraphAlignment не имеет ни одного члена со значением 0
, так что возможно, что MyTextBox.ParagraphFormat.Alignment
назначение поднимает также, но это полностью зависит от реализации свойства Alignment
.
Теперь, если библиотека PowerPoint является ссылки (раннее связывание), то ppAlignCenter
решает, что значение PpParagraphAlignment.ppAlignCenter
перечислений, которые вы знаете, на самом деле просто 2
, и поэтому вы можете приступить к компиляции.
PpParagraphAlignment
перечисление определено в библиотеке типа PowerPoint, так что если вы позднее связывание с этой библиотекой, вы не можете обратиться к своим членам по имени, потому что VBA будет пытаться решить их в compile- время - и не может этого сделать.
Таким образом, вместо этого:
.ParagraphFormat.Alignment = ppAlignCenter
Вы должны сделать это:
.ParagraphFormat.Alignment = 2 'ppAlignCenter
Но почему вы поздно привязку к библиотеке типов вы знаете вам нужно есть в любом случае для программы даже надежда работать во время работы?
позднего связывания означает, что вы работаете с Object
переменными вместо конкретных типов - и это означает, что Lookups интерфейс во время выполнения и совсем немного накладных , что вам не нужно вообще ... и эти поиски идут в противном случае, если библиотека отсутствует.Не говоря уже о том, что программирование против Object
означает, что вы не получаете IntelliSense и вам нужно вчетверо проверить все, что вы делаете, потому что компилятор не поможет вам, и время выполнения закричит, если вы опечатаете.
... сказал, что ссылки ранней привязки являются специфичными для версии - поэтому, если вы распространяете свой код на пользователей, работающих с различными версиями библиотек, на которые вы ссылаетесь, поздняя привязка гарантирует, что все будет работать для всех (если ваш код не использует функции API, зависящие от версии). В этом случае лучшим компромиссом является разработать с ранними ссылками (так что вы получите IntelliSense и автозаполнение!), А затем переключите все на позднюю, когда вы его распространяете.
'ppAlignCenter' звучит как константа PowerPoint. У вас все еще есть все необходимые ссылки? – YowE3K
Это константа PowerPoint, и я использую позднюю привязку. Но он работал отлично много раз. – Brian
Если вы используете позднюю привязку, 'ppAlignCenter' не имеет смысла, если вы не дадите ему значение. – vacip