Word = CreateOleObject("Word.Application.8");
Word.OlePropertySet("Visible", true);
Word.OlePropertyGet("Documents").OleProcedure("Add");
Ошибка при использовании OlePropertyGet("Documents").OleProcedure("Add")
Код:
на компьютере с Microsoft Word Standart Edition 2003 for Students and Teachers появляется сообщение об ошибке: Project Project1.exe raised exception class EOleSysError with message 'Exception ocurred'. Process stopped. Use Step or Run to continue. На компьютерах с другими версиями Microsoft Word ошибки не возникает.
В чем может быть причина и как можно ее устранить без переустановки Microsoft Word?
Цитата: AleksP
При использовании следующего кода:
на компьютере с Microsoft Word Standart Edition 2003 for Students and Teachers появляется сообщение об ошибке: Project Project1.exe raised exception class EOleSysError with message 'Exception ocurred'. Process stopped. Use Step or Run to continue. На компьютерах с другими версиями Microsoft Word ошибки не возникает.
В чем может быть причина и как можно ее устранить без переустановки Microsoft Word?
Код:
Word = CreateOleObject("Word.Application.8");
Word.OlePropertySet("Visible", true);
Word.OlePropertyGet("Documents").OleProcedure("Add");
Word.OlePropertySet("Visible", true);
Word.OlePropertyGet("Documents").OleProcedure("Add");
на компьютере с Microsoft Word Standart Edition 2003 for Students and Teachers появляется сообщение об ошибке: Project Project1.exe raised exception class EOleSysError with message 'Exception ocurred'. Process stopped. Use Step or Run to continue. На компьютерах с другими версиями Microsoft Word ошибки не возникает.
В чем может быть причина и как можно ее устранить без переустановки Microsoft Word?
попробуйте сделать так:
Код:
TStringList *List;
TRegistry *Reg;
try{
Reg = new TRegistry;
Reg->RootKey = HKEY_CLASSES_ROOT;
if(!Reg->OpenKeyReadOnly("Word.Application\\CurVer")){ ShowMessage("Error");return;}
List = new TStringList;
Reg->GetValueNames(List);
String appServ = Reg->ReadString(List->Strings[0]);
Word = CreateOleObject(appServ);
//...
}
__finally{
if(List)
delete List;
if(Reg)
delete Reg;
}
TRegistry *Reg;
try{
Reg = new TRegistry;
Reg->RootKey = HKEY_CLASSES_ROOT;
if(!Reg->OpenKeyReadOnly("Word.Application\\CurVer")){ ShowMessage("Error");return;}
List = new TStringList;
Reg->GetValueNames(List);
String appServ = Reg->ReadString(List->Strings[0]);
Word = CreateOleObject(appServ);
//...
}
__finally{
if(List)
delete List;
if(Reg)
delete Reg;
}
To kot_: Не помогает. Сообщение об ошибке остается.
Цитата: AleksP
To kot_: Не помогает. Сообщение об ошибке остается.
тогда выясняйте в чем ньюанс данной конкретной версии. Возможно существуют какие либо ограничения связанные с использованием объектов для данной версии. хз. На стандартной 2003 - работает нормально?
когда кстати генерируеться ошибка?
Ошибка возникает на Ошибка появляется на OleProcedure("Add").
Хм. Попробуйте записать макрос в самом ворде - возможно для этой версии есть какието нюансы? Маловероятно - но если ошибка вылетает только на этой версии - проверьте так. Или выложите где нибудь эту версию офиса проверю на виртуальной машине
Код:
Sub Macro()
'
' Macro Macro
' Macro recorded 6/23/2008 by
'
Documents.Add Template:="Normal", NewTemplate:=False, DocumentType:=0
End Sub
'
' Macro Macro
' Macro recorded 6/23/2008 by
'
Documents.Add Template:="Normal", NewTemplate:=False, DocumentType:=0
End Sub
Цитата: AleksP
Код макроса:
Код:
Sub Macro()
'
' Macro Macro
' Macro recorded 6/23/2008 by
'
Documents.Add Template:="Normal", NewTemplate:=False, DocumentType:=0
End Sub
'
' Macro Macro
' Macro recorded 6/23/2008 by
'
Documents.Add Template:="Normal", NewTemplate:=False, DocumentType:=0
End Sub
Ну а сюда вы зачем этот код макроса выкладываете? По вашему я должен найти версию офиса для студентов и когото там, разобраться в чем проблема и доложить вам? :) Прикольный подход.
Поставьте на виртульную машину нужный вам офис - установите туда же билдер и проверяйте в чем проблема.
IUnknown *Unknown;
HResult Result;
AnsiString AppProgID;
Variant App;
Variant Doc;
AppProgID = "Word.Application";
ServerIsRunning = false;
Result = GetActiveObject(ProgIDToClassID(AppProgID),NULL,&Unknown);
if (Result == MK_E_UNAVAILABLE) {
App = CreateOleObject(AppProgID);
}
else {
App = GetActiveOleObject(AppProgID);
ServerIsRunning = true;
}
String f_name = "C:\\1.doc";//-этой и седующей строки у тя нет а НАДО
App.OlePropertyGet("Documents").OleProcedure("Open", f_name.c_str());
App.OlePropertyGet("Documents").OleProcedure("Print");
App.OlePropertyGet("Selection").OleProcedure("MoveDown", 5, 8); // <--- ñäâèãàåì êóðñîð íà 8 ñòðîê âíèç
App.OlePropertySet("Visible",true);