von Knoddler » Fr, 24.06.2011 11:24
Hallo komma4,
vielen Dank für die erste schnelle Antwort.
Eigentlich ist die Umsetzung in der Form darauf zurückzuführen, dass ich das Layout der Anwendung über Calc an das bisherige Layout anlehnen kann, so dass die Mitarbeiter mit dem Gewohnten weiterarbeiten können.
Übergangsweise hat ein externer EDV-Dienstleister die Sache via Access realisiert, wobei die Anwendung den Mitarbeitern, die Access nicht zur Verfügung haben über eine Runtime-Version zur Verfügung gestellt wird. Die Umsetzung hakt auch an manchen Stellen, was zu Beschwerden der Kollegen führt, so dass ich versuche die Anwendung wieder so auf die Beine zu stellen, dass es wie gewohnt und stabil läuft.
Vielleicht noch zu meinem Hintergrund: Ich bin weder Programmierer, noch im EDV-Bereich tätig. Ich hatte nur in der Vergangenheit festgestellt, dass sich über Makros in der LotusSmartSuite-Welt mir und meinen Kollegen vieles leichter machen lässt. Und so wäre es schön, wenn es mir gelänge, das auch unter Open Office zu realisieren.
Zum konkreten Fall zurück:
Wenn sich ein Export des Tabellenbereiches aus Calc in Access realisieren ließe, wäre das natürlich auch ein Thema, da die Datenbank eigentlich nur Auswertungs- und Wiedervorlagezwecken dient und von den Mitarbeitern nicht mehr bearbeitet wird.
Meine laienhafte Vorstellung ist die, dass ich den besagten Tabellenbereich aus Calc in ein Array packe, das dann über einen Datenkanal oder Datenverbindung per Code in die korrespondierende Tabelle der Datenbank überführe, sprich: anhänge.
Den Code, der den Ausdruck des Vordruckes und das Bepacken des Arrays generiert, habe ich mal angefügt:
Code: Alles auswählen
REM ***** BASIC *****
Sub Drucken_Kobo
on Error goto Err_Handler
Dim oDoc as object
Dim oSheetQuelle as object
Dim oSheetZiel as object
dim oRange as object
dim oQuelle as object
Dim oZiel as object
Dim oCon as object
Dim oCursor as object
Dim oPrinter as Object
Dim oDrBereich as Object
Dim sDBerAnf as string
Dim sDBerEnd as string
Dim lEndBerColumn as long
Dim lEndBerRow as long
Dim aDruckBer(0)
'GlobalScope.BasicLibraries.LoadLibrary("Tools")
REM Fügt das Unterschriftenmodul an
oDoc = ThisComponent
oCon = oDoc.getCurrentController()
osheetQuelle = oDoc.sheets.GetByName("Kontrollelem")
oSheetZiel = odoc.sheets.GetByName("KOBOMÄBL")
oQuelle = oSheetQuelle.getCellRangeByName("El_BfV").RangeAddress
Fr_Zelle_Kobo
oZiel = oSheetZiel.getCellByPosition(oFrZe.Column, oFrZe.Row).CellAddress
'Msgbox s
'printdbgInfo(oziel)
oCon.select(oziel)
oSheetZiel.CopyRange(oZiel, oQuelle)
REM Hier muss jetzt der Druckbereich in Abhängigkeit von der Anzahl der Komponenten festgelegt werden
oDoc = ThisComponent
oSheet = ThisComponent.sheets.getByName("Kobomäbl")
'oCon = oDoc.getCurrentController()
'Ermittelt den Bereich, der als Druckbereich alle eingestellten Module umfasst
oRange = oSheet.getCellRangeByName("a17")
oCursor = osheet.CreateCursorByRange(oRange)
oCursor.GotoStart()
nSp = oCursor.getRangeAddress.startColumn
oCursor.gotoEnd()
nZe = oCursor.getRangeAddress.endRow
oZelle = oSheet.getCellByPosition(nSp, nZe +1)
lEndBerColumn = ozelle.cellAddress.column + 11
lEndBerRow = ozelle.cellAddress.row
sDrBerEnd = ozelle.celladdress.row
oDrBereich = oSheet.getCellRangeByPosition(0,0,lEndBerColumn,lEndBerRow)
aDruckBer(0) = oDrBereich.RangeAddress
oSheet.setPrintAreas(aDruckBer())
aDruck = osheet.getPrintAreas
'oDoc = ThisComponent
'oSheet = ThisComponent.sheets.getByName("Kobomäbl")
'oCon = oDoc.getCurrentController()
oRange = oSheet.getCellRangeByName("a1")
ocon.select(oRange)
oprinter = ThisComponent.getPrinter()
dim arg(0) as new com.sun.star.beans.PropertyValue
arg(0).name = "CopyCount"
arg(0).value = 1
ThisComponent.print(arg())
osheet = oDoc.sheets.getByName("Eing_dat")
oRange = osheet.getCellRangeByName("a1")
oCon = oDoc.getCurrentController()
oCon.select(oRange)
DBTransfer
Exit sub
Err_Handler:
msgbox Err & ":" & chr(10) & Error & " in Zeile: " & Erl
End Sub
Sub DBTransfer
on Error goto Err_Handler
Dim oDBRange as object
Dim oDoc, oSheet, oCon as object
Dim aTranferContainer()
oDoc = ThisComponent
oSheet = oDoc.Sheets.getByName("Makros")
oDBRange = oSheet.getCellRangeByName("TÜ")
aTransferContainer() = oDBRange.DataArray()
Exit sub
Err_Handler:
msgbox Err & ":" & chr(10) & Error & " in Zeile: " & Erl
End Sub
Hab ja keine Ahnung, ob ich den Code jetzt richtig eingefügt habe (Forumsneuling!).
Ich hoffe daraus geht jedenfalls hervor, wie ich mir das vorgestellt habe.
Vielen Dank für eine Rückanwort.
Moderation,4: CODE tags gesetzt
Hallo komma4,
vielen Dank für die erste schnelle Antwort.
Eigentlich ist die Umsetzung in der Form darauf zurückzuführen, dass ich das Layout der Anwendung über Calc an das bisherige Layout anlehnen kann, so dass die Mitarbeiter mit dem Gewohnten weiterarbeiten können.
Übergangsweise hat ein externer EDV-Dienstleister die Sache via Access realisiert, wobei die Anwendung den Mitarbeitern, die Access nicht zur Verfügung haben über eine Runtime-Version zur Verfügung gestellt wird. Die Umsetzung hakt auch an manchen Stellen, was zu Beschwerden der Kollegen führt, so dass ich versuche die Anwendung wieder so auf die Beine zu stellen, dass es wie gewohnt und stabil läuft.
Vielleicht noch zu meinem Hintergrund: Ich bin weder Programmierer, noch im EDV-Bereich tätig. Ich hatte nur in der Vergangenheit festgestellt, dass sich über Makros in der LotusSmartSuite-Welt mir und meinen Kollegen vieles leichter machen lässt. Und so wäre es schön, wenn es mir gelänge, das auch unter Open Office zu realisieren.
Zum konkreten Fall zurück:
Wenn sich ein Export des Tabellenbereiches aus Calc in Access realisieren ließe, wäre das natürlich auch ein Thema, da die Datenbank eigentlich nur Auswertungs- und Wiedervorlagezwecken dient und von den Mitarbeitern nicht mehr bearbeitet wird.
Meine laienhafte Vorstellung ist die, dass ich den besagten Tabellenbereich aus Calc in ein Array packe, das dann über einen Datenkanal oder Datenverbindung per Code in die korrespondierende Tabelle der Datenbank überführe, sprich: anhänge.
Den Code, der den Ausdruck des Vordruckes und das Bepacken des Arrays generiert, habe ich mal angefügt:
[code]REM ***** BASIC *****
Sub Drucken_Kobo
on Error goto Err_Handler
Dim oDoc as object
Dim oSheetQuelle as object
Dim oSheetZiel as object
dim oRange as object
dim oQuelle as object
Dim oZiel as object
Dim oCon as object
Dim oCursor as object
Dim oPrinter as Object
Dim oDrBereich as Object
Dim sDBerAnf as string
Dim sDBerEnd as string
Dim lEndBerColumn as long
Dim lEndBerRow as long
Dim aDruckBer(0)
'GlobalScope.BasicLibraries.LoadLibrary("Tools")
REM Fügt das Unterschriftenmodul an
oDoc = ThisComponent
oCon = oDoc.getCurrentController()
osheetQuelle = oDoc.sheets.GetByName("Kontrollelem")
oSheetZiel = odoc.sheets.GetByName("KOBOMÄBL")
oQuelle = oSheetQuelle.getCellRangeByName("El_BfV").RangeAddress
Fr_Zelle_Kobo
oZiel = oSheetZiel.getCellByPosition(oFrZe.Column, oFrZe.Row).CellAddress
'Msgbox s
'printdbgInfo(oziel)
oCon.select(oziel)
oSheetZiel.CopyRange(oZiel, oQuelle)
REM Hier muss jetzt der Druckbereich in Abhängigkeit von der Anzahl der Komponenten festgelegt werden
oDoc = ThisComponent
oSheet = ThisComponent.sheets.getByName("Kobomäbl")
'oCon = oDoc.getCurrentController()
'Ermittelt den Bereich, der als Druckbereich alle eingestellten Module umfasst
oRange = oSheet.getCellRangeByName("a17")
oCursor = osheet.CreateCursorByRange(oRange)
oCursor.GotoStart()
nSp = oCursor.getRangeAddress.startColumn
oCursor.gotoEnd()
nZe = oCursor.getRangeAddress.endRow
oZelle = oSheet.getCellByPosition(nSp, nZe +1)
lEndBerColumn = ozelle.cellAddress.column + 11
lEndBerRow = ozelle.cellAddress.row
sDrBerEnd = ozelle.celladdress.row
oDrBereich = oSheet.getCellRangeByPosition(0,0,lEndBerColumn,lEndBerRow)
aDruckBer(0) = oDrBereich.RangeAddress
oSheet.setPrintAreas(aDruckBer())
aDruck = osheet.getPrintAreas
'oDoc = ThisComponent
'oSheet = ThisComponent.sheets.getByName("Kobomäbl")
'oCon = oDoc.getCurrentController()
oRange = oSheet.getCellRangeByName("a1")
ocon.select(oRange)
oprinter = ThisComponent.getPrinter()
dim arg(0) as new com.sun.star.beans.PropertyValue
arg(0).name = "CopyCount"
arg(0).value = 1
ThisComponent.print(arg())
osheet = oDoc.sheets.getByName("Eing_dat")
oRange = osheet.getCellRangeByName("a1")
oCon = oDoc.getCurrentController()
oCon.select(oRange)
DBTransfer
Exit sub
Err_Handler:
msgbox Err & ":" & chr(10) & Error & " in Zeile: " & Erl
End Sub
Sub DBTransfer
on Error goto Err_Handler
Dim oDBRange as object
Dim oDoc, oSheet, oCon as object
Dim aTranferContainer()
oDoc = ThisComponent
oSheet = oDoc.Sheets.getByName("Makros")
oDBRange = oSheet.getCellRangeByName("TÜ")
aTransferContainer() = oDBRange.DataArray()
Exit sub
Err_Handler:
msgbox Err & ":" & chr(10) & Error & " in Zeile: " & Erl
End Sub[/code]
Hab ja keine Ahnung, ob ich den Code jetzt richtig eingefügt habe (Forumsneuling!).
Ich hoffe daraus geht jedenfalls hervor, wie ich mir das vorgestellt habe.
Vielen Dank für eine Rückanwort.
[color=#800000]Moderation,4[/color]: CODE tags gesetzt