Seite 1 von 1

[gelöst] Einzelne Zahl per Button (Makro) an Calc übergeben

Verfasst: Fr 12. Dez 2014, 12:58
von Mocke47
Hallo,

ich habe folgendes Problem:

Ich möchte einen einzelne Zahl aus Base per Button (Basic-Makro) an Calc in eine bestimmte Zelle übergeben.

Bei Access zu Excel habe ich folgendes ausprobiert (natürlich ergoogelt :-)). Es funktioniert genau so wie ich mir das vorstelle, aber ich möchte nach und nach weg von Office und hier nur mal Access2Base erwähnen, einfach geniales AddOn.

Hier mein Access Code:

Code: Alles auswählen

Private Sub Test_Click()
  Dim objXLApp   As Object
  Dim objXLWkb   As Object
  Dim objXLWks   As Object
 
  Set objXLApp = CreateObject("Excel.Application")
  objXLApp.Visible = True
 
  Set objXLWkb = objXLApp.Workbooks.Open("Vorlagen\Formblatt.xlsx")
  Set objXLWks = objXLWkb.Worksheets(1)
    
  With objXLWks
      .Cells(75, 7).Value = Me!Nettosumme
  End With
  Set objXLWks = Nothing
End Sub
Vielleicht kann mir das jemand auf Base übertragen. Ich habe auch mittlerweile sehr gute Programmier-Grundkenntnisse, heißt ich kann den obigen Code gut nachvollziehen.

Danke!

Mocke47

Re: Einzelne Zahl per Button (Makro) an Calc übergeben

Verfasst: Fr 12. Dez 2014, 14:42
von gogo
So etwa?

Code: Alles auswählen

Sub Test_Click(oEvent)
    sText = oEvent.source.model.parent.getbyname("Name_des_Kontrollelements").currentValue
    myDoc = StarDesktop.loadComponentFromURL(ConvertToURL( "Laufwerk:\Ordner\Test.ods" ),"_blank", 0, array())
    myDoc.getSheets().getByName("Sheet1").getCellByPosition(75,7).setString(sText)
end sub

Re: Einzelne Zahl per Button (Makro) an Calc übergeben

Verfasst: Sa 13. Dez 2014, 12:50
von Mocke47
Hallo gogo,

danke für Deine Hilfe! Das Grundprinzip funtioniert perfekt :-).

Hier mein Code und eine kurzes Feedback:

Code: Alles auswählen

Sub Test_Click(oEvent)
	''sText = oEvent.source.model.parent.getbyname("txtZahl").currentValue
    sText="Test"
    myDoc = StarDesktop.loadComponentFromURL(ConvertToURL( "\home\ubuntu\Dokumente\Calc.ods" ),"_blank", 0, array())
    myDoc.getSheets().getByName("Tabelle1").getCellByPosition(1,10).setString(sText)
End Sub
Ich habe Dein sText ausgeblendet, da es immer einen Laufzeitfehler verursacht. Hab noch nicht herausgefunden warum. Wenn ich daher einfach einen Text ("Test")an sText übergebe funktioniert es perfekt. Er öffnet das Calc-Dokument Calc.ods und schreibt in Tabelle1 an der vordefinierten Position (Zelle) den Text.

Nun müsste statts dem String sText nur noch eine Integer Zahl übergeben werden, da die übergebene Zahl die Grundlage für Berechnungen in meiner Calc.ods ist? Ich habe schon versucht in Calc die Zielzelle als Zahl zu formatieren, aber er macht immer einen Text draus?

Vielleicht hast Du eine Idee dazu, ich probiere in der Zeit noch etwas herum :-).

Danke!

Mocke47

Re: Einzelne Zahl per Button (Makro) an Calc übergeben

Verfasst: Sa 13. Dez 2014, 13:26
von Mocke47
Hallo gogo,

habs hinbekommen :-).

Code:

Code: Alles auswählen

Sub Test_Click(oEvent)
	''sText = oEvent.source.model.parent.getbyname("txtZahl").currentValue
    sText=1234
    myDoc = StarDesktop.loadComponentFromURL(ConvertToURL( "\home\ubuntu\Dokumente\Calc.ods" ),"_blank", 0, array())
    myDoc.getSheets().getByName("Tabelle1").getCellByPosition(1,10).setValue(sText)
End Sub
Einfach in der letzten Zeile statt setString(sText) - setValue(sText) nehmen. Perfekt! Meine Berechnungen laufen auch.

Nun geht es an die Feinheiten meiner Datenbank, aber dieses Problem ist gelöst.

Danke DIr gogo.

Mocke47

Re: [gelöst] Einzelne Zahl per Button (Makro) an Calc überge

Verfasst: Sa 13. Dez 2014, 14:04
von gogo
.currentValue ???

der Laufzeitfehler kommt vermutlich weil "txtZahl" diese Eigenschaft nicht besitzt (nicht jedes Kontrollelement hat dieselben Eigenschaften, ".currentValue" haben aber viele). ".currentValue" kann man dann durch ".Text" oder ".String" oder ".State" oder ... ersetzen.
Damit wird einfach der aktuelle Wert von "txtZahl" gelesen.
Alternativ kannst Du auch über die Datenherkunft des Formulars gehen, ist noch sicherer (geht aber nur, wenn Du einen Wert suchst, der in einem Datensatz steht ;) ):
wenn z.B. die Datenherkunft des Formulars eine Tabelle mit den Spalten "ID", "Betrag", "Beschreibung" ist, und "Betrag" eine Zahl ist, dann würde diese Zahl mit folgender Codezeile als Integer in vText gespeichert:

Code: Alles auswählen

vText = oEvent.source.model.parent.getint(2)

Re: [gelöst] Einzelne Zahl per Button (Makro) an Calc überge

Verfasst: Sa 13. Dez 2014, 18:36
von Mocke47
Hallo gogo,

jetzt funktioniert alles perfekt!

Meine Datenbank war abgestürtzt und dabei hat er meine Änderung des Textfeldes auf txtZahl nicht übernommen. Da muss man erstmal drauf kommen :-).

Hier nochmal der funktionierente Code für alle die Interesse an dem Makro haben

Code: Alles auswählen

Sub Test_Click(oEvent)
    sText = oEvent.source.model.parent.getbyname("txtZahl").currentValue
    myDoc = StarDesktop.loadComponentFromURL(ConvertToURL( "\home\ubuntu\Dokumente\Calc.ods" ),"_blank", 0, array())
    myDoc.getSheets().getByName("Tabelle1").getCellByPosition(1,10).setValue(sText)
End Sub
Danke!

Mocke47