Non ho parole........ sei un grande! Azzeccata in pieno la richiesta e
funziona che è una meraviglia.
Grazie infinite.
Danilo.
Paolo Mantovani ha scritto:
Ciao Danilo,
Nord Studio snc ha scritto:
Buongiorno, mi chiamo Danilo.
Abbiamo appena migrato il pacchetto Office verso OpenOffice ma ci
stiamo imbattendo in un muro per quanto riguarda l'utilizzo di una
macro per il nostro sistema di pianificazione settimanale.
C'è qualcuno che ci può aiutare nell'operazione?
In parole povere utilizziamo due fogli in Calc dove sul primo
denominato "produzione" ci sono delle righe che descrivono le varie
commesse con i dati di lavorazione.
Quando l'operatore finisce quel determinato lavoro, clicca sul
pulsante collegato alla macro che sposta l'intera riga selezionata
(quindi c'è un problema di cella attiva perchè non sempre i lavori
vengono ultimati sequenzialmente) e spostati (tagliati) sul secondo
foglio denominato ""archivio" Eseguiti" nella riga 3 spostando verso
il basso le righe già presenti e inserendo la data e l'ora
dell'avvenuta operazione nella cella C3.
Allego se può essere utile la macro originale in VBA.
Premetto che hai fatto benissimo ad allegare il codice, purtroppo però
in questo caso, il codice VBA è stato ottenuto mediante registratore
di macro, contiene molte ripetizioni (c'è un copia/incolla effettuato
sugli stessi dati per ben 3 volte) e parti apparentemente inutili. Non
è una buona base di partenza perché richiederebbe un po di pulizia
tenendo sottomano Excel per le varie prove.
Io ho provato a decodificare StarBasic ma se devo essere sincero è
abbastanza complicato e non di facile interpretazione.
Detto francamente, ho grosse perplessità riguardo quanto affermi,
comunque, bando alle ciance e veniamo al sodo.
Provo a riepilogare quello che hai detto sperando di avere inteso bene
tutto quanto:
0) situazione iniziale:
======================
hai due tabelle: chiamiamole "produzione" e "archivio"
L'utente è nella tabella "produzione", seleziona una cella che fa
parte del record da spostare e clicca su un pulsante che aziona la macro.
La macro a questo punto deve fare alcune cose
1) tabella "produzione":
copiare i dati contenuti nella riga individuata dalla cella
attiva
2) tabella "archivio":
inserire una riga vuota nella posizione 3
incollare i valori precedentemente copiati
inserire la data corrente nella cella C3
3) tabella "produzione":
eliminare la riga contenente la cella selezionata
La procedura che ho descritto ha un punto debole, ovvero: che succede
se l'utente nella tabella "produzione" ha selezionato un range con più
righe? e in caso di selezione multipla?
Per questo motivo, io prima di procedere con le istruzioni successive
farei controllino alla selezione.
Ok ora vediamo come tradurre in codice l'algoritmo descritto.
....vedi codice alla fine di questo post....
NB:
Il codice sotto riportato può potenzialmente causare perdita di dati o
altri problemi e risultati imprevedibili.
Sconsiglio vivamente l'utilizzo del codice a meno che non si sappia
esattamente quello che si sta facendo.
In ogni caso declino qualunque responsabilità.
NB2: il codice è solo una proposta, dovrai adattarlo alle tue necessità.
saluti
Paolo Mantovani
-----------------8<-----------------
REM ***** BASIC *****
Sub Main
'inizializzamo alcune variabili
oDoc = ThisComponent
oSelection = oDoc.getCurrentSelection()
oActiveSheet = oDoc.CurrentController.ActiveSheet
oShProduzione = oDoc.Sheets.getByName("produzione")
oShArchivio = oDoc.Sheets.getByName("archivio")
'sanity checks:
If Not (oActiveSheet.Name = "produzione") Then
sMsg = "Per lanciare la procedura occorre spostarsi "
sMsg = sMsg & "sulla tabella ""produzione"""
MsgBox sMsg, 64
Exit Sub
End If
If Not oSelection.supportsService("com.sun.star.sheet.SheetCell") Then
sMsg = "Ce l'hai quasi fatta ma "
sMsg = sMsg & "è necessario selezionare una sola cella"
MsgBox sMsg, 64
Exit Sub
End If
'ok se siamo arrivati fino a qui la selezione è a posto!
'individuo la riga contenente la cella attiva:
iRowIndex = oSelection.CellAddress.Row
'ottengo il range da spostare (l'intera riga)
oSrcRow = oShProduzione.Rows.getByIndex(iRowIndex)
'tabella "archivio":
'inserisco una riga vuota nella posizione 3 (ovvero indice 2)
oShArchivio.Rows.insertByIndex(2, 1)
'incollare i valori contenuti nella riga selezionata
'della tabella archivio
aDest = oShArchivio.getCellRangeByName("A3").CellAddress()
aSrc = oSrcRow.RangeAddress()
oShArchivio.copyRange(aDest, aSrc)
'inserire la data corrente nella cella C3
oShArchivio.getCellRangeByName("C3").FormulaLocal = Now()
'tabella "produzione":
'eliminare la riga contenente la cella selezionata
oShProduzione.Rows.removeByIndex(iRowIndex, 1)
End Sub
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]