+ Rispondi al Thread
Visualizzazione dei risultati da 1 a 9 su 9

Discussione: [calc] eliminare una colonna mediante macro

  1. #1
    antivirus77 non è in linea Novello
    Post
    22

    Smile [calc] eliminare una colonna mediante macro

    buongiorno a tutti
    qualcuno sa cortesemente che stringa scrivere all'interno di una macro di calc per eliminare una colonna (per esempio la colonna "e" del foglio elettronico)?
    Con VB in excel viene registrata senza problemi con starbasic si può ?
    Ho provota a guardare ingiro nel web ma non ho trovato nulla di utile ...

    Ultimo quesito: esiste un comando per spostare i dati di una colonna (per esempio F) prima di un'altra colonna (mettiamo prima della A)?

    Ringrazio anticipatamente
    antivirus77

  2. #2
    L'avatar di dragone bianco
    dragone bianco non è in linea Moderatore Globale
    Luogo
    Aosta
    Post
    7,734
    Ciao

    è possibile registrare una macro in calc
    Strumenti->macro->registra macro

    al termine si clicca su "Termina registrazione" pulsante contenuto in una nuovo menu

    e ti chiede dove salvarlo
    il codice e accessibile da Strumenti->macro->organizza macro->openoffice.org basic

    e appare la finestra di dialogo per poter gestire le varie macro
    Eliminare,Spostare o modificare

    Ciao

  3. #3
    antivirus77 non è in linea Novello
    Post
    22
    ciao grazie di avermi risposto prima di tutto !

    se registro la marco in calc come in excel e la salvo quando la eseguo non mi fa tutte le operazioni. Per esempio non mi elimina o nasconde, appunto, alcune colonne che avevo eliminato durante la registrazione della stessa. Allo stesso modo vale anche per colonne spostate di posizione.

    Sai perchè ?
    Grazie anticipate !!!

  4. #4
    L'avatar di dragone bianco
    dragone bianco non è in linea Moderatore Globale
    Luogo
    Aosta
    Post
    7,734
    sono anch'io alle prime armi con BASIC

    ora leggendo il codice e dopo alcuni tentativi ho capito che l'eliminazione della colonna (dopo averla registrata) è legata alla cella selezionata

    codice:
    rem ----------------------------------------------------------------------
    rem define variables
    dim document   as object
    dim dispatcher as object
    
    rem ----------------------------------------------------------------------
    rem get access to the document
    document   = ThisComponent.CurrentController.Frame
    dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
    
    rem ----------------------------------------------------------------------
    dispatcher.executeDispatch(document, ".uno:DeleteColumns", "", 0, Array())
    la prima parte dichiara 2 variabili "document" "dispatcher"
    poi esegue l'eliminazione della colonna
    codice:
    dispatcher.executeDispatch(document, ".uno:DeleteColumns", "", 0, Array())
    esegue il Dispatch nel document (che indica il doc corrente)
    cosa esegue ".unoeleteColumns" DeleteColumns sembra elimina colonna

    usa un array() (un valore vuoto)
    (ho provato con una semplice selezione e noterai che gli passa un array con valori)

    codice:
    rem ----------------------------------------------------------------------
    rem define variables
    dim document   as object
    dim dispatcher as object
    rem ----------------------------------------------------------------------
    rem get access to the document
    document   = ThisComponent.CurrentController.Frame
    dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
    
    rem ----------------------------------------------------------------------
    dim args1(0) as new com.sun.star.beans.PropertyValue
    args1(0).Name = "ToPoint"
    args1(0).Value = "$D$11"
    
    dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())
    quindi da quello che ho letto è complessa la cosa
    prova a dare un occhiata in questa discussione
    dove trovi anche questo link
    EXcel VBA X tutti - Obiettivi

    Ciao

  5. #5
    antivirus77 non è in linea Novello
    Post
    22
    Ciao
    effettivamente avevo notato che ma macro esegue la cancellazione della colonna selezionata
    guardando però i vari link non trovo una soluzione al problema. Solo nel link
    Guida alla programmazione in BASIC in StarOffice 8 - Sun Microsystems
    nel capilo 7 parla di come eliminare una colonna ....
    "
    Inserimento ed eliminazione di righe o colonne

    Gli oggetti Rows e Columns di un foglio possono accedere alle righe e alle colonne già esistenti nonché inserirle o modificarle.
    "Dim Doc As Object
    Dim Sheet As Object
    Dim NewColumn As Object

    Doc = StarDesktop.CurrentComponent
    Sheet = Doc.Sheets(0)

    Sheet.Columns.insertByIndex(3, 1)
    Sheet.Columns.removeByIndex(5, 1) Questo esempio utilizza il metodo insertByIndex per inserire una nuova colonna nella posizione della quarta colonna nel foglio (indice 3 – la numerazione inizia da 0). Il secondo parametro specifica il numero di colonne da inserire (in questo esempio: uno).
    Il metodo removeByIndex elimina la sesta colonna (indice 5). Ancora una volta, il secondo parametro specifica il numero di colonne da eliminare.
    I metodi di inserimento ed eliminazione delle righe utilizzando la funzione dell'oggetto Rows nello stesso modo dei metodi illustrati per la modifica delle colonne utilizzando l'oggetto Columns."


    ma scrivendo questo codice dà errore !!!


    Supponiamo di avere un foglio elettronico in cui vogliamo registrare mediante macro che la colonna f, per esempio, venga cancellato o nascosta a prescindere da quella che seleziono ... ci sarà un comando corretto da inserire così come c'è in excel ?!

    Come ho già detto ho copiato dentro la finestra di modifica macro l'istruzione illustrata nel link riferita all'eliminazione della colonna 6


    Dim doc as object
    Dim Sheet As Object

    Doc = StarDesktop.CurrentComponent
    Sheet = Doc.Sheets(0)

    Sheet.Columns.removeByIndex(5, 1)

    ma eseguendola mi dà errore sulla riga "
    Sheet = Doc.Sheets(0)" e non fa nulla
    eppure a quando dicono dovrebbe funzionare. Cosa è sbagliato ?

    Qualcuno sa la risposta ?

    Grazie
    Antivirus77

  6. #6
    L'avatar di dragone bianco
    dragone bianco non è in linea Moderatore Globale
    Luogo
    Aosta
    Post
    7,734
    Ciao

    Hai provato così

    codice:
    Dim Doc As Object
    Dim Sheet As Object
    
    Doc = StarDesktop.CurrentComponent
    Sheet = Doc.Sheets.getByName("Foglio 1")
    Ciao

  7. #7
    antivirus77 non è in linea Novello
    Post
    22
    ciao
    ho provato anche questo ma dà errore sulla quarta riga e non fa nulla.....

    Prova su un foglio di calc anche vuoto non si riesce a compilare una macro che cancelli una colonna prestabilita (per esempio la E) manco a morire !

    ciao

  8. #8
    L'avatar di dragone bianco
    dragone bianco non è in linea Moderatore Globale
    Luogo
    Aosta
    Post
    7,734
    Ciao

    se hai letto questo (LINK)
    Parla di StarOffice 8 (e non openoffice)
    non vorrei che la programmazione basic fosse differente

    è un errore mio, quando ho inserito il link non avevo letto tutto.

    io però userei il codice proprosto qui (LINK) dove ho fatto alcune prove e gli esempi funzionano

    Es:
    codice:
    ThisComponent.sheets.getByName("foglio1").getCellRangeByName("B1").Value = 12
    imposto il valore 12 alla cella B1 del Foglio1

    Ciao

  9. #9
    L'avatar di dragone bianco
    dragone bianco non è in linea Moderatore Globale
    Luogo
    Aosta
    Post
    7,734
    Ciao

    Questo esempio elimina la colonna C

    codice:
    ThisComponent.sheets.getByName("foglio1").Columns.removeByIndex(2, 1)
    Questo pezzo
    removeByIndex(2, 1) indica di eliminare la colonna 2 (A=0 B=1 C=2 ecc..) per la larghezza di 1 Colonna

    Ho preso spunto da qui
    http://docs.sun.com/app/docs/doc/819-1329/faail?a=view

    Ciao

+ Rispondi al Thread

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi