Seite 1 von 2
Aufruf eines Makros von Excel
Verfasst: 27.05.2012 15:40
von Mike32
Hei,
ich will Excel aufrufen und, wenn Excel 2007 gestartet ist, ein dort enthaltenes VBA-Makro starten.
Wie kann ich dies tun?
Thx
Mike

Re: Aufruf eines Makros von Excel
Verfasst: 27.05.2012 16:43
von Bisonte
Mit der Maus ?
Du willst doch nicht ein böswilliges Programm basteln.... ?
Re: Aufruf eines Makros von Excel
Verfasst: 27.05.2012 17:47
von Mike32
Bisonte
Nein! Das PB-Programm soll Excel starten, dann meine Datei öffnen, die ich vorher geschrieben habe, dann dort Werte eintragen und dann das VBA-Makro von dieser Tabelle starten. Mehr nicht.
Wie kann ich die drei Schritte (Excel starten mit bestimmter Datei öffnen, Wert eintragen, Makro starten) ausführen? - Also ohne Maus, sondern per Befehl.
Vielen Dank!
Grüße
Mike
Re: Aufruf eines Makros von Excel
Verfasst: 27.05.2012 18:25
von Nino
Mike32 hat geschrieben:Wie kann ich die drei Schritte (Excel starten mit bestimmter Datei öffnen, Wert eintragen, Makro starten) ausführen? - Also ohne Maus, sondern per Befehl.
Das geht sicherlich mit
COMatePLUS. Beispiele für Excel sind mit dabei, und es gibt auch diverse in diesem sowie im englischen PB-Forum.
Grüße, Nino
Re: Aufruf eines Makros von Excel
Verfasst: 27.05.2012 18:33
von Mike32
Vielen Dank,
werde mal schauen.
Grüße
Mike
Re: Aufruf eines Makros von Excel
Verfasst: 27.05.2012 18:54
von Falko
Zu den ersten beiden Sachen kannst du eigentlich folgende Include benutzen Beispiele sind ja auch dabei:
http://www.purebasic.fr/german/viewtopi ... 66#p239466
Die Macros werden ja in VBA geschrieben, entweder mit Aufzeichnen oder selber schreiben.
Somit sind ja auch die Funktionsnamen bekannt. Ich habe mal aus Jux eins zum Sortieren aufgezeichnet,
nachdem ich in Spalte A und B eine Reihe Werte in 16Zeilen eingetragen habe.
Das sieht dann so aus:
Code: Alles auswählen
Sub Sortiere()
'
' Sortiere Makro
'
'
Range("A1:B16").Select
ActiveWorkbook.Worksheets("Tabelle1").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Tabelle1").Sort.SortFields.Add Key:=Range("A1"), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Tabelle1").Sort
.SetRange Range("A1:B16")
.Header = xlNo
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End Sub
Damit werden dann diese beiden Spalten und 16 Zeilen sortiert, wenn man
das Macro Sortiere aufruft.
PS.: ich kenne mich nicht persönlich mit VBA aus, falls dazu fragen kommen sollten
Um Macros von VBA oder von PB aufzurufen benötigt man den Call-Befehl.
In VBA geht das ja einfach so:
Somit sind dieses zwei Macros. Wenn du dann das Starte als Macro ausführst, wird dieser dann das Macro Sortiere
ausführen. So ähnlich müsste man das mithilfe von COMatecom und dem Aufruf Call Sortiere in PB machen.
Aber dazu muss du dir die Beispiele in der Include, die ich dir oben genannt habe, mal genauer anschauen und solltest dann
zum Ziel kommen.
Gruß,
Falko
Re: Aufruf eines Makros von Excel
Verfasst: 27.05.2012 20:21
von Mike32
Falco
vielen Dank. Mir geht es um 2 Dinge.
1. Dem Benutzer soll aufgelistet werderden, welche Makros sich in der Datei befinden und
2. wenn er dann ein Makro aus der Datei ausgewählt hat, soll dieses gestartet werden.
Ich habe hierzu irgendwie keine Lösung bisher gefunden.
Kannst du (oder ein anderer) mir helfen?
Grüße
Mike
Re: Aufruf eines Makros von Excel
Verfasst: 27.05.2012 21:20
von Kiffi
Mike32 hat geschrieben:1. Dem Benutzer soll aufgelistet werderden, welche Makros sich in der Datei befinden
Code: Alles auswählen
XIncludeFile "COMatePLUS.pbi" ; Anpassen!
EnableExplicit
Define oExcel.COMateObject
Define oWorkbook.COMateObject
Define oCodeModule.COMateObject
Define VBComponentsCount
Define VBComponentsCounter
Define CodeModuleCountOfLines
Define LineCounter
Define.s ProcOfLine, OldProcOfLine
oExcel = COMate_CreateObject("Excel.Application")
If oExcel
oWorkbook = oExcel\GetObjectProperty("Workbooks\Open('DeineMappe.xls')") ; Anpassen!
If oWorkbook
VBComponentsCount = oWorkbook\GetIntegerProperty("VBProject\VBComponents\Count")
; Debug COMate_GetLastErrorDescription()
; wenn: Programmatischer Zugriff auf das Office VBA-Projekt wird verweigert
; dann: http://support.microsoft.com/kb/282830/DE
For VBComponentsCounter = 0 To VBComponentsCount - 1
If oWorkbook\GetIntegerProperty("VBProject\VBComponents(" + Str(VBComponentsCounter) + ")\Type") = 1 ; Module
oCodeModule = oWorkbook\GetObjectProperty("VBProject\VBComponents(" + Str(VBComponentsCounter) + ")\CodeModule")
If oCodeModule
CodeModuleCountOfLines = oCodeModule\GetIntegerProperty("CountOfLines")
Debug CodeModuleCountOfLines
For LineCounter = 1 To CodeModuleCountOfLines
ProcOfLine = oCodeModule\GetStringProperty("ProcOfLine(" + Str(LineCounter) + ", 0)")
If OldProcOfLine <> ProcOfLine
OldProcOfLine = ProcOfLine
Debug ProcOfLine
EndIf
Next
oCodeModule\Release()
Else
Debug "!oCodeModule"
Debug COMate_GetLastErrorDescription()
EndIf
EndIf
Next
oWorkbook\Release()
Else
Debug "!oWorkbook"
Debug COMate_GetLastErrorDescription()
EndIf
oExcel\Invoke("Quit")
oExcel\Release()
Else
Debug "!oExcel"
Debug COMate_GetLastErrorDescription()
EndIf
Schau mal, ob das bei Dir funktioniert.
Grüße ... Kiffi
Re: Aufruf eines Makros von Excel
Verfasst: 27.05.2012 21:23
von Falko
Hallo Mike
in VBA scheint das wohl einfach zu sein, wenn ich das hier lese.
http://www.herber.de/forum/archiv/260to264/t263317.htm
Ich habe erstmal diesen Link angeheftet und schaue mal,
wie und ob man das in PB umsetzen kann.
[Edit]
Oh je, Kiffi war schneller
[/Edit]
Gruß,
Falko
Re: Aufruf eines Makros von Excel
Verfasst: 27.05.2012 21:25
von Kiffi
@Falko, brauchste nicht, hab ich schon. (gleicher Code

)
Grüße ... Kiffi