[Risolto] Inserimento valore cella in un campo data - Macro Calc

Discussioni sull'applicazione per i fogli di calcolo
Rispondi
Arbellini
Messaggi: 79
Iscritto il: mercoledì 29 giugno 2022, 5:44

[Risolto] Inserimento valore cella in un campo data - Macro Calc

Messaggio da Arbellini »

Salve,
mi piacerebbe capire come inserire un valore "una data", da una cella a un Campo data.
Cercando nel forum ho trovato una macro che fa il contrario:
dal Campo data verso una cella tramite associazione a evento foglio

Codice: Seleziona tutto

Sub Main(oEv)
Dim oCell As Object
oCell = thisComponent.Sheets.getByName("data_entry").getCellRangeByname(oEv.Source.Model.Name)
oCell.FormulaLocal = oEv.Source.getText()
End Sub 
Riguardo al mio quesito, credevo di aver trovato una soluzione, peccato che la macro non mi funziona.
La soluzione "nel mio caso non idonea" si riferisce ad una risposta di Gaetanopr al seguente link viewtopic.php?f=9&t=2408

L'errore si presenta nel secondo esempio:

Codice: Seleziona tutto

Sub CampoData1()                            ' la data scritta nella cella F12 la riporta nel campo data
                                            ' ESEMPIO 2
   Dim Doc AS Object
   Dim Sheet As Object
   Dim DrawPage As Object
   Dim Form As Object
   Dim Ctl As Object
   Dim oCell 
   
   Doc = StarDesktop.CurrentComponent
   Sheet = Doc.Sheets.GetByIndex(0)
   DrawPage = Sheet.DrawPage
   Form = DrawPage.Forms.GetByIndex(0) 
   Ctl = Form.getByName("Campodata2")      'Campo data  (Controllo del formulario)
   oCell = Sheet.getCellByPosition(5, 11)  'F12 cella dove inserire la data da riportare nel Campo data
   
   Ctl.date =  CDateToIso(oCell.value)     'Conversione rappresentazione di data ISO 8601
      
End Sub
ERRORE:

Codice: Seleziona tutto

Ctl.date =  CDateToIso(oCell.value) 
Ci sarebbe una soluzione?

Grazie

"Allegato "Campo DATA_CELLA" e
"MACRO_CELLA_CAMPODATA"
Allegati
MACRO_CELLA_CAMPODATA.ods
(18.87 KiB) Scaricato 87 volte
Campo DATA_CELLA.ods
(11.3 KiB) Scaricato 87 volte
Ultima modifica di Arbellini il domenica 4 settembre 2022, 0:49, modificato 2 volte in totale.
LibreOffice 7.3.4.2 su MacOS 10.12.6 Sierra
Arbellini
Messaggi: 79
Iscritto il: mercoledì 29 giugno 2022, 5:44

Re: Inserimento valore cella in un campo data - Macro Calc

Messaggio da Arbellini »

Ho modificato il titolo perché non era corretto
Scusate
LibreOffice 7.3.4.2 su MacOS 10.12.6 Sierra
cwolan
Messaggi: 12
Iscritto il: mercoledì 3 agosto 2022, 6:49

Re: Inserimento valore cella in un campo data - Macro Calc

Messaggio da cwolan »

Arbellini ha scritto:L'errore si presenta nel secondo esempio:
Vedi Date Struct
et prova il file allegato.
Allegati
testCampoData1.ods
(15.53 KiB) Scaricato 88 volte
OpenOffice 4.1.14, LibreOffice 7.2.7.2 & 7.4.6.2
Windows 7,10,11
Arbellini
Messaggi: 79
Iscritto il: mercoledì 29 giugno 2022, 5:44

Re: Inserimento valore cella in un campo data - Macro Calc

Messaggio da Arbellini »

Grazie
LibreOffice 7.3.4.2 su MacOS 10.12.6 Sierra
Arbellini
Messaggi: 79
Iscritto il: mercoledì 29 giugno 2022, 5:44

Re: [Risolto] Inserimento valore cella in un campo data - Macro Calc

Messaggio da Arbellini »

Mi piacerebbe associare le due macro, per il momento con una condizione, all'evento del foglio.
Ci provo, se non riesco ci rivedremo :D
Grazie ancora.
LibreOffice 7.3.4.2 su MacOS 10.12.6 Sierra
patel
Volontario attivo
Volontario attivo
Messaggi: 4030
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: [Risolto] Inserimento valore cella in un campo data - Macro Calc

Messaggio da patel »

Allego esempio con i 3 casi funzionanti, uno dei problemi era l'uso di celle unite.
Allegati
CampoData1.ods
(17.3 KiB) Scaricato 76 volte
-------------------
Libre Office 7.5.3.2 su Windows 11
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Arbellini
Messaggi: 79
Iscritto il: mercoledì 29 giugno 2022, 5:44

Re: [Risolto] Inserimento valore cella in un campo data - Macro Calc

Messaggio da Arbellini »

Grazie patel,
nel tuo file il terzo esempio non mi funziona se cambio la data iniziale, eppure se il campo scadenza riporta la somma delle celle E23 + F23
dovrebbe funzionare.

A parte questo, nel file che allego ho modificato il primo esempio associando il nome del campo con la definizione del nome della cella,
in modo da poter controllare la posizione della cella.

Nel secondo esempio, invece mi funziona soltanto con macro associata a pulsante, ma non con evento foglio.

Volevo capire come funzionassero i campi data, per il momento mi basta sapere questo,
anche perché le cose si complicherebbero se dovessi utilizzarli sulla base di altre condizioni.

La mia idea era di provare a utilizzare i campi data per l'inserimento di dati, che però, prevede 3 modalità:
1 Inserimento dati
2 ricerca
3 Modifica

..., in particolare nella modalità ricerca la data verrebbe visualizzata da una cella al campo data,
ma se si passa a voler modificare i dati per aggiornare si dovrà attivale al contrario il campo data verso la cella.

Per non parlare di come risolvere un altro grosso problema:
Se una macro prevede la cancellazione dei dati nelle celle di riferimento dopo l'esecuzione il campo data mi restituirebbe
un valore "scorretto" (30/12/1989).

La soluzione che cerco sui campi data sarebbe quella di capire se impuntarmi o andare avanti,
con il compromesso di inserire a mano soltanto 3 caselle per la data.

Magari apro un'altro post

Buona serata
Allegati
Campo_Data bis.ods
(16.42 KiB) Scaricato 78 volte
LibreOffice 7.3.4.2 su MacOS 10.12.6 Sierra
patel
Volontario attivo
Volontario attivo
Messaggi: 4030
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: [Risolto] Inserimento valore cella in un campo data - Macro Calc

Messaggio da patel »

Arbellini ha scritto: domenica 4 settembre 2022, 23:03 Nel secondo esempio, invece mi funziona soltanto con macro associata a pulsante, ma non con evento foglio.
Non capisco cosa vuoi ottenere.
Comunque esponi un problema alla volta e ben dettagliato.
-------------------
Libre Office 7.5.3.2 su Windows 11
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Arbellini
Messaggi: 79
Iscritto il: mercoledì 29 giugno 2022, 5:44

Re: [Risolto] Inserimento valore cella in un campo data - Macro Calc

Messaggio da Arbellini »

Per il momento credo di aver risolto,
riguardo al file che ho allegato e che ri-allego, ho provato a sostituire l'associazione pulsante - macro (funzionante),
con evento foglio, ma non funziona,
dopodichè chiuderò il discorso "campo data, per andare avanti con altro.
Allegati
Campo_Data bis.ods
(16.42 KiB) Scaricato 72 volte
LibreOffice 7.3.4.2 su MacOS 10.12.6 Sierra
patel
Volontario attivo
Volontario attivo
Messaggi: 4030
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: [Risolto] Inserimento valore cella in un campo data - Macro Calc

Messaggio da patel »

Ma non hai spiegato cosa intendi per evento foglio, ti avevo chiesto cosa vuoi ottenere, dillo con parole tue.
-------------------
Libre Office 7.5.3.2 su Windows 11
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Arbellini
Messaggi: 79
Iscritto il: mercoledì 29 giugno 2022, 5:44

Re: [Risolto] Inserimento valore cella in un campo data - Macro Calc

Messaggio da Arbellini »

Intendo abbinare la seguente macro ad un evento del foglio :D

Codice: Seleziona tutto

Sub CampoData1()                            ' la data scritta nella cella F12 la riporta nel campo data
                                            ' ESEMPIO 2
   Dim Doc AS Object
   Dim Sheet As Object
   Dim DrawPage As Object
   Dim Form As Object
   Dim Ctl As Object
   Dim oCell 
   
   Doc = StarDesktop.CurrentComponent
   Sheet = Doc.Sheets.GetByIndex(0)
   DrawPage = Sheet.DrawPage
   Form = DrawPage.Forms.GetByIndex(0) 
   Ctl = Form.getByName("Campodata2")      
   oCell = Sheet.getCellByPosition(5, 11)  
   
   'Ctl.date =  CDateToIso(oCell.value)    
   
   strDate = CDateToIso(oCell.value)
  	
   oDate = createUnoStruct("com.sun.star.util.Date")
   oDate.Year = CInt(Left(strDate,4))
   oDate.Month = CInt(Mid(strDate,5,2))
   oDate.Day = CInt(Right(strDate,2))
	
   Ctl.date = oDate
      
End Sub

Codice: Seleziona tutto

[code]Sub CampoData1()        ' la data scritta nella cella F12 la riporta nel campo data
Al contrario di quello che succede nel primo esempio:
se la data della cella F12 viene modificata il campo data assumerà lo stesso valore della cella, la stessa cosa che faceva prima il pulsante, solo che adesso vorrei farlo senza pulsante.
LibreOffice 7.3.4.2 su MacOS 10.12.6 Sierra
patel
Volontario attivo
Volontario attivo
Messaggi: 4030
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: [Risolto] Inserimento valore cella in un campo data - Macro Calc

Messaggio da patel »

Gli eventi del foglio sono molti, tu hai usato Attiva documento, invece devi usare contenuto modificato che verrà attivato alla modifica della cella.
-------------------
Libre Office 7.5.3.2 su Windows 11
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Arbellini
Messaggi: 79
Iscritto il: mercoledì 29 giugno 2022, 5:44

Re: [Risolto] Inserimento valore cella in un campo data - Macro Calc

Messaggio da Arbellini »

Ho fatto così:

Primo esempio
Campo AlfaH4
Proprietà del controllo - Eventi - Testo modificato - Standard.Module1.AlfaDal (document, Basic)
Questa funziona anche se non abbino evento foglio contenuto modificato, c'è un motivo?

Secondo esempio
Campodata2
Proprietà del controllo - Eventi - Testo modificato -Standard.Module1.CampoData1 (document, Basic)
Per funzionare devo abbinare evento foglio contenuto modificato associato alla macro Standard.Module1.CampoData1,
Attraverso quest'ultima azione funzionano entrambi,

se invece dovessi abbinare evento foglio contenuto modificato associato alla macro Standard.Module1.AlfaDal, Campo AlfaH4 (primo esempio)
non funziona.

Comunque ora funzionano entrambi.
Devo provare ad esercitarmi con i vari eventi foglio e non confondermi con le Proprietà del controllo - Eventi - Testo modificato dei campi

Una cosa è certa,
la confusione :D
LibreOffice 7.3.4.2 su MacOS 10.12.6 Sierra
Gaetanopr
Volontario
Volontario
Messaggi: 3316
Iscritto il: mercoledì 21 novembre 2012, 20:07

Re: [Risolto] Inserimento valore cella in un campo data - Macro Calc

Messaggio da Gaetanopr »

Effettivamente hai un pò di confusione, per prima cosa devi capire cosa scatena l'evento e agire di conseguenza.
Arbellini ha scritto: lunedì 5 settembre 2022, 22:40 Ho fatto così:

Primo esempio
Campo AlfaH4
Proprietà del controllo - Eventi - Testo modificato - Standard.Module1.AlfaDal (document, Basic)
Questa funziona anche se non abbino evento foglio contenuto modificato, c'è un motivo?
Questo funziona perché l’ evento foglio contenuto modificato non ti serve in quanto è l’evento Testo modificato del controllo ad azionare la macro e scrivere la data dentro la cella, infatti cambiare la data tramite il controllo data non scatena nessun evento sul foglio ma solo sul controllo.
Arbellini ha scritto: lunedì 5 settembre 2022, 22:40 Secondo esempio
Campodata2
Proprietà del controllo - Eventi - Testo modificato -Standard.Module1.CampoData1 (document, Basic)
Per funzionare devo abbinare evento foglio contenuto modificato associato alla macro Standard.Module1.CampoData1,
Attraverso quest'ultima azione funzionano entrambi,
Se la tua intenzione è scrivere sulla cella e riportare nel campo data non occorre fare la prima associazione cioè la macro al controllo, in quanto è la variazione avvenuta sulla cella(evento foglio) che genera l'evento.
Arbellini ha scritto: lunedì 5 settembre 2022, 22:40 se invece dovessi abbinare evento foglio contenuto modificato associato alla macro Standard.Module1.AlfaDal, Campo AlfaH4 (primo esempio)
non funziona.
Come detto prima l’evento scatenante è la modifica del campo data e non del foglio, quindi è inutile associare la macro AlfaDal all’ evento foglio contenuto modificato

Saluti
LibreOffice 7.2.2.2 windows 10
Openoffice 4.1.13 su windows 10
Arbellini
Messaggi: 79
Iscritto il: mercoledì 29 giugno 2022, 5:44

Re: [Risolto] Inserimento valore cella in un campo data - Macro Calc

Messaggio da Arbellini »

Grazie per il chiarimento.
quindi:
se è la variazione che avviene sulla cella (evento foglio) a generare l'evento
e volessi aggiungere sullo stesso foglio
un'altra cella che scriva in un secondo campo data
dovrei associare un'unica macro con condizioni, in riferimento alle celle che variano. :!: :?:
LibreOffice 7.3.4.2 su MacOS 10.12.6 Sierra
Gaetanopr
Volontario
Volontario
Messaggi: 3316
Iscritto il: mercoledì 21 novembre 2012, 20:07

Re: [Risolto] Inserimento valore cella in un campo data - Macro Calc

Messaggio da Gaetanopr »

Esatto, se sono solo due puoi usare un semplice If Then
if varia cella1 scrivi su campo1
if varia cella2 scrivi su campo2
altrimenti puoi chiamare i campi data con il nome della cella, puoi creare un array di dati contenenti le celle che possono variare, diciamo che non esiste un solo modo per fare le cose, bisogna cercare il più efficiente di caso in caso.
LibreOffice 7.2.2.2 windows 10
Openoffice 4.1.13 su windows 10
Gaetanopr
Volontario
Volontario
Messaggi: 3316
Iscritto il: mercoledì 21 novembre 2012, 20:07

Re: [Risolto] Inserimento valore cella in un campo data - Macro Calc

Messaggio da Gaetanopr »

Arbellini ha scritto: sabato 3 settembre 2022, 18:52 La soluzione "nel mio caso non idonea" si riferisce ad una risposta di Gaetanopr al seguente link viewtopic.php?f=9&t=2408
La soluzione che avevo proposto in questo post funziona solo per openoffice, così come la tua macro funziona solo su libreoffice, come anche fatto notare da cwolan
cwolan ha scritto: sabato 3 settembre 2022, 22:45 Vedi Date Struct
et prova il file allegato.
con libreoffice i campi data hanno subito una importante variazione sono diventati date struct con conseguente errori su macro create per openoffice( me ne sono accorto a mie spese quando ho iniziato ad usare libreoffice su vecchi file) per funzionare su entrambe le suite basta verificare di che tipo di campo si tratta quindi verificare se si ci trovi su openoffice oppure libreoffice e agire di conseguenza
Allegati
Campo_Data_OPENOFFICE_LIBREOFFICE.ods
(13.84 KiB) Scaricato 64 volte
LibreOffice 7.2.2.2 windows 10
Openoffice 4.1.13 su windows 10
Arbellini
Messaggi: 79
Iscritto il: mercoledì 29 giugno 2022, 5:44

Re: [Risolto] Inserimento valore cella in un campo data - Macro Calc

Messaggio da Arbellini »

Gaetanopr ha scritto: martedì 6 settembre 2022, 17:16 Esatto, se sono solo due puoi usare un semplice If Then
if varia cella1 scrivi su campo1
if varia cella2 scrivi su campo2
altrimenti puoi chiamare i campi data con il nome della cella, puoi creare un array di dati contenenti le celle che possono variare, diciamo che non esiste un solo modo per fare le cose, bisogna cercare il più efficiente di caso in caso.
:shock: Per il momento provo con un "semplice" if :D
LibreOffice 7.3.4.2 su MacOS 10.12.6 Sierra
Arbellini
Messaggi: 79
Iscritto il: mercoledì 29 giugno 2022, 5:44

Re: [Risolto] Inserimento valore cella in un campo data - Macro Calc

Messaggio da Arbellini »

Sto provando a cercare soluzioni su soluzioni cercando nei vari post precedenti, ma non riesco neanche con If Then :crazy:
ed è if then, figuriamoci con altro :)
Un macro che ricorre frequente, forse quella corretta, da adattare (cosa non facile per me) sarebbe questa:

Codice: Seleziona tutto

Sub evento(Target) 
    If NOT Target.supportsService("com.sun.star.sheet.SheetCell") then exit sub
    Sh = Target.getSpreadsheet()
    addr = Target.getCellAddress()
    rng = sh.getCellRangeByName("F13")
    range2 = rng.queryintersection(Target.rangeaddress()) 
   If range2.RangeAddressesAsString = "" Then 
       Exit Sub
   Else  
       print "cella F13 modificata in " & rng.value
   End if
End Sub
Altrimenti come faccio a capire se la cella viene modificata, se nessuno me lo dice :D
LibreOffice 7.3.4.2 su MacOS 10.12.6 Sierra
Gaetanopr
Volontario
Volontario
Messaggi: 3316
Iscritto il: mercoledì 21 novembre 2012, 20:07

Re: [Risolto] Inserimento valore cella in un campo data - Macro Calc

Messaggio da Gaetanopr »

Arbellini ha scritto: martedì 6 settembre 2022, 22:09 Altrimenti come faccio a capire se la cella viene modificata, se nessuno me lo dice :D
Non ti sei impegnato tanto, ti sei limitato a copiare una macro presa dal forum e a incollarla qui.

Codice: Seleziona tutto

Sub evento(Target) 
    If NOT Target.supportsService("com.sun.star.sheet.SheetCell") then exit sub
    Sh = Target.getSpreadsheet()
    DrawPage = Sh.DrawPage
    Form = DrawPage.Forms.GetByIndex(0) 
  
    
    rng1 = sh.getCellRangeByName("F12")
    range1 = rng1.queryintersection(Target.rangeaddress()) 
   
    rng2 = sh.getCellRangeByName("F15")
    range2 = rng2.queryintersection(Target.rangeaddress()) 
 
   If range1.RangeAddressesAsString <> "" Then
      Ctl = Form.getByName("Campodata2") 
   ElseIf range2.RangeAddressesAsString <> "" Then
      Ctl = Form.getByName("Campodata3")
   Else
      Exit Sub
   End If        
     
      If IsUnoStruct(Ctl.DateMin()) then
         msgbox("sei su libreoffice")
         strDate = CDateToIso(Target.value)
         oDate = createUnoStruct("com.sun.star.util.Date")
         oDate.Year = CInt(Left(strDate,4))
         oDate.Month = CInt(Mid(strDate,5,2))
         oDate.Day = CInt(Right(strDate,2))
         Ctl.date = oDate
      Else
         msgbox("sei su openoffice")
         Ctl.date =  CDateToIso(Target.value)     'Conversione rappresentazione di data ISO 8601.
      End if 
   
   
End Sub
Allegati
Campo_Data_OPENOFFICE_LIBREOFFICE (1).ods
(14.55 KiB) Scaricato 76 volte
LibreOffice 7.2.2.2 windows 10
Openoffice 4.1.13 su windows 10
Arbellini
Messaggi: 79
Iscritto il: mercoledì 29 giugno 2022, 5:44

Re: [Risolto] Inserimento valore cella in un campo data - Macro Calc

Messaggio da Arbellini »

Gaetanopr ha scritto: mercoledì 7 settembre 2022, 9:30 Non ti sei impegnato tanto, ti sei limitato a copiare una macro presa dal forum e a incollarla qui.
Purtroppo non sapevo come adattarla :ouch:
Di teoria sono a -1, neanche a zero :knock:
Grazie
Ultima modifica di Arbellini il mercoledì 7 settembre 2022, 10:00, modificato 1 volta in totale.
LibreOffice 7.3.4.2 su MacOS 10.12.6 Sierra
Arbellini
Messaggi: 79
Iscritto il: mercoledì 29 giugno 2022, 5:44

Re: [Risolto] Inserimento valore cella in un campo data - Macro Calc

Messaggio da Arbellini »

Ero arrivato a scriverne (copiarne) una come questa:

Codice: Seleziona tutto

Sub evento(Target) 
    If NOT Target.supportsService("com.sun.star.sheet.SheetCell") then exit sub
    Sh = Target.getSpreadsheet()
    DrawPage = Sh.DrawPage
    Form = DrawPage.Forms.GetByIndex(0) 
  
    
    rng1 = sh.getCellRangeByName("F12")
    range1 = rng1.queryintersection(Target.rangeaddress()) 
   
    rng2 = sh.getCellRangeByName("F15")
    range2 = rng2.queryintersection(Target.rangeaddress()) 
Anche se potrà sembrare strano non ero in grado di scrivere questa:

Codice: Seleziona tutto

 If range1.RangeAddressesAsString <> "" Then
      Ctl = Form.getByName("Campodata2") 
   ElseIf range2.RangeAddressesAsString <> "" Then
      Ctl = Form.getByName("Campodata3")
   Else
      Exit Sub
   End If        
LibreOffice 7.3.4.2 su MacOS 10.12.6 Sierra
Gaetanopr
Volontario
Volontario
Messaggi: 3316
Iscritto il: mercoledì 21 novembre 2012, 20:07

Re: [Risolto] Inserimento valore cella in un campo data - Macro Calc

Messaggio da Gaetanopr »

Non è strano, sei agli inizi devi fare molta pratica e soprattutto scrivere codice provare e riprovare, la prossima volta allega quanto da te fatto anche se incompleto e non funzionante.
Credo che con questo post abbiamo chiuso, per altre cose apri nuovi post.

Saluti
LibreOffice 7.2.2.2 windows 10
Openoffice 4.1.13 su windows 10
Rispondi