Excel mit COMatePLUS steuern

Anfängerfragen zum Programmieren mit PureBasic.
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: Excel mit COMatePLUS steuern

Beitrag von Falko »

marco2007 hat geschrieben:Wenn man den Range so übergibt, dann ist`s okay:

Code: Alles auswählen

ExcelObject\Invoke("Range('F6:F7')\Select")
Sorry für die blöde Frage: Was ist rechts markieren? Damit ich weiß, was passieren soll....-> sprich: Was muss ich bei Excel drücken?
Also ich finde das keine blöde Frage. Denn du konntest ja nicht wissen woher ich das
habe. Ich kopiere die Sachen mal von Herbers Excel-Beipsiele hier hinein:
Text-Index: 036498
Thema: Allgemein
Subject: Drei Zellen rechts der aktiven Zelle markieren
Problem: Wie kann ich die 3 Zellen rechts neben der aktiven Zelle markieren?
Lösung: Geben Sie den nachfolgenden Code in ein Standardmodul ein und weisen Sie ihn einer Schaltfläche zu.

StandardModule: basMain

Sub RechtsMarkieren()
With ActiveCell
Range(.Offset(0, 1), .Offset(0, 3)).Select
End With
End Sub
Hier ist auch der Direktlink zu Herbers Excel-Beispiele, welche
neu gestaltet wurde: http://www.herber.de/mailing/036498h.htm.
Interessant ist hierbei, das man so sich viele Objekte, Methoden etc.
durchklicken kann und so schnell die Beschreibungen finden kann. Nur ist
das eben alles speziell für VBAsic.

Danach habe ich mal versucht das Makro in PB und COMate einzusetzen.


Gruß Falko
Bild
Win11 Pro 64-Bit, PB_6.11b1
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: Excel mit COMatePLUS steuern

Beitrag von Falko »

@marco2007

Kannst du in Excel mal folgendes probieren?

Öffne eine Tabelle
in dem dortigen VBA gibst du dann als Makro bzw. VBA-Script unter Allgemein folgendes ein:

Code: Alles auswählen

Sub start()
  Range(ActiveCell.Offset(0, 1), ActiveCell.Offset(3, 3)).Select
End Sub
Danach gehst du auf der Tabelle und selektierst irgendeine Zelle und wählst dann unter Makro
dein neu erstelltes Makro aus. Bei mir heißt das Makro dann Tabelle1.start

Ich hoffe du siehst dann was ich mit PB darstellen möchte.

Leider funktioniert der Code nicht, egal was ich dort noch umstelle. Irgendwie bekomme ich nicht
den richtigen Wert für ActiveCell und somit kann ich von dort aus das Range.Offset von 3*3Zellen neben
der aktiven Celle nicht erzeugen.

Vielleicht weiß jemand die Lösung in COMatePlus. Ich habe verschiedenes probiert, wie @ oder PeekS usw. Leider bekomme ich entweder eine hohe Zahl oder falsche Zeichen dargestellt um diese dann als
Range darstellen zu können.

Ich würde mich freuen, wenn mir dazu jemand was passendes hier rein stellen könnte.

Mit .Activate könnte man diesen Bereich für Formatierungen von Fonts etc. benutzen. Das ist der Grund,
warum ich die Procedure behalten möchte.

Gruß, Falko
Bild
Win11 Pro 64-Bit, PB_6.11b1
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: Excel mit COMatePLUS steuern

Beitrag von Falko »

Ich habe bis jetzt versucht die oben weiter genannte Procedure in COMate Plus
Leider bekomme ich dieses Excel-VBA-Macro nicht am Laufen.
Vielleicht hat jemand hierzu eine passende Lösung, wobei Kiffi mir damals
zu dieser Funktion in Pure Disphelper eine Lauffähige Procedure mal geschrieben hatte,
die (meines Wissens) lief.
VBA-Macro hat geschrieben:StandardModule: basMain

Sub RechtsMarkieren()
With ActiveCell
Range(.Offset(0, 1), .Offset(0, 3)).Select
End With
End Sub
In PureDisphelper sah das so aus:

Code: Alles auswählen

Procedure RechtsMarkieren(*obj); here a Demo to mark cells reight from select Cells

  Protected Range1.l, Range2.l

  dhGetValue("%o", @Range1, *obj, ".ActiveCell.Offset(%d,%d)", 0, 1)
  If Range1
    dhGetValue("%o", @Range2, *obj, ".ActiveCell.Offset(%d,%d)", 0, 3)
    If Range2
      dhCallMethod(*obj, ".Range(%o, %o).Select", Range1, Range2)
      dhReleaseObject(Range2)
    EndIf
    dhReleaseObject(Range1)
  EndIf

EndProcedure
;-- Ende, @Kiffi ;)

Und in COMatePlus erhalte ich leider eine Fehlermeldung wobei ich nicht daraus ersehen kann,
was da falsch sein soll. Es ist ja ähnlich wie im PureDisphelper :cry:

Code: Alles auswählen

Procedure MarkCellsRight(ExcelObject.COMateObject); Marks full Cells from selected Cell and right from there
  Protected.COMateObject Range1, Range2
  Range1 = ExcelObject\GetObjectProperty("ActiveCell\Offset(0,1)")
  If Range1
    Range2 = ExcelObject\GetObjectProperty("ActiveCell\Offset(0,3)")
    If Range2
      Debug Str(Range2)
      ExcelObject\SetProperty("Range('"+Str(Range1)+"','"+Str(Range2)+"')\Select")
      Debug "RechtsMarkieren(): "+COMate_GetLastErrorDescription() 
      Range2\Release()
    EndIf
    Range1\Release()
   EndIf
EndProcedure 
Ich hoffe sehr, das sich jemand hier erbarmt und aus dem PB-Source eine lauffähige Procedure
anpassen kann. Ich sehe vor lauter Bäumen den Wald nicht mehr.

Zur Funktion in Excel,
wenn man die obige funktion in VBA einsetzt, sollte als Beispiel dann eine Zelle markiert werden können,
Als Beispiel mal B1. Danach wird die Funktion über das Makro aufgerufen und von dieser Zelle werden über das Offset die Zellen C1 bis E1 selektiert. Ich hoffe ihr könnt mir auch ohne ein Bildbeispiel hier folgen.

Gruß Falko
Bild
Win11 Pro 64-Bit, PB_6.11b1
marco2007
Beiträge: 906
Registriert: 26.10.2006 13:19
Kontaktdaten:

Re: Excel mit COMatePLUS steuern

Beitrag von marco2007 »

Falko hat geschrieben:Kannst du in Excel mal folgendes probieren?
Sorry, war jetzt schon `ne `lange Zeit nicht mehr hier...
Code markiert drei Zeile nach rechts und vier nach unten...
Windows 11 - PB 6.03 x64
_________________________________
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: Excel mit COMatePLUS steuern

Beitrag von Falko »

marco2007 hat geschrieben:
Falko hat geschrieben:Kannst du in Excel mal folgendes probieren?
Sorry, war jetzt schon `ne `lange Zeit nicht mehr hier...
Code markiert drei Zeile nach rechts und vier nach unten...
Bist du sicher? Da der Bezug auf der aktiven Zelle ist, wird bei mir die erste Zelle daneben bis zur dritten daneben markiert. Leider funst das nicht in PB und ich finde den Fehler nicht. Wenn ich das noch richtig in Erinnerung habe, funktionierte das im PureDisphelper ganz gut, nachdem Kiffi mir hierzu geholfen hatte. Aber in COMate Plus ist dort wohl noch was von meiner Anpassung verkehrt.

Gruß Falko
Bild
Win11 Pro 64-Bit, PB_6.11b1
marco2007
Beiträge: 906
Registriert: 26.10.2006 13:19
Kontaktdaten:

Re: Excel mit COMatePLUS steuern

Beitrag von marco2007 »

Falko hat geschrieben:die erste Zelle daneben bis zur dritten daneben markiert
Ja, sorry -> ich habe nur die Zellen gezählt :mrgreen:
Windows 11 - PB 6.03 x64
_________________________________
marco2007
Beiträge: 906
Registriert: 26.10.2006 13:19
Kontaktdaten:

Re: Excel mit COMatePLUS steuern

Beitrag von marco2007 »

...irgendwie so könnte es funktionieren (bin schon etwas müde):

Code: Alles auswählen

Procedure MarkCellsRight(ExcelObject.COMateObject); Marks full Cells from selected Cell and right from there
  Protected.COMateObject active
  active = ExcelObject\GetObjectProperty("ActiveCell") 
  If active
  col=active\GetIntegerProperty("column") : Debug col   
  row=active\GetIntegerProperty("row")    : Debug row
  actadress.s=active\GetStringProperty("address"): Debug actadress
    Debug active\GetIntegerProperty("Offset(0,1)\column")
    Debug active\GetIntegerProperty("Offset(0,1)\row")
    Debug active\GetStringProperty("Offset(0,1)\address")
    Debug active\GetIntegerProperty("Offset(3,3)\column")
    Debug active\GetIntegerProperty("Offset(3,3)\row")
    Debug active\GetStringProperty("Offset(3,3)\address") 
    active\Release()
   EndIf
EndProcedure
-> select fehlt noch...
Windows 11 - PB 6.03 x64
_________________________________
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: Excel mit COMatePLUS steuern

Beitrag von Falko »

Dein Tip ist Goldwert. Nun habe ich es bei mir anpassen können.
Vielen Dank für dein Beispiel. Nun kann ich die Lib im Forum korrigieren. :allright:

Code: Alles auswählen

Procedure MarkCellsRight(ExcelObject.COMateObject,Offset_Zeile.l=0,Offset_Spalte.l=0,Offset_Zeile1.l=0,Offset_Spalte1.l=0); Marks an offset from active Cell right from there
  ;Thanks marco2007 (german forum)
  Protected.COMateObject active
  Protected.s actadress,Range1,Range2,Range
  active = ExcelObject\GetObjectProperty("ActiveCell")
  actadress=active\GetStringProperty("address")
  If active
    Range1=active\GetStringProperty("Offset("+Str(Offset_Zeile)+","+Str(Offset_Spalte)+")\address"):Debug Range1
    Range2=active\GetStringProperty("Offset("+Str(Offset_Zeile1)+","+Str(Offset_Spalte1)+")\address"):Debug Range2
    Range=RemoveString(Range1+":"+Range2,"$"):Debug Range
    ExcelObject\Invoke("Range('"+Range+"')\Select")
    Debug "MarkCellsRight(): "+COMate_GetLastErrorDescription() 
    active\Release()
  EndIf
EndProcedure 
Gruß Falko
Bild
Win11 Pro 64-Bit, PB_6.11b1
Antworten