Excel w Delphi 2 pyatnia

0

Witam, tworzę plik Excela w Delphi:

procedure TForm1.Button1Click(Sender: TObject);
var
        Excel: Variant;
        i:integer;
begin
        Excel := CreateOleObject('Excel.Application'); // Otwarcie nowego Excela
        Excel.WorkBooks.Add(); // Stworzenie skoroszytu

        for i:=2 to 10 do
          Excel.cells[i,1]:=i*2;


        Excel.cells[12,1]:='=SUMA(A2:A10)';

        Excel.ActiveWorkbook.SaveAs('c:\test.xls');     //Zapis do pliku - zmień na *.xlsx jeśli masz Excel 2007 lub nowszy...
        Excel.Quit;

end;

W komórce A12 mam autosumę komórek, ale ta funkcja nie działa. W Excelu pojawiają się dziwne znaczki i dopiero, gdy kliknę w forumułę i pokażą mi się sumowane komórki i dam enter, Excel wyświetla prawidłowo liczbę.

Mam jeszcze pytanie, czy da się w plik Excela wstawić marko i przycisk je wywołujący.

0

Spróbuj nie Cells[] := , tylko Cells[].Formula := (nie jestem pewny nazwy). Co do drugiego nie wiem - nie próbowałem.

b

0

Niestety też nie działa

0

A użyj angielskiej nazwy '=SUM(...'

0

dzięki działa, pozostał jeszcze drugi problem

0

first on Excel go to Tools -> Macro -> Security -> Trusted Publishers and check Trust Access to Visual Basic Project
then try the following code:

Insert a TExcelApplication component on your form and a buttom

procedure TForm1.Button1Click(Sender: TObject);
var
  Module: Variant;
begin
  ExcelApplication1.Visible[0] := True;
ExcelApplication1.Workbooks.Open('C:\temp\temp.xls',EmptyParam,EmptyParam,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,EmptyParam,EmptyParam, 0);
{create the module}
  Module := ExcelApplication1.VBE.ActiveVBProject.VBComponents.Add(1);
  Module.CodeModule.InsertLines(1,'Public sub test()');
  Module.CodeModule.InsertLines(2,'ShowMsg("helloworld")');
  Module.CodeModule.InsertLines(3,'End Sub');
  ExcelApplication1.ActiveWorkbook.Save(0);
end;

albo tak

procedure TForm1.setmacro;
var
  objModule : OleVariant;
begin
  objModule := ExcelApplication1.VBE.ActiveVBProject.VBComponents.Add(1);
  objModule.CodeModule.InsertLines(1,'Public sub HiThere()');
  objModule.CodeModule.InsertLines(2,'ShowMsg("Hi there !")');
  objModule.CodeModule.InsertLines(3,'End Sub');
  XLApplication.Run('HiThere()')
end;

i najważniejsze GOOGLE!!!

http://www.google.pl/search?hl=pl&source=hp&q=delphi+excel+macro&btnG=Szukaj+w+Google&lr=&aq=f&oq=

0

Da się przerobić jakoś ten kod, żeby nie był potrzebny komponent ExcelApplication1?? Mam Delphi 7 Personal, i nie mam tego komponentu. A do Excela uzyskuje dostęp jak napisałem w pierwszym poście

0

Tak z gupa spróbował bym tak jak napisał puchi, ale zamiast jego komponentu uzył bym utworzonej w Twój sposób instancji Excel.Application.

b

0

Napisałem tak:

var
objModule : OleVariant;
begin

objModule := CreateOleObject('Excel.Application');

objModule.VBE.ActiveVBProject.VBComponents.Add(1);
objModule.CodeModule.InsertLines(1,'Public sub HiThere()');
objModule.CodeModule.InsertLines(2,'ShowMsg("Hi there !")');
objModule.CodeModule.InsertLines(3,'End Sub');

objModule.ActiveWorkbook.SaveAs('c:\test.xls');

i wywala błąd:
Project Project1.exe raised exception class EOleException with message 'Programistyczny dostęp do projektu w języku Visual Basic nie jest zaufany'. Process stopped. Use Step or Run to continue.

0

Fajny komunikat : ) Nie spotkałem się z takim. Musisz pogoglować. Albo spróbuj dołożyć tą linijkę co CreateOleObject która otwiera dokument.

b

0

gdzie mam dołożyć tę linijkę??

0
b0bik napisał(a)

Fajny komunikat : ) Nie spotkałem się z takim. Musisz pogoglować. Albo spróbuj dołożyć tą linijkę co CreateOleObject która otwiera dokument.

b

albo uważnie przeczytać pierwszą linijkę postu puchiego

0

Dalej nie działa. Google nic nie mówi o tym komunikacie. Próbował ktoś w ogóle wstawić skrypt VBA przez Delphi??

1 użytkowników online, w tym zalogowanych: 0, gości: 1