Jul 282010
 

Flattr this!

Ska nu visa hur och var man skriver ett makro och allmänt hur det fungerar. Dessutom tänkte jag koppla makron till knappar i ett formulär för att få ett bra exempel. Samtidigt vill jag visa varningens finger för att hämta makron på måfå på internet för dom kan innehålla virus. Därför bör man ha någorlunda koll på vad man gör och bara besöka betrodda sidor.

Starta OpenOffice Base och skapa en ny databas. Skapa därefter en enkel tabell. Jag valde ID och Namn som fältnamn bara för att ha en tabell. Blir lättare vid senare tillfälle när vi ska göra ett formulär via guiden.

För att alla makron ska fungera så måste vi ändra på säkerhetsinställningarna i OpenOffice. Gå in under Verktyg/Alternativ och välj Säkerhet under OpenOffice.org och tryck sen på knappen Makrosäkerhet som bilden visar.

Här kan man välja hur hög säkerheten ska vara. Väljer man högsta säkerhet så kommer nästan inga makron alls att fungera. Vet man vad man håller på med så går det att skruva ner till lägsta säkerhet men rekommenderat är medelsäkerhet för då får man ett varningsfönster där man kan välja mellan aktivera eller inaktivera makron varje gång Base startas.

För att skriva vårt makro så går vi in under menyn Verktyg/Makron/Ordna makron/OpenOffice.org Basic.

Det är det markerade området vi ska jobba med. Min databas heter Makrotest.odb och har därför hamnat i listan. Väljer vi att jobba under det namnet så fungerar bara makrona just till nämnd databas. Därför är det bättre att jobba med Mina makron.

Börja med att trycka på pluset till vänster om Mina makron och vi får upp Standard och sen Module1.

Nu har vi ett makro som heter main att jobba med. Markera denna och tryck på Redigera.

Makrot main innehåller inte så mycket utan är bara ett skelett som inte gör något. Varje makro startas med sub och namnet på makrot, i detta fallet Sub main och slutas med End Sub.

Under End Sub kan vi skriva ett nytt makro. Skriv in följande:

Sub textmeddelande
Msgbox "Detta är en textruta"
End Sub

Stäng sen fönstret och gå in under Verktyg/Makron/Ordna makron/OpenOffice.org Basic igen så ser vi att vårt nya makro har tillkommit sen sist.

Nu ska vi göra en knapp i ett formulär som är länkad till makrot.

Skapa ett formulär via guiden. Det är formuläret som är det viktiga nu och inte tabellen. Välj sen att öppna formuläret i editeringsläget.

Tryck på knappen jag markerat och välj ett lämpligt ställe i formuläret att dra ut den till.

Dubbelklicka sen på den nya knappen för att få upp inställningarna. Under Allmäntfliken kan vi ändra etiketten till ett roligare namn än Kommandoknapp. Jag väljer Textruta.

Tryck sen på fliken Händelser. Det är här makrot vi skrev kommer in i bilden. Vi kan välja när makrot ska aktiveras, om det är vid fokusering av knappen eller om man trycker på musknappen. Jag tycker det är bra att använda alternativet ”Musknapp nedtryckt”.

Tryck på knappen med punkterna till höger och i följande ruta väljer vi knappen Makro. Bläddra nu till makrot textmeddelande som låg under Mina makron/standard/Module1 och tryck OK.

Som vi kan se så har vårt makro kopplats till funktionen ”Musknapp nedtryckt”, detta i egenskaperna till knappen vi skapade. Välj att spara formuläret nu och stäng det sen. Öppna nu formuläret och testa att trycka på knappen.

Denna ruta ska komma upp när man trycker på knappen.

Vi vill nu göra ett makro till som vi kopplar till en ny knapp. Gå in under makron i Verktygsmenyn igen. Detta makro är ett stäng formulär makro och detta betyder att formuläret kommer att stängas ner när man trycker på knappen.

Skriv in detta under det sista makrot (vågar inte använda stängformulär eftersom jag tvivlar på att åäö fungerar):

Sub CloseForm
ThisComponent.CurrentController.Frame.close(True)
End Sub

Nu ska det se ut enligt följande:

Skapa nu en ny knapp i formuläret i editeringsläget och testa att koppla denna knapp på samma sätt som föregående makro. På detta sätt kan man skriva makro efter makro i samma fil efter varandra med Sub och End Sub.

Testa nu och stäng ner hela Base, spara om det är behövs och starta programmet igen. Nu kommer det komma upp ett meddelande som visar att vi har makron inbakat i vår databas och det är en säkerhetsdetalj som OpenOffice.org har. Eftersom vi valde medelsäkerhet så får vi upp denna fråga.

Återigen, tänk på att säkerheten kan åsidosättas om man använder makron på felaktigt sätt. Mina exempel är skonsamma och gör inte så mycket men hämtar man hem färdiga makron från främmande sidor så bör man ha lite koll på vad dom gör så att ingenting otrevligt inträffar.

  10 Responses to “Skapa ett makro i Base”

  1. Testar det första makrot – textruta
    Får detta meddelande när jag försöker köra makrot

    BASIC-syntaxfel
    Oväntad symbol:.

    och Msgbox är färgat och försett med en pil i kolumnen till vänster.

    Det andra makrot – CloseForm – fungerade ok.

  2. Kolla dubbelfnuttarna. Det verkar som att det är något vajsing med att kopiera in kodsnutten från bloggen. Är det detta som är problemet så får jag och Påvel titta på vad man kan göra åt saken.

  3. Jag skrev om raden – och allt fungerade.
    Tack!
    En annan fråga

    Var hittar jag en lista med beskrivning på de kommandon – typ Msgbox –
    som jag kan använda i makron?

  4. I MS ACCESS finns bl a makron för att söka post och presentera i formulär. Finns motsv i BASE? Var hittar jag den i så fall?

  5. Hej Sune
    Jag har inte haft så mycket tid till att fortsätta bloggandet eftersom jag håller på att flytta och därför har mycket att ta itu med, men jag lovar att det kommer. Just makrobiten är den svåraste biten men samtidigt den mest intressanta eftersom man kan göra så mycket med makron.
    Den stora gurun inom makroprogrammering för OpenOffice heter Andrew Pitonyak och här är lite länkar till honom:

    http://www.pitonyak.org/AndrewMacro.odt
    http://www.pitonyak.org/oo.php

    Jag ska ta itu med detta så fort tid finns.
    För övrigt verkar det vara svårt att hitta en lathund på kommandon man kan ange men det är ett bra tips som jag kan ta med när jag bloggar.

  6. Har titta lite på A Pitonyaks info och har hämtat nedanst makro (Surnames3) från hans info och anpassat till min värld. (Har satt ut radnr i denna info)
    A: Vad betyder Ev.Source.Model och Ev.Source.Model.Parent?
    B: Förklara rad 6, 7, 8

    Mitt makro fungerar inte men jag får inget felmeddelande

    Rad 1 sub Combobox_Limit_Form( oEv as object )

    Rad 2 dim oMainForm3 as object
    Rad 3 dim oMainForm2 as object
    Rad 4 dim oControl as object

    Rad 5 oMainForm2 = oEv.Source.Model.Parent Rem… MainForm2 for Dummy table
    Rad 6 oMainForm3 = oMainForm2.parent.GetByName(”MainForm3”)
    Rad 7 oControl = oEv.Source.Model

    Rad 8 if oControl.CurrentValue ”” then

    Rad 9 oControl.commit Rem … Commits current value to boundfield

    Rad 10 oMainForm3 = oMainForm2.parent.GetByName(”MainForm3”)

    Rad 11 oMainForm3.Command = ”SELECT * FROM Tabell3 AS Tabell3 WHERE Uppläsare = ‘” & oControl.BoundField.String & ”‘”

    Rad 12 oMainForm3.reload() Rem loads the the MainForm so as to display the value selected in the combobox

    End if

    End sub

  7. Efter en del felsökning kom jag fram till ett fel i ett SQL-kommando i min BASE-applikation. Därefter fungerade makron OK.
    Men fortfarande önskar jag på frågorna enl föreg kommentar.

  8. Hej Sune
    Har inte haft någon tid att testa makron iom. min flytt. Jag övertar nycklarna till den nya lägenheten på onsdag. Tyvärr är jag inte så duktig på makron men så fort tid finns så ska jag ta itu med denna bit också.
    När det gäller felmeddelanden så har jag testat på lite sql-frågor som också gått igenom utan felmeddelande men ändå inte fungerat. Försöker att finna lösningen på detta.
    Antar att du ställt om makrosäkerheten så det inte är detta som spökar?

  9. Hej!
    Tack för att du lärde mig hur man gör sitt första makro i ooBase Basic!
    Jag undrar dels om du har gjort några fler exempel på makron eller om du eller någon annan kan hjälpa mig förstå varför jag inte får detta makro att fungera.

    Sub Delete
    Dim strSQL As String
    strSQL = ”DELETE FROM ””Kompositör”” WHERE ””Namn”” = ‘jalle2′”
    End Sub

    Jag har alltså i övrigt gjort exakt som i exemplen ovan. Men det händer inget i tabellen där posten med namnet ‘jalle 2’ finns.
    Mvh Bengt F

    • Är Namn = ‘jalle2’ eller är det ‘jalle 2’ (Notera mellanslaget innan 2:an. Du kommer inte att få någon träff om du söker på ‘jalle2’ om det är lagrat om ‘jalle 2’ med mellanslag.

Kommentera

%d bloggare gillar detta: