Seite 1 von 1

Excel - Befehle (ANFANG)

Verfasst: Mi, 07. Mär 2012 12:12
von Benz
Hi,
Da ich mit der Klasse von Microsoft irgendwie nicht klar komme ( :angry1: ), wollte ich fragen, ob ihr mir ein paar einfache Befehle für den Anfang als Beispiel hier schreiben könnt.

Mittlerweile bin ich immerhin schon soweit, dass ich Excel sichtbar machen kann.
Ich hatte schonmal mit ner COM - Schnittstelle mit einem anderen Programm zu tun, da war aber die Beschreibung um Längen besser (und verständlicher).
Bei Microschrott muss man ja im Prinzip noch VB oder C# können, um zu verstehen, was die da schreiben.

Also mein Einstieg bisher :

Code: Alles auswählen

********************************************************************************
* Für ActiveX - Word - Control                                                 *
********************************************************************************
#pragma library( "ascom10.lib" )


********************************************************************************
* Normale Include-Dateien                                                      *
********************************************************************************
#include "Gra.ch"
#include "Xbp.ch"
#include "Common.ch"
#include "Appevent.ch"
#include "Font.ch"


PROCEDURE AppSYS
RETURN

PROCEDURE Main

LOCAL oExcel

oExcel := CreateObject("Excel.Application")
IF Empty( oExcel )
    MsgBox( "Microsoft Excel ist nicht installiert" )
ELSE
    oExcel:visible := .T.
    
ENDIF

   **********************************************
   * Eventschleife                              *
   **********************************************
   nEvent := xbe_None
   WHILE nEvent != xbeP_Close
      nEvent := AppEvent ( @mp1, @mp2, @oXbp )
      oXbp:HandleEvent ( nEvent, mp1, mp2 )
      IF nEvent == xbeP_Quit
         QUIT   // AppQuit()
      ENDIF
   ENDDO

RETURN

Vielleicht könnt ihr mir für folgende Dinge ein kurzes Beispiel posten:

1) Öffnen einer existierenden Datei
2) Öffnen einer neuen Arbeitsmappe
3) Schreiben in Zelle A1
4) Kopieren von Zelle A1 zu Zelle B1
5) Ausführen eines Makros
6) Zeichnen eines Diagramms (geht das ???)
7) Drucken auf bestimmtem Drucker
8) Datei speichern
9) Datei speichern unter

Ich weiß, dass manche dieser Dinge schon in anderen Threads besprochen wurden, allerdings fehlt mir da immer der Einstieg und ein kleiner Ausschnitt, dass es funktioniert, was ich sehr demotivierend finde :angry3: :confused4:

Vielen Dank schonmal im Voraus!

Re: Excel - Befehle (ANFANG)

Verfasst: Mi, 07. Mär 2012 12:27
von georg
Hallo,


mal ein Beispiel aus einem Programm, in dem ein Excel-Report teilweise über SQLExpress, und teilweise über ActiveX befüllt wird. Am Ende wird dann die mit SQLExpress erstellte Arbeitsmappe geöffnet und "schön" gemacht:

Code: Alles auswählen

   oExcel := CreateObject("Excel.Application")
   oBook := oExcel:workBooks:open(cFile)
   oExcel:displayAlerts := .F.
   oExcel:visible       := .T.

   oBook:Sheets(1):Select()
   nSheetCount := oBook:Sheets():count
   FOR nI := 1 TO nSheetCount
      oBook:Sheets(nI):Select()
      oSheet := oBook:ActiveSheet()
      oSheet:Range("A2"):select()
      oExcel:activeWindow:FreezePanes := .T.
      oSheet:Columns("A:Z"):autoFit()
      oSheet:Rows("1:1"):Select()
      oExcel:Selection:AutoFilter()
      oSheet:Cells(2, 1):Select()
   NEXT
   oBook:Sheets(1):Select()

   oBook:SaveAs(cFile)
   oBook:close()
   oExcel:Quit()
   oExcel:destroy()
Zum Befüllen eines Feldes:

Code: Alles auswählen

oSheet:Cells(1,1):Value := cNeuerWert
oSheet:Cells(2,1):Value := oSheet:Cells(1,1)
In vielen Fällen gehe ich hin und zeichne über die Makro-Funktion auf, was ich tue, und setze das Ganze dann in Xbase um, so z.B. um aus Daten eine Pivot-Tabelle zu erstellen.

Du solltest Dir aber mal Gedanken machen, wie VBA funktioniert, denn nicht jede Funktion, die man wünscht, kann auf jede Klasse angewandt werden.


Gruss,

Georg

Re: Excel - Befehle (ANFANG)

Verfasst: Mi, 07. Mär 2012 12:50
von Benz
Wenn ich das richtig sehe, hast du mir gerade 1),3),5),8) und 9) beantwortet. DANKE :!: Zu 5) : Heißt das, es geht nicht, dass ich Makros von XBase ansteuere und diese dann ausführe? Du sagst ja, dass du sie einfach in Xbase übersetzt oder ?

Kann mir bei Gelegenheit dann noch jemand Beispiele zu 2) 4) ( 5) ) 6) und 7) geben ? Fänd ich super :!:

Re: Excel - Befehle (ANFANG)

Verfasst: Do, 08. Mär 2012 12:22
von Benz
wie kann ich denn per COM die Drucker aufrufen bzw sofort einen Drucker auswählen?

Re: Excel - Befehle (ANFANG)

Verfasst: Do, 08. Mär 2012 12:55
von georg
Hallo, Benz -


Excel starten, Makro-Aufzeichnungen starten, Drucker auswählen, Makro-Aufzeichnung beenden, Makro bearbeiten. Dann siehst Du, welche VBA-Befehle ablaufen, und die musst Du dann "nur noch" in Dein Xbase-Programm übernehmen.


Gruss,

Georg

Re: Excel - Befehle (ANFANG)

Verfasst: Do, 08. Mär 2012 14:53
von Benz
Okay, hab ich versucht:

Code: Alles auswählen

Application.ActivePrinter := "PDFCreator"
    ExecuteExcel4Macro "PRINT(1,,,1,,,,,,,,2,""PDFCreator"",,TRUE,,FALSE)
Das kommt dabei heraus.
Ich hab jetzt schon einiges ausprobiert mit Voranstellen des oExcel etc.. leider klappt es trotzdem noch nicht -.- Beim Compilieren kommt immer --> SYNTAX ERROR.

Re: Excel - Befehle (ANFANG)

Verfasst: Do, 08. Mär 2012 15:23
von georg
Hallo,


bei mir sieht das beispielsweise so aus:

Code: Alles auswählen

Sub Makro1()
    Application.ActivePrinter = "PDFCreator auf Ne00:"
End Sub
Ich bewege meine Maus auf "Application." und drücke die rechte Maustaste, und wähle "Objektkatalog". In der zweiten Dropdownliste von oben gebe ich "application" ein. Unter Klassen geht die Markierung auf "Application", und im rechten Fenster sind die Elemente aufgelistet, .ActivePrinter steht recht weit oben, ein Klick drauf ergibt am unteren Fensterrand

Code: Alles auswählen

Property ActivePrinter As String
 Element von Excel.Application
Damit weiss ich jetzt, dass ich es etwa so anwenden kann:

Code: Alles auswählen

oExcel:ActivePrinter("mein Drucker")
Das Problem mit den VBA-Objekten ist, dass man immer wissen muss, worauf sich ein solches Objekt bezieht, dann kann man die Methoden mit Doppelpunkt und Klammern abbilden.


Gruss,

Georg

Re: Excel - Befehle (ANFANG)

Verfasst: Do, 08. Mär 2012 15:39
von Benz
Perfekt! Danke für die detailierte und sehr hilfreiche Antwort !!! :)

Re: Excel - Befehle (ANFANG)

Verfasst: Do, 08. Mär 2012 15:49
von Benz
jetzt muss ich doch nochmal schreiben:
Xbase bringt mir nämlich für ActivePrinter immer eine Fehlermeldung, von wegen ich hätte zu wenige Paramter eingegeben.
Aber da gibts doch nur den einen mit String, in dem der Drucker steht oder nicht ?

Re: Excel - Befehle (ANFANG)

Verfasst: Fr, 09. Mär 2012 7:23
von georg
Hallo, Benz -


hast Du eine Excel-Datei geöffnet, wenn Du das versuchst? Wenn Du in Excel alle Dateien schliesst, kommst Du auch nicht an den Druck-Dialog, eventuell hängt es daran. Wenn nicht, bitte eine kurze Rückmeldung, dann schaue ich mal nach, ob ich das nachvollzogen bekomme.


Gruss,

Georg

Re: Excel - Befehle (ANFANG)

Verfasst: Fr, 09. Mär 2012 7:41
von Benz
ist geöffnet. Ich mach ne .xls datei per "open" auf

Re: Excel - Befehle (ANFANG)

Verfasst: Fr, 09. Mär 2012 7:43
von Benz
Kann es sein, dass die Systemzeit im Forum um eine Stunde nach hinten verschoben ist ? xD also aus "7:00" mach "8:00" ? :D (nur mal so ganz nebenbei xD)

Re: Excel - Befehle (ANFANG)

Verfasst: Fr, 09. Mär 2012 7:45
von AUGE_OHR
Benz hat geschrieben:Kann es sein, dass die Systemzeit im Forum um eine Stunde nach hinten verschoben ist ? xD also aus "7:00" mach "8:00" ? :D (nur mal so ganz nebenbei xD)
bist du schon auf Sommer Zeit ?

Re: Excel - Befehle (ANFANG)

Verfasst: Fr, 09. Mär 2012 7:48
von Benz
Bei mir am PC steht 7:48.
Im Forum beim gerade geschriebenen Beitrag steht 8:48 :D eins von beiden muss falsch sein ;)

Re: Excel - Befehle (ANFANG)

Verfasst: Fr, 09. Mär 2012 8:14
von Wolfgang Ciriack
Schau mal im Forum nach deinen Einstellungen (persönlicher Bereich), vielleicht ist dort Sommerzeit aktiv ?

Re: Excel - Befehle (ANFANG)

Verfasst: Di, 13. Mär 2012 9:51
von Christof
Hallo Benz,

ich bin mir jetzt gar nicht sicher, ob Deine Frage 5) schon beantwortet ist?

Klar kannst Du aus xBase++ raus auch Makros starten.

Code: Alles auswählen

oExcel:Run("TestMakro")
M.E. ist es wichtig, dass als Objekt das Excel-Objekt und nicht das Workbook-Objekt genommen wird.

Gruß

Christof

Re: Excel - Befehle (ANFANG)

Verfasst: Di, 13. Mär 2012 18:14
von Benz
super =) danke, genau das, was ich noch gebraucht habe =)