Форум: "Основная";
Текущий архив: 2004.10.17;
Скачать: [xml.tar.bz2];
ВнизСнова Excel и Delphi - plugin для Excel Найти похожие ветки
← →
Roobee (2004-10-03 11:12) [0]Уважаемые мастера, подскажите, что я неправильно делаю:
создал dll, вызываю ее из макроса VBA, в качестве параметра передаю hWnd Excel. Что надо сделать чтобы получить в процедуре dll доступ к листам и ячейкам конкретной ОТКРЫТОЙ книги?
код dll
=========
library TestDll;
uses
Windows, Excel97, Forms, Dialogs, SysUtils,
Classes, Unit1 in "Unit1.pas" {Form1},
Types97 in "Types97.pas";
{Определяем функцию как stdcall}
function GetSimpleText(var LangRus: Boolean): PChar; stdcall;
begin
{В зависимости от LangRus возвращаем русскую (True) либо английскую (False) фразу}
if LangRus then
Result := PChar("Здравствуй, мир!")
else
Result := PChar("Hello, world!");
end;
function ShowDialog(): Boolean;
begin
{Создаем экземпляр Form1 формы TForm1}
Form1 := TForm1.Create(Application);
{В Label1 выводим Msg}
Form1.Label1.Caption := "Test form dll without parameters";
{Возвращаем True только если нажата OK (ModalResult = mrOk)}
Result := (Form1.ShowModal = idOk);// mrOk
{Освобождаем память}
Form1.Free;
end;
function ShowDialog4(var Msg: PChar): Boolean; stdcall;
begin
{Создаем экземпляр Form1 формы TForm1}
Form1 := TForm1.Create(Application);
{В Label1 выводим Msg}
Form1.Label1.Caption := Msg;
{Возвращаем True только если нажата OK (ModalResult = mrOk)}
Result := (Form1.ShowModal = idOk);// mrOk
{Освобождаем память}
Form1.Free;
end;
function ShowData(var hWnd : Integer): Boolean; stdcall;
var
XlApp, XlBook, XlSheet, XlSheets, Range : Variant;
s : string;
begin
try
XlApp := hWnd; //CreateOleObject("Excel.Application");
XlSheet := XlApp.WorkBooks[1].Sheets[1]; // Active Sheet
XlSheets := XlApp.Sheets; // Array of Sheets
if VarType(XlApp) <> VarDispatch then begin // If we are not connected with MsExcel
ShowMessage("Ошибка подключения к MS Excel.");
Result := False;
Exit;
end;
s := XlSheet.Cells[1, 1];
ShowMessage(s);
Result := True;
except
XlApp.Quit;
ShowMessage("Ошибка открытия OLE через MS Excel");
Result := False;
end;
end;
{Директива exports указывает, какие функции будут экспортированы этой DLL}
exports
GetSimpleText, ShowDialog,
ShowDialog4, ShowData;
begin
end.
============
объявление функций в VBA
============
Public Declare Function GetSimpleText Lib "TestDLL" (ByRef Msg As Boolean) As String
Public Declare Function ShowDialog Lib "TestDLL" () As Boolean
Public Declare Function ShowDialog4 Lib "TestDLL" (ByRef Msg As String) As Boolean
Public Declare Function ShowData Lib "TestDLL" (ByRef Msg As Long) As Boolean
=======
вызов функции из Excel (той, которая вызывает ошибку)
Sub Call8()
Dim flag As Boolean
Dim hWnd As Long
" stdcall
hWnd = Application.hWnd
flag = ShowData(hWnd)
End Sub
======
Функция вызывается, хэндл передается - но что с этим дальше делать, как получить доступ к Cells?
Заранее благодарю всех кто откликнется.
← →
YurikGL © (2004-10-03 14:03) [1]Может тебе что-то вроде этого надо?
app := CreateOleObject("Excel.Application");
App.Visible := True;
App.activesheet.range["b1","b5"].formula:="То что мы хотим сюда записать";
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.10.17;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.038 c