У меня есть следующий скрипт VBScript, который создает COM-объект Microsoft.VBScript: Как вызвать функцию, которая определена с помощью гласного на карте отправки
set foo = CreateObject("Bar.ProgId")
foo.Einfügen()
Реализация этого COM-объекта находится в Dynamic Link Library Foo.dll
, который использует Структуру Microsoft Foundation (MFC) и особенно механизм Dispatch Maps.
диспетчерских Карты показывают, как этот
BEGIN_DISPATCH_MAP(Foo, CCmdTarget)
[...]
DISP_FUNCTION(Foo, "Einfügen", Insert, VT_I2, VTS_NONE)
[...]
END_DISPATCH_MAP()
До сих пор так хорошо. Когда я создаю такой COM-объект в среде VBA, например, в приложении Excel, вызов foo.Einfügen
будет успешным. Кроме скрипта VBScript.
Я признал, что OLE Automation применяется в VBA, а также в VBScript. Но когда я бегу VBScript-Script я получил ошибку
Error: unknow character; Code 8000A0408;
Source: Compile failure in Microsoft VBScript
Сначала я подумал, что кодирование в VBScript-Script неправильно из-за характера ü
, но я проверил, что он ANSI закодирован. Я также подтвердил, что Windows Code Page в моей системе Windows-1252 Западно-Латинский набор символов.
Если я изменяю Einfügen
на Einfuegen
на карте отправки Я утверждаю, что работает скрипт VBScript.
Так что мой вопрос: почему поведение вызова foo.Einfügen
отличается от VBScript, чем в VBA? В чем причина такого поведения?
Для меня обходным путем является то, что я добавляю второй DISP_FUNCTION
Ввод на карте отправки, который отправляет Einfuegen
в функцию Insert
. В VBScript-Script я вызываю foo.Einfuegen
и в VBA все еще foo.Einfügen
.
Да, это работает! Большое спасибо. :-) – kbisang
Удивительный, меня интересовал этот вопрос отличный ответ! – Lankymart
Lankymart с использованием скобок также полезен с «зарезервированными словами». посмотрите http://stackoverflow.com/a/8887247/893670 –