Excel Makro aufrufen per OLE2

Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

Alles rund um die Sprache ABAP®: Funktionsbausteine, Listen, ALV
7 Beiträge • Seite 1 von 1
7 Beiträge Seite 1 von 1

Excel Makro aufrufen per OLE2

Beitrag von sjung3 ( / / 0 / 3 ) »
Hi Leute,

ich bräuchte eine Anweisung, mit der ich Excel Makros per ABAP aufrufen kann.

Wäre super, wenn ihr die Anweisung kurz beschreiben könntet (Makro Name: File_save).

Danke schon mal!

Gruss
Steffen :lol:

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Beitrag von dimes (Specialist / 146 / 0 / 0 ) »
Guck dir mal an, hab hier Programm was mit sowas funktioniert.
Frag mich aber nicht wie... :oops:

Code: Alles auswählen.

*     Excel
data:
      excel    type ole2_object,
      workbook type ole2_object,
      h_sheet  type ole2_object,
      h_zelle  type ole2_object.


* Excelanwendung wird geöffnet
  perform create_excel_object.

* opening the desired excel workbook
  perform open_excel_template.

* fill data
  perform print_header.

* fill parameter into new sheet
  perform create_parameter_sheet.

* create data sheet
  perform create_data_sheet.


  if not p_makro is initial.
    call method of excel 'RUN' exporting #1 = p_makro.
  endif.

  perform err_hdl.

* save sheet
  get property of excel 'ActiveSheet' = h_sheet.

  free object h_sheet.
  free object workbook.

  get property of excel 'ActiveWorkbook' = workbook.

  call method of workbook 'SAVEAS' exporting #1 = s_out
                                             #2 = 1.
  perform err_hdl.

*  CALL METHOD OF workbook 'CLOSE'.
  set property of excel 'VISIBLE' = 1.
*  CALL METHOD OF excel 'QUIT'.



****forms****



*---------------------------------------------------------------------*
*       FORM create_excel_object                                      *
*---------------------------------------------------------------------*
form create_excel_object.
* opening the excel application
  create object excel 'Excel.Application'.
  set property of excel 'Visible' = 1.
endform.                    " create_excel_object

*&---------------------------------------------------------------------*
*&      Form  open_excel_template
*&---------------------------------------------------------------------*
form open_excel_template.
  call method of excel 'Workbooks' = workbook.

* open excel file
  call method of workbook 'Open' exporting #1 = s_templ. "temuräre Datei wird erstellt. muss existieren
endform.                    " open_excel_template


*&---------------------------------------------------------------------*
*&      Form  print_header
*&---------------------------------------------------------------------*
form print_header.
  data: j type i.
* Header
  j = 1.
  loop at headers.
    perform fill_cell using 1 j headers.
    j = j + 1.
  endloop.
endform.                    " print_header

*&---------------------------------------------------------------------*
*&      Form  create_parameter_sheet
*&---------------------------------------------------------------------*
form create_parameter_sheet.
  data: zeile  type i,
        spalte type i,
        subrc  type i.
  field-symbols <field> type any.


* create parameter sheet
  call method  of excel 'WORKSHEETS' = h_sheet
          exporting #1 = 'PARAMETER'.

  call method of h_sheet  'ACTIVATE'.

  zeile  = 1.
  spalte = 0.
  loop at data.
    add 1 to zeile.
    clear: spalte.
    subrc = 0.
    while subrc = 0.
      add 1 to spalte.
      assign component spalte of structure data to <field>.
      subrc = sy-subrc.
      if subrc = 0.
        perform fill_cell using zeile spalte <field>.
      endif.
    endwhile.
  endloop.
  free object h_sheet.
endform.                    " create_parameter_sheet

*&---------------------------------------------------------------------*
*&      Form  create_data_sheet
*&---------------------------------------------------------------------*
form create_data_sheet.
  call method  of excel 'WORKSHEETS' = h_sheet.
  data: sheet type ole2_object.

  call method of excel 'WORKSHEETS' = h_sheet exporting #1 = 'DATEN'.
*  CALL METHOD OF h_sheet  'ACTIVATE'.
*  call method of h_sheet 'DELETE'.

*  CALL METHOD  OF excel 'WORKSHEETS' = h_sheet.
*  CALL METHOD OF h_sheet  'ADD'.
*  CALL METHOD  OF excel 'WORKSHEETS' = h_sheet EXPORTING #1 = 1.

  call method of h_sheet  'ACTIVATE'.

  set property of h_sheet 'NAME' = 'DATEN'.
endform.                    " create_data_sheet




*---------------------------------------------------------------------*
*       FORM fill_cell                                                *
*---------------------------------------------------------------------*
form fill_cell using i j val.
  call method of excel 'Cells' = h_zelle exporting #1 = i #2 = j.
  perform err_hdl.
  set property of h_zelle 'Value' = val .
  perform err_hdl.
endform.
*---------------------------------------------------------------------*
*       FORM err_hdl                                                  *
*---------------------------------------------------------------------*
form err_hdl.
  if sy-subrc <> 0.
    write: / 'Fehler bei OLE-Automation:'(010), sy-subrc.
    stop.
  endif.
endform.






weiß auch nicht ganz genau wie es funktionier, aber würd es auch gerne wissen. Wenn´s jemand beantworten kann.

Beitrag von ReinholdMr (ForumUser / 3 / 0 / 0 ) »
dimes hat geschrieben:Guck dir mal an, hab hier Programm was mit sowas funktioniert.
Frag mich aber nicht wie... :oops:

Code: Alles auswählen.

*     Excel

...

weiß auch nicht ganz genau wie es funktionier, aber würd es auch gerne wissen. Wenn´s jemand beantworten kann.
Hast Du dein Programm auch vollständig in funktionierender Form?
Ich würde es gerne mal ausprobieren, es gibt aber zu viele Sytaxfehler.

Gruß
Reinhold

Beitrag von sjung3 ( / / 0 / 3 ) »
Hi.

SUPER. Das hat mir sehr geholfen. Jetzt kann ich sogar die Vorlage "speichern unter".

Vielen Dank.

Auch wenn deine Syntax nicht zu 100% funktioniert, ist der eigentlich wichtige Befehl:

call method of excel 'RUN' exporting #1 = p_makro.


Das hat mir gefehlt. Dadurch, dass ich nicht in VBA programmieren kann, fällt es mir ab und zu schwer, die notwendigen Funktionen ausfindig zu machen.

Gruss
Steffen

Beitrag von dimes (Specialist / 146 / 0 / 0 ) »
Hallo Steffen.
Schön das ich dir helfen konnte. Vielleicht kannst du mir ja jetzt auch helfen.

Es geht um diesen Befehl:

call method of excel 'RUN' exporting #1 = p_makro.

Wenn ich das richtig verstehe, wird hier der Makro der in p_makro steht aufgerufen der dann die Template Datei bearbeitet. :?:

Wie hast du das gemacht? Muss ich einfach in excel ein Makro erstellen(abspeichern) und dann wird beim aufruf des Befehls das Makro für die Excel-Datei die grade offenen ist (in dem Fall die Template-Datei) abgearbeitet, oder wie soll ich das verstehen. Wie sieht es dann aber aus, wenn ein anderer User den Report offenet, beim im existiert ja diese Makro, das ich erstellt habe, nicht. Muss ich dann noch was in SAP machen oder irgendwie das Makro im Netz freigeben, und ja dann wie.

Ich weiß, ich weiß...zu viele blöde Fragen. :oops:
Vielleicht hat ja aber ne schöne kluge Ahnwort. :lol:

Danke & Gruss
dimes

Hi Dimes

Beitrag von sjung3 ( / / 0 / 3 ) »
Hallo,

Ganz kurzer Überblick:

Mit folgendem Befehl Startest du Excel, d.h. Excel wird in den Arbeitspeicher geladen und steht zur Verfügung:

CREATE OBJECT h_excel 'EXCEL.APPLICATION'

Nun kannst du alle Excel Funktionen verwenden. Es sind die gleichen, welche du in VBA zur Verfügung hast, z.B. Datei öffnen:

CALL METHOD OF h_excel 'Workbooks' = h_book.

CALL METHOD OF h_book 'OPEN'
EXPORTING
#1 = var_open.

Dieses Excel Sheet ist nun das aktive und kann bearbeitet werden, z.B. die Makros ausführen:

call method of h_excel 'RUN' exporting #1 = p_makro

Die Makros (welche zu in der Variable p_makro stehen) müssen natürlich vorhanden sein. Sonst passiert nichts. Du kannst in einem Excel Sheet per Aufzeichnung Makros erzeugen und diese aufrufen. Das ist viel einfacher, als alle Funktionen von SAP aufzurufen.


Gruss
Steffen

Neue Exel-Datei aus Vorlage

Beitrag von reinhold (ForumUser / 1 / 0 / 0 ) »
Hallo Steffen,
wenn du eine NEU Datei anhand der Excel-Vorlage erzeugen willst (und nicht die Vorlage öffnest und seber darauf achten musst, dass du sie nicht überschreibst), verende statt

CALL METHOD OF h_excel 'Workbooks' = h_book.

CALL METHOD OF h_book 'OPEN'
EXPORTING
#1 = var_open.

lieber

CALL METHOD OF h_excel 'Workbooks' = h_book.

CALL METHOD OF h_book 'ADD'
EXPORTING
#1 = var_open.

In var_open steht wieder die Vorlage.

Kleiner Tipp am Rande... :D
Gruß Reinhold

Seite 1 von 1

Vergleichbare Themen

0
Antw.
1316
Views
OLE2 mit excel makro
von matthes » 25.07.2007 14:39 • Verfasst in ABAP® Core
4
Antw.
5858
Views
Makro aus SAP heraus im Excel erzeugen
von hfahrian » 22.06.2005 11:44 • Verfasst in ABAP® Core
1
Antw.
1857
Views
OLE2 Excel
von dexter » 07.07.2006 09:48 • Verfasst in ABAP Objects®
6
Antw.
2477
Views
OLE2 Excel
von dkast » 21.11.2017 13:16 • Verfasst in ABAP® Core
3
Antw.
2298
Views
OLE2-->Excel
von Besi » 26.04.2005 17:00 • Verfasst in ABAP® Core

Über diesen Beitrag


Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

Unterstütze die Community und teile den Beitrag für mehr Leser und Austausch

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.

Unbeantwortete Forenbeiträge

Daten an Tabelle binden
vor 2 Tagen von Bright4.5 1 / 585
aRFC im OO-Kontext
vor 4 Wochen von ralf.wenzel 1 / 2213
Hilfe bei SWEC/SWE2
letzen Monat von retsch 1 / 8809