Hjælp til maro

Brugerhjælp og support til makroer i LibreOffice Basic

Moderators: Lodahl, LarsBrandi

Post Reply
Killing
Posts: 2
Joined: 7. Feb 2005 11:38

Hjælp til maro

Post by Killing »

Har netop hentet open office og sidder og roder med det.

Mit problem er følgende.

Jeg har lavet en faktura til mit firma da dem der findes på nettet
ikke kan bruges.
Forstået på den måde at jeg ikke kan redigere dem i udseende og tekst.

Jeg mangler at insætte en fakturatæller der automatisk tæller op
når jeg har udskrevet en faktura og kun når jeg har udskrevet.

Ikke noget med om morgenen at komme med et nyt nummer når maskinen igen startes op.

Den skal slette alt på fakturaen men ikke den gemte version og må heller ikke slette de indtastede koder.

Derudover kan jeg heller ikke få indsat en skrive boks indeholdende
følgende ting :

Kundenavn Vare Antal pris print

Når jeg skriver under vare skal det der skrives, skrives et bestemt
sted på fakturaen. Ligesom de andre informationer.

Hele fakturaen er lavet i MICROSOFT EXEL og skulle gerne kunne
udskrives i WORD.

Selve kladen på fakturaen, altså udseendes mæssigt samt koderne skal
altid være den samme og skal på en måde gemmes så det ikke går tabt.

Kan selvfølgelig også bare fortrykke en masse fakturaklader så der kun
mangler al tekst på den samt alle udregningerne.

Har forstillet mig at der skal skrives i en boks, altså at selve fakturaen ikke kan ses før ved udskrift.

Ved at der er mange der også gerne kunne og vil bruge en så enkel
faktura uden at skulle bruge Summasumarum fra stone´s eller et andet program beregnet til en eller anden grønthandler på grøntorvet.
Mit firma og sikkert også andre har menlig ikke faste kunder der skal sendes regninger til men der skal betales kontant.

Derudover kan jeg i open office ikke flette/merge
celler. Er det bevidst udeladt eller bare glemt eller ikke kommet endnu ??

MVH
Henrik Hansen
LarsBrandi
Posts: 95
Joined: 22. Oct 2003 12:44
Location: Vojens
Contact:

Makro

Post by LarsBrandi »

Der er flere måder at lave en tæller på. Den jeg selv bruger ligner denne her :

Code: Select all

Sub Main

  Dim mPrinter(0) As New com.sun.star.beans.PropertyValue 
  
  oDocument=ThisComponent
	  oSheet=oDocument.Sheets.getByName("Kunde")'Hvilket ark skal værdien rettes på
	  oCell=oSheet.getCellByposition(1,28) 'Celle B29
  	  result=oCell.getString
			'  MsgBox result
  DatabaseContext = createUnoService("com.sun.star.sdb.DatabaseContext")
	  DataSource = DatabaseContext.getByName("Datakilde 1")
	  sSQL = "INSERT INTO tilbudsnummer (done_by) VALUES ('"+ result +"')"
'  MsgBox sSQL
	  DataSource.GetConnection("","").CreateStatement.ExecuteUpdate(sSQL)

  InteractionHandler = createUnoService("com.sun.star.sdb.InteractionHandler")
	  Connection = DataSource.ConnectWithCompletion(InteractionHandler)
	  Statement = Connection.createStatement()
	  ResultSet = Statement.executeQuery("SELECT max(tilbudsnummer) FROM tilbudsnummer")
	  If Not IsNull(ResultSet) Then
	  While ResultSet.next
	  maxvaerdi=ResultSet.getString(1)
	  Wend
	  End If

  oCell=oSheet.getCellByposition(1,29)
  	oCell.setvalue(maxvaerdi)

'  cFile = "C:\Documents and Settings\dbrewer\Desktop\MyCalc" ' Windows
   cFile = "/home/lbj/ooodat/"+ maxvaerdi +"" ' Linux
   MsgBox cFile
   cURL = ConvertToURL( cFile + ".sxc" )
   MsgBox cURL
   oDocument.storeAsURL( cURL, Array() )

   mPrinter(0).Name="wait"
   mPrinter(0).value=false
   oDocument.Print(mPrinter(0)) 
  
End Sub
Jeg bruger her en database med et løbenummer, hvor jeg henter det næste nummer i rækken. Og sætter det ind i regnearket og gemmer regnearket med det pågældende nummer. Det kan sikkert laves mere simpelt, men jeg har valgt denne løsning da der er flere brugere af systemet, så jeg er sikker på at få et entydigt nummer. Til sidst udskriver jeg dokumentet.

Rensning af felter kan ligeledes gøres på flere måder. Den nemme og mest uelegante måde er at bruge makrooptageren. Start den, slet de felter du vil have renset og stop makrooptageren.

Den anden er noget a la det her :

Code: Select all

oSheet=oDocument.Sheets.getByName("Ordrevare")'Hvilket ark skal værdien rettes på
 iCellAttr = _
	com.sun.star.sheet.CellFlags.VALUE + _
	com.sun.star.sheet.CellFlags.DATETIME + _
	com.sun.star.sheet.CellFlags.STRING + _
	com.sun.star.sheet.CellFlags.ANNOTATION + _
	com.sun.star.sheet.CellFlags.FORMULA
'	com.sun.star.sheet.CellFlags.HARDATTR + _
'	com.sun.star.sheet.CellFlags.STYLES + _
'	com.sun.star.sheet.CellFlags.OBJECTS + _
'	com.sun.star.sheet.CellFlags.EDITATTR 
	  skal_slettes=oSheet.getCellRangeByName("A3:U135")
	  skal_slettes.ClearContents(iCellAttr)
Her specificerer man hvilket område man vil have renset. CellFlags angiver hvad der skal slettes, f.eks om alle celleformateringer skal væk og lignendene.

Man kan også via makroer aktivere beskyttelse af dokument.

Vedr. flette/merge celler er jeg ikke helt med på hvad du mener.
mvh

Lars Brandi Jensen
LarsBrandi
Posts: 95
Joined: 22. Oct 2003 12:44
Location: Vojens
Contact:

En simpel tæller

Post by LarsBrandi »

Jeg kunne ikke lade være med at rette koden til, så man får en simpel tæller :

Code: Select all

Sub Main

  Dim mPrinter(0) As New com.sun.star.beans.PropertyValue 
  
  oDocument=ThisComponent
	  oSheet=oDocument.Sheets.getByName("Kunde")'Hvilket ark skal værdien rettes på
	  oCell=oSheet.getCellByposition(1,29) 'Celle B30
  	  result=oCell.getValue' Hent talværdien i B30
  	  maxvaerdi=result+1'læg 1 til B30's værdi
			  MsgBox result
'  DatabaseContext = createUnoService("com.sun.star.sdb.DatabaseContext")
'	  DataSource = DatabaseContext.getByName("Datakilde 1")
'	  sSQL = "INSERT INTO tilbudsnummer (done_by) VALUES ('"+ result +"')"
'  MsgBox sSQL
'  DataSource.GetConnection("","").CreateStatement.ExecuteUpdate(sSQL)

'  InteractionHandler = createUnoService("com.sun.star.sdb.InteractionHandler")
'	  Connection = DataSource.ConnectWithCompletion(InteractionHandler)
'	  Statement = Connection.createStatement()
'	  ResultSet = Statement.executeQuery("SELECT max(tilbudsnummer) FROM tilbudsnummer")
'	  If Not IsNull(ResultSet) Then
'	  While ResultSet.next
'	  maxvaerdi=ResultSet.getString(1)
'	  Wend
'	  End If

  oCell=oSheet.getCellByposition(1,29)' Celle B30
  	oCell.setvalue(maxvaerdi)' Skriv værdi i B30

'  cFile = "C:\Documents and Settings\dbrewer\Desktop\MyCalc" ' Windows
'   cFile = "\\hovedserver1\administration\ooodat\"+ maxvaerdi +"" ' Windows
'   cFile = "/home/lbj/mnt/HOVEDSERVER1/administratio/ooodat/"+ maxvaerdi +"" ' Linux
   MsgBox cFile
'   cURL = ConvertToURL( cFile + ".sxc" )
'   MsgBox cURL
'   oDocument.storeAsURL( cURL, Array() )

'   mPrinter(0).Name="wait"
'   mPrinter(0).value=false
'   oDocument.Print(mPrinter(0)) 
  
End Sub
mvh

Lars Brandi Jensen
Post Reply