Aufruf eines Makros von Excel

Anfängerfragen zum Programmieren mit PureBasic.
Mike32
Beiträge: 41
Registriert: 27.05.2012 14:24

Aufruf eines Makros von Excel

Beitrag 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 :)
Benutzeravatar
Bisonte
Beiträge: 2465
Registriert: 01.04.2007 20:18

Re: Aufruf eines Makros von Excel

Beitrag von Bisonte »

Mit der Maus ?

Du willst doch nicht ein böswilliges Programm basteln.... ?
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
Mike32
Beiträge: 41
Registriert: 27.05.2012 14:24

Re: Aufruf eines Makros von Excel

Beitrag 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
Nino
Beiträge: 1300
Registriert: 13.05.2010 09:26
Wohnort: Berlin

Re: Aufruf eines Makros von Excel

Beitrag 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
Mike32
Beiträge: 41
Registriert: 27.05.2012 14:24

Re: Aufruf eines Makros von Excel

Beitrag von Mike32 »

Vielen Dank,

werde mal schauen. :D

Grüße

Mike
Benutzeravatar
Falko
Admin
Beiträge: 3535
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

Re: Aufruf eines Makros von Excel

Beitrag 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 :mrgreen:

Um Macros von VBA oder von PB aufzurufen benötigt man den Call-Befehl.

In VBA geht das ja einfach so:

Code: Alles auswählen

Sub Starte()
Call Sortiere
End Sub
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
Bild
Win11 Pro 64-Bit, PB_6.11b1
Mike32
Beiträge: 41
Registriert: 27.05.2012 14:24

Re: Aufruf eines Makros von Excel

Beitrag 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
Benutzeravatar
Kiffi
Beiträge: 10711
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Aufruf eines Makros von Excel

Beitrag 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
a²+b²=mc²
Benutzeravatar
Falko
Admin
Beiträge: 3535
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

Re: Aufruf eines Makros von Excel

Beitrag 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 :D
[/Edit]

Gruß,
Falko
Bild
Win11 Pro 64-Bit, PB_6.11b1
Benutzeravatar
Kiffi
Beiträge: 10711
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Aufruf eines Makros von Excel

Beitrag von Kiffi »

@Falko, brauchste nicht, hab ich schon. (gleicher Code :lol: ) <)

Grüße ... Kiffi
a²+b²=mc²
Antworten