Pagina 1 di 1

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

Inviato: sabato 3 settembre 2022, 18:52
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"

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

Inviato: sabato 3 settembre 2022, 20:28
da Arbellini
Ho modificato il titolo perché non era corretto
Scusate

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

Inviato: sabato 3 settembre 2022, 22:45
da cwolan
Arbellini ha scritto:L'errore si presenta nel secondo esempio:
Vedi Date Struct
et prova il file allegato.

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

Inviato: domenica 4 settembre 2022, 0:47
da Arbellini
Grazie

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

Inviato: domenica 4 settembre 2022, 1:06
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.

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

Inviato: domenica 4 settembre 2022, 11:30
da patel
Allego esempio con i 3 casi funzionanti, uno dei problemi era l'uso di celle unite.

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

Inviato: domenica 4 settembre 2022, 23:03
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

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

Inviato: lunedì 5 settembre 2022, 9:16
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.

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

Inviato: lunedì 5 settembre 2022, 12:00
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.

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

Inviato: lunedì 5 settembre 2022, 17:19
da patel
Ma non hai spiegato cosa intendi per evento foglio, ti avevo chiesto cosa vuoi ottenere, dillo con parole tue.

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

Inviato: lunedì 5 settembre 2022, 18:25
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.

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

Inviato: lunedì 5 settembre 2022, 21:04
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.

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

Inviato: lunedì 5 settembre 2022, 22:40
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

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

Inviato: martedì 6 settembre 2022, 12:27
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

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

Inviato: martedì 6 settembre 2022, 17:04
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. :!: :?:

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

Inviato: martedì 6 settembre 2022, 17:16
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.

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

Inviato: martedì 6 settembre 2022, 18:27
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

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

Inviato: martedì 6 settembre 2022, 18:29
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

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

Inviato: martedì 6 settembre 2022, 22:09
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

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

Inviato: mercoledì 7 settembre 2022, 9:30
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

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

Inviato: mercoledì 7 settembre 2022, 9:52
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

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

Inviato: mercoledì 7 settembre 2022, 11:26
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        

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

Inviato: mercoledì 7 settembre 2022, 11:54
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