finestre di dialogo su calc
- ocramy
- Entusiasta Emergente
- Messaggi: 1307
- Iscrizione: venerdì 7 agosto 2009, 2:18
- Desktop: gnome 3
- Distribuzione: ubuntu 22.10
- Sesso: Maschile
- Località: Lucca
Re: finestre di dialogo su calc
Ho provato ad esaminare il codice ma non ho capito molto....
quello che chiedevo per capire poi come fare (perché anche a me piacerebbe molto giocare con le macro di LO) come si deve procedere per caricare nelle caselle combinate i dati inseriti nei fogli...
quali sono le funzioni, perché sono meglio alcune al posto di altre...
ho provato a inserirle a mano ma poi se alla fonte vengono modificati i dati non c'è l'automazione dell’aggiornamento..
un'altra cosa, come si procede per richiamare la finestra di dialogo con un click o doppio click..
dove si evince dal codice?
Da parte mia c'è tutto l'interesse di imparare e collaborare
quello che chiedevo per capire poi come fare (perché anche a me piacerebbe molto giocare con le macro di LO) come si deve procedere per caricare nelle caselle combinate i dati inseriti nei fogli...
quali sono le funzioni, perché sono meglio alcune al posto di altre...
ho provato a inserirle a mano ma poi se alla fonte vengono modificati i dati non c'è l'automazione dell’aggiornamento..
un'altra cosa, come si procede per richiamare la finestra di dialogo con un click o doppio click..
dove si evince dal codice?
Da parte mia c'è tutto l'interesse di imparare e collaborare
- Rafbor
- Prode Principiante
- Messaggi: 143
- Iscrizione: domenica 13 febbraio 2022, 18:22
- Desktop: Xubuntu
- Distribuzione: 22.04.3 LTS
- Località: Francia
Re: finestre di dialogo su calc
Per fare quello che chiedi, si deve fare riferimento alla documentazione. Ti avevo linkato una guida in francese che spiega come creare una finestra di dialogo. L'ho seguito per iniziare.
Per la programmazione ho trovato guide qui.
Per richiamare la finestra di dialogo con un click o doppio click, fare clic con il tasto destro del mouse sul nome del foglio "ANNUALE", nel menu c'è (in francese) "Evénements de la feuille" dovrebbe essere "Eventi sul foglio" in italiano. Vedrai che sul doppio-clic è assegnato l'azione "Standard.Module1.PrenotazioneDialog" che corrisponde alla macro principale che ho creato.
Se si desidera azzerare i dati, è necessario cancellare il contenuto delle celle del foglio "ANNUALE" e cancellare le righe (eccetto la prima) del foglio "AFFITTI" e impostare il contatore in K1 su 0.
Per la programmazione ho trovato guide qui.
Per richiamare la finestra di dialogo con un click o doppio click, fare clic con il tasto destro del mouse sul nome del foglio "ANNUALE", nel menu c'è (in francese) "Evénements de la feuille" dovrebbe essere "Eventi sul foglio" in italiano. Vedrai che sul doppio-clic è assegnato l'azione "Standard.Module1.PrenotazioneDialog" che corrisponde alla macro principale che ho creato.
Se si desidera azzerare i dati, è necessario cancellare il contenuto delle celle del foglio "ANNUALE" e cancellare le righe (eccetto la prima) del foglio "AFFITTI" e impostare il contatore in K1 su 0.
- Rafbor
- Prode Principiante
- Messaggi: 143
- Iscrizione: domenica 13 febbraio 2022, 18:22
- Desktop: Xubuntu
- Distribuzione: 22.04.3 LTS
- Località: Francia
Re: finestre di dialogo su calc
Ecco il file con tutti i dati modificabili. Quando si apre la finestra di dialogo su una cella già compilata, è possibile modificare tutto e verrà salvata con "SALVA".
Hai cambiato le dimensioni dei campi di input, li ho lasciati così.
Attenzione, come già spiegato, la cella non si sposterà se cambi auto o data, dovrai spostarla con un copia e incolla nella tabella dei mesi, poi cancellare la vecchia posizione con il tasto CANC.
Ci vorrà una funzione che esegua il trasferimento tra due prenotazioni. La macro per cancellare ancora non l'ho fatta, non so quando potrò farla.
Hai cambiato le dimensioni dei campi di input, li ho lasciati così.
Attenzione, come già spiegato, la cella non si sposterà se cambi auto o data, dovrai spostarla con un copia e incolla nella tabella dei mesi, poi cancellare la vecchia posizione con il tasto CANC.
Ci vorrà una funzione che esegua il trasferimento tra due prenotazioni. La macro per cancellare ancora non l'ho fatta, non so quando potrò farla.
- ocramy
- Entusiasta Emergente
- Messaggi: 1307
- Iscrizione: venerdì 7 agosto 2009, 2:18
- Desktop: gnome 3
- Distribuzione: ubuntu 22.10
- Sesso: Maschile
- Località: Lucca
Re: finestre di dialogo su calc
Quando mi sono riferito alla possibilità di scegliere le date e le auto non corrispondenti alla cella cliccata, facevo riferimento a cosa scegliere non al cambiamento di una prenotazione eseguita da modificare.
Nelle caselle combinate delle auto e degli operatori non sono stai caricati i dati dei fogli corrispondenti,
per ottenere il risultato come devo procedere?
Nelle caselle combinate delle auto e degli operatori non sono stai caricati i dati dei fogli corrispondenti,
per ottenere il risultato come devo procedere?
- Rafbor
- Prode Principiante
- Messaggi: 143
- Iscrizione: domenica 13 febbraio 2022, 18:22
- Desktop: Xubuntu
- Distribuzione: 22.04.3 LTS
- Località: Francia
Re: finestre di dialogo su calc
Onestamente non lo so, bisogna cercare nella documentazione come riempire una casella combinata dal codice. Nel frattempo si può fare come hai fatto per le date, nelle proprietà si copia l'elenco degli auto e degli operatori.
- ocramy
- Entusiasta Emergente
- Messaggi: 1307
- Iscrizione: venerdì 7 agosto 2009, 2:18
- Desktop: gnome 3
- Distribuzione: ubuntu 22.10
- Sesso: Maschile
- Località: Lucca
Re: finestre di dialogo su calc
Consultiamo la documentazione
- ocramy
- Entusiasta Emergente
- Messaggi: 1307
- Iscrizione: venerdì 7 agosto 2009, 2:18
- Desktop: gnome 3
- Distribuzione: ubuntu 22.10
- Sesso: Maschile
- Località: Lucca
Re: finestre di dialogo su calc
Facciamo il punto della situazione
le funzioni da utilizzare per costruire il progetto riguardavano la gestione dei dati attraverso una finsetra di dialogo.
Premesso che il sottoscritto fino a circa un mese fa non era in grado di eseguire la funzione somma su calc e che presa la decisione di volere dare forma a qualcosa di funzionale si è inabissato suo malgrado in un universo più grande di lui...
In poco tempo e senza particolari sforzi sono state realizzati calendari che in automatico aggiornano le date, le domeniche, le festività, anni bisestili ecc. fino a giungere all'utilizzo delle macro e quindi del codice necessario per farle funzionare.
Il materiale documentario per comprendere l'argomento è poco reperibile e quello preesente non è molto chiaro per un principiante come me...
Ecco la richiesta di un aiuto che non sosituisce il mio impegno e il mio lavoro (perché sono fortemente interessato a comprendere l'argomento; non me lo sarei creduto ma riconosco che è troppo interessante!!!)
Riassumendo:
richiamare la finestra di dialogo cliccando sulla tabella mensile.
Grazie al contributo di Rafbor ora è possibile eseguire il comando.
Quale codice è stato usato per ottenere il risultato?
Vediamo se ho capito
' visualizza la finestra di dialogo
sub PrenotazioneDialog
dim oSheet as Object
dim nRow, nCol as long
dim sKeyAffito as string
'
DialogLibraries.LoadLibrary("Standard")
oPrenotazioneDialog = DialogLibraries.Standard.PRENOTAZIONE
oDialog = CreateUnoDialog(oPrenotazioneDialog)
'
oTxtNumPrenot = oDialog.getControl("txtNumPrenotazione")
oCbAutoVettura = oDialog.getControl("cbAutovettura")
oTxtConducente1 = oDialog.getControl("txtConducente1")
oTxtConducente2 = oDialog.getControl("txtConducente2")
oBtnSalva = oDialog.getControl("btnSalva")
oBtnCancella = oDialog.getControl("btnCancella")
oBtnStampa = oDialog.getControl("btnStampa")
oCbDataInizio = oDialog.getControl("cbDataInizio")
oCbDataFine = oDialog.getControl("cbDataFine")
oTxtDestinazione = oDialog.getControl("txtDestinazione")
oCbOperatore = oDialog.getControl("cbOperatore")
'
oActiveSheet = ThisComponent.CurrentController.ActiveSheet
' se una cella selezionata
if ThisComponent.currentSelection.supportsService("com.sun.star.sheet.SheetCell") Then
oActiveCell = ThisComponent.CurrentSelection
nRow = oActiveCell.CellAddress.Row
nCol = oActiveCell.CellAddress.Column
' se la cella è vuota, nuovo affito
if oActiveCell.string = "" then
bNuovo = true
' una nuova chiave viene generata per il record
oTxtNumPrenot.Text = "P" & GetNewKey
' autovettura
oCbAutoVettura.Text = oActiveSheet.GetCellByPosition(0, nRow).string
' si recupera la data di inizio in base alla posizione della cella
oCbDataInizio.Text = oActiveSheet.GetCellByPosition(nCol, 5).string
' la data di fine viene uguale di default
oCbDataFine.Text = oActiveSheet.GetCellByPosition(nCol, 5).string
else
bNuovo = false
' recupero della chiave del record
sKeyAffito = oActiveCell.string
oTxtNumPrenot.Text = sKeyAffito
' recupero dei dati del record
GetRecordData(sKeyAffito)
' /!\: togliere il commento delle righe seguenti per rendere i controlli non modificabili
'oCbAutoVettura.Enable = false
'oCbDataInizio.Enable = false
'oCbDataFine.Enable = false
'oTxtConducente1.Enable = false
'oTxtConducente2.Enable = false
'oCbOperatore.Enable = false
'oTxtDestinazione.Enable = false
'oBtnSalva.Enable = false
end if
end if
'
oDialog.Execute()
end sub
Ora questa funzione dovrebbe essere perfezionata per quanto riguarda le celle che richiamano la finestra di dialogo perché sul folgio annuale ogni cella cliccata due volte esegue il comando, anche quelle fuori dalle colonne del mese.
Domanda:
come si deve intervenire per ottenere quanto richiesto?
le funzioni da utilizzare per costruire il progetto riguardavano la gestione dei dati attraverso una finsetra di dialogo.
Premesso che il sottoscritto fino a circa un mese fa non era in grado di eseguire la funzione somma su calc e che presa la decisione di volere dare forma a qualcosa di funzionale si è inabissato suo malgrado in un universo più grande di lui...
In poco tempo e senza particolari sforzi sono state realizzati calendari che in automatico aggiornano le date, le domeniche, le festività, anni bisestili ecc. fino a giungere all'utilizzo delle macro e quindi del codice necessario per farle funzionare.
Il materiale documentario per comprendere l'argomento è poco reperibile e quello preesente non è molto chiaro per un principiante come me...
Ecco la richiesta di un aiuto che non sosituisce il mio impegno e il mio lavoro (perché sono fortemente interessato a comprendere l'argomento; non me lo sarei creduto ma riconosco che è troppo interessante!!!)
Riassumendo:
richiamare la finestra di dialogo cliccando sulla tabella mensile.
Grazie al contributo di Rafbor ora è possibile eseguire il comando.
Quale codice è stato usato per ottenere il risultato?
Vediamo se ho capito
' visualizza la finestra di dialogo
sub PrenotazioneDialog
dim oSheet as Object
dim nRow, nCol as long
dim sKeyAffito as string
'
DialogLibraries.LoadLibrary("Standard")
oPrenotazioneDialog = DialogLibraries.Standard.PRENOTAZIONE
oDialog = CreateUnoDialog(oPrenotazioneDialog)
'
oTxtNumPrenot = oDialog.getControl("txtNumPrenotazione")
oCbAutoVettura = oDialog.getControl("cbAutovettura")
oTxtConducente1 = oDialog.getControl("txtConducente1")
oTxtConducente2 = oDialog.getControl("txtConducente2")
oBtnSalva = oDialog.getControl("btnSalva")
oBtnCancella = oDialog.getControl("btnCancella")
oBtnStampa = oDialog.getControl("btnStampa")
oCbDataInizio = oDialog.getControl("cbDataInizio")
oCbDataFine = oDialog.getControl("cbDataFine")
oTxtDestinazione = oDialog.getControl("txtDestinazione")
oCbOperatore = oDialog.getControl("cbOperatore")
'
oActiveSheet = ThisComponent.CurrentController.ActiveSheet
' se una cella selezionata
if ThisComponent.currentSelection.supportsService("com.sun.star.sheet.SheetCell") Then
oActiveCell = ThisComponent.CurrentSelection
nRow = oActiveCell.CellAddress.Row
nCol = oActiveCell.CellAddress.Column
' se la cella è vuota, nuovo affito
if oActiveCell.string = "" then
bNuovo = true
' una nuova chiave viene generata per il record
oTxtNumPrenot.Text = "P" & GetNewKey
' autovettura
oCbAutoVettura.Text = oActiveSheet.GetCellByPosition(0, nRow).string
' si recupera la data di inizio in base alla posizione della cella
oCbDataInizio.Text = oActiveSheet.GetCellByPosition(nCol, 5).string
' la data di fine viene uguale di default
oCbDataFine.Text = oActiveSheet.GetCellByPosition(nCol, 5).string
else
bNuovo = false
' recupero della chiave del record
sKeyAffito = oActiveCell.string
oTxtNumPrenot.Text = sKeyAffito
' recupero dei dati del record
GetRecordData(sKeyAffito)
' /!\: togliere il commento delle righe seguenti per rendere i controlli non modificabili
'oCbAutoVettura.Enable = false
'oCbDataInizio.Enable = false
'oCbDataFine.Enable = false
'oTxtConducente1.Enable = false
'oTxtConducente2.Enable = false
'oCbOperatore.Enable = false
'oTxtDestinazione.Enable = false
'oBtnSalva.Enable = false
end if
end if
'
oDialog.Execute()
end sub
Ora questa funzione dovrebbe essere perfezionata per quanto riguarda le celle che richiamano la finestra di dialogo perché sul folgio annuale ogni cella cliccata due volte esegue il comando, anche quelle fuori dalle colonne del mese.
Domanda:
come si deve intervenire per ottenere quanto richiesto?
- Rafbor
- Prode Principiante
- Messaggi: 143
- Iscrizione: domenica 13 febbraio 2022, 18:22
- Desktop: Xubuntu
- Distribuzione: 22.04.3 LTS
- Località: Francia
Re: finestre di dialogo su calc
La posizione della cella deve essere verificata, le sue coordinate sono qui
devi uscire dalla macro se la riga e la colonna sono al di fuori delle celle del calendario.
PS: questa è programmazione in linguaggio BASIC, se non hai alcuna nozione di programmazione, la vedo dura che tu riesci a finire. Dovresti iniziare a imparare a programmare.
Aggiungerei che programmare in LO Basic è molto complicato all'inizio, l'editor non è molto efficiente, non aiuta molto, e bisogna continuamente fare riferimento alla documentazione o cercare su Internet per scrivere righe di codice, il che richiede molto tempo, ed è pure per questo che non sono motivato a continuare. Questo è ovviamente diverso per chi ha una buona conoscenza dell'argomento.
Mi ci sono voluti quasi 3 giorni per scrivere tutte le macro del file, mentre quando programmo con il mio ambiente abituale (.NET e C#) posso scrivere centinaia di righe senza mai consultare la documentazione.
Codice: Seleziona tutto
nRow = oActiveCell.CellAddress.Row
nCol = oActiveCell.CellAddress.Column
PS: questa è programmazione in linguaggio BASIC, se non hai alcuna nozione di programmazione, la vedo dura che tu riesci a finire. Dovresti iniziare a imparare a programmare.
Aggiungerei che programmare in LO Basic è molto complicato all'inizio, l'editor non è molto efficiente, non aiuta molto, e bisogna continuamente fare riferimento alla documentazione o cercare su Internet per scrivere righe di codice, il che richiede molto tempo, ed è pure per questo che non sono motivato a continuare. Questo è ovviamente diverso per chi ha una buona conoscenza dell'argomento.
Mi ci sono voluti quasi 3 giorni per scrivere tutte le macro del file, mentre quando programmo con il mio ambiente abituale (.NET e C#) posso scrivere centinaia di righe senza mai consultare la documentazione.
- Rafbor
- Prode Principiante
- Messaggi: 143
- Iscrizione: domenica 13 febbraio 2022, 18:22
- Desktop: Xubuntu
- Distribuzione: 22.04.3 LTS
- Località: Francia
Re: finestre di dialogo su calc
Ciao, come promesso, ho predisposto la cancellazione di una prenotazione.
Ho anche realizzato il controllo sulla posizione della cella selezionata, ma attenzione, nessun controllo sulle celle che si trovano tra i diversi mesi.
Spero che questo sia utile. Codice completo delle macro
Ho anche realizzato il controllo sulla posizione della cella selezionata, ma attenzione, nessun controllo sulle celle che si trovano tra i diversi mesi.
Spero che questo sia utile. Codice completo delle macro
Codice: Seleziona tutto
REM ***** BASIC *****
option explicit
' variabili globali
dim oPrenotazioneDialog As Object, oDialog As Object
dim oBtnSalva As Object, oBtnCancella As Object, oBtnStampa As Object
dim oTxtNumPrenot As Object
dim oTxtConducente1 As Object, oTxtConducente2 As Object
dim oTxtDestinazione As Object
dim oCbDataInizio as Object, oCbDataFine as Object
dim oCbAutoVettura as Object
dim oCbOperatore as Object
dim oActiveSheet, oActiveCell as Object
dim bNuovo as Boolean
' visualizza la finestra di dialogo
sub PrenotazioneDialog
dim oSheet as Object
dim nRow, nCol as long
dim sKeyAffito as string
dim nColMax as long
'
DialogLibraries.LoadLibrary("Standard")
oPrenotazioneDialog = DialogLibraries.Standard.PRENOTAZIONE
oDialog = CreateUnoDialog(oPrenotazioneDialog)
'
oTxtNumPrenot = oDialog.getControl("txtNumPrenotazione")
oCbAutoVettura = oDialog.getControl("cbAutovettura")
oTxtConducente1 = oDialog.getControl("txtConducente1")
oTxtConducente2 = oDialog.getControl("txtConducente2")
oBtnSalva = oDialog.getControl("btnSalva")
oBtnCancella = oDialog.getControl("btnCancella")
oBtnStampa = oDialog.getControl("btnStampa")
oCbDataInizio = oDialog.getControl("cbDataInizio")
oCbDataFine = oDialog.getControl("cbDataFine")
oTxtDestinazione = oDialog.getControl("txtDestinazione")
oCbOperatore = oDialog.getControl("cbOperatore")
'
oActiveSheet = ThisComponent.CurrentController.ActiveSheet
' se una cella selezionata
if ThisComponent.currentSelection.supportsService("com.sun.star.sheet.SheetCell") Then
oActiveCell = ThisComponent.CurrentSelection
nRow = oActiveCell.CellAddress.Row
nCol = oActiveCell.CellAddress.Column
' se la cella non è al di fuori del calendario
nColMax = oActiveSheet.getCellRangeByName("NZ"& nRow).RangeAddress.StartColumn
if nRow < 9 or nRow > 24 or nCol < 2 or nCol > nColMax then
msgbox "Cella non utilizzabile"
exit sub
end if
' se la cella è vuota, nuovo affito
if oActiveCell.string = "" then
bNuovo = true
' una nuova chiave viene generata per il record
oTxtNumPrenot.Text = "P" & GetNewKey
' autovettura
oCbAutoVettura.Text = oActiveSheet.GetCellByPosition(0, nRow).string
' si recupera la data di inizio in base alla posizione della cella
oCbDataInizio.Text = oActiveSheet.GetCellByPosition(nCol, 5).string
' la data di fine viene uguale di default
oCbDataFine.Text = oActiveSheet.GetCellByPosition(nCol, 5).string
else
bNuovo = false
' recupero della chiave del record
sKeyAffito = oActiveCell.string
oTxtNumPrenot.Text = sKeyAffito
' recupero dei dati del record
GetRecordData(sKeyAffito)
' /!\: togliere il commento delle righe seguenti per rendere i controlli non modificabili
'oCbAutoVettura.Enable = false
'oCbDataInizio.Enable = false
'oCbDataFine.Enable = false
'oTxtConducente1.Enable = false
'oTxtConducente2.Enable = false
'oCbOperatore.Enable = false
'oTxtDestinazione.Enable = false
'oBtnSalva.Enable = false
end if
end if
'
oDialog.Execute()
end sub
' recupero dei dati del record nella scheda "AFFITTI".
sub GetRecordData(sKeyAffito as string)
dim oSheet, oCell as Object
dim sKey as string
dim nRow, nCol as long
Dim vTable As Variant
oSheet = ThisComponent.Sheets.getByName("AFFITTI")
' A2
nRow = 1
nCol = 0
' si leggono le righe da A2 in poi
do
oCell = oSheet.GetCellByPosition(nCol, nRow)
sKey = oCell.string
if sKey = sKeyAffito then
oCbDataInizio.Text = oSheet.GetCellByPosition(nCol + 1, nRow).string
oCbDataFine.Text = oSheet.GetCellByPosition(nCol + 2, nRow).string
oCbAutoVettura.Text = oSheet.GetCellByPosition(nCol + 3, nRow).string
oTxtConducente1.Text = oSheet.GetCellByPosition(nCol + 4, nRow).string
oTxtConducente2.Text = oSheet.GetCellByPosition(nCol + 5, nRow).string
oCbOperatore.Text = oSheet.GetCellByPosition(nCol + 6, nRow).string
oTxtDestinazione.Text = oSheet.GetCellByPosition(nCol + 7, nRow).string
exit do
else
if sKey = "" then
msgbox "Il record " & sKeyAffito & " non è stato trovato"
exit do
end if
nRow = nRow + 1
end if
loop
end sub
' registrazione dell'affitto
sub OnBtnSalvaClicked
dim oSheet, oCell as Object
dim sKey as string
dim nRow, nCol as long
Dim vTable As Variant
dim n, nGiorni as integer
' scrivere la chiave del record nella cella attiva
oActiveCell.string = oTxtNumPrenot.Text
' fino alla data di fine
nGiorni = DateDiff("d", oCbDataInizio.Text, oCbDataFine.Text)
for n = 0 to nGiorni
oCell = oActiveSheet.GetCellByPosition(oActiveCell.CellAddress.Column + n, oActiveCell.CellAddress.Row)
oCell.string = oTxtNumPrenot.Text
next n
'
' scrivere o aggiornare il record nella scheda "AFFITTI".
oSheet = ThisComponent.Sheets.getByName("AFFITTI")
' A2
nRow = 1
nCol = 0
' si leggono le righe da A2 in poi
do
oCell = oSheet.GetCellByPosition(nCol, nRow)
sKey = oCell.string
' se nuovo affito
if bNuovo = true then
if sKey = "" then
ScrivereRecord(oSheet, nRow, nCol)
exit do
else
nRow = nRow + 1
end if
' affito esistente
else
if sKey = oTxtNumPrenot.Text then
ScrivereRecord(oSheet, nRow, nCol)
exit do
else
nRow = nRow + 1
end if
end if
loop
msgbox "Le informazioni sono state registrate"
oDialog.endExecute
end sub
sub ScrivereRecord(oSheet as Object, nRow as long, nCol as long)
oSheet.GetCellByPosition(nCol, nRow).string = oTxtNumPrenot.Text
oSheet.GetCellByPosition(nCol + 1, nRow).string = oCbDataInizio.Text
oSheet.GetCellByPosition(nCol + 2, nRow).string = oCbDataFine.Text
oSheet.GetCellByPosition(nCol + 3, nRow).string = oCbAutoVettura.Text
oSheet.GetCellByPosition(nCol + 4, nRow).string = oTxtConducente1.Text
oSheet.GetCellByPosition(nCol + 5, nRow).string = oTxtConducente2.Text
oSheet.GetCellByPosition(nCol + 6, nRow).string = oCbOperatore.Text
oSheet.GetCellByPosition(nCol + 7, nRow).string = oTxtDestinazione.Text
end sub
' cancellare la prenotazione
sub OnBtnCancellaClicked
dim oSheet, oCell as Object
dim sKey as string
dim nRow, nCol as long
Dim vTable As Variant
dim n, nGiorni, nDelta as integer
dim sKeyAffito as string
dim sDateInizio as string
if msgbox("Sicuro di volere cancellare questa prenotazione ?", MB_YESNO, "Conferma la cancellazione") = 7 then
oDialog.endExecute
exit sub
end if
'
nRow = oActiveCell.CellAddress.Row
nCol = oActiveCell.CellAddress.Column
nGiorni = DateDiff("d", oCbDataInizio.Text, oCbDataFine.Text)
sKeyAffito = oTxtNumPrenot.Text
' si recupera la data di inizio in base alla posizione della cella
sDateInizio = oActiveSheet.GetCellByPosition(nCol, 5).string
' diff tra data inizio e data della cella selezionata
nDelta = DateDiff("d", sDateInizio, oCbDataInizio.Text)
' cancellare la chiave del record nella cella attiva
oActiveCell.string = ""
' e nelle celle della prenotazione
if nGiorni >= 1 then
for n = nDelta to nGiorni
oCell = oActiveSheet.GetCellByPosition(oActiveCell.CellAddress.Column + n, oActiveCell.CellAddress.Row)
if oCell.string = sKeyAffito then
oCell.string = ""
end if
next n
end if
oSheet = ThisComponent.Sheets.getByName("AFFITTI")
' A2
nRow = 1
nCol = 0
' si leggono le righe da A2 in poi
do
oCell = oSheet.GetCellByPosition(nCol, nRow)
sKey = oCell.string
' cancellazione
if sKey = sKeyAffito then
oCell.string = "CAN"
oSheet.GetCellByPosition(nCol + 1, nRow).string = ""
oSheet.GetCellByPosition(nCol + 2, nRow).string = ""
oSheet.GetCellByPosition(nCol + 3, nRow).string = ""
oSheet.GetCellByPosition(nCol + 4, nRow).string = ""
oSheet.GetCellByPosition(nCol + 5, nRow).string = ""
oSheet.GetCellByPosition(nCol + 6, nRow).string = ""
oSheet.GetCellByPosition(nCol + 7, nRow).string = ""
exit do
else
if sKey = "" then
msgbox "Il record " & sKeyAffito & " non è stato trovato"
exit do
end if
nRow = nRow + 1
end if
loop
msgbox "La prenotazione è stata cancellata"
oDialog.endExecute
end sub
sub OnBtnStampaClicked
msgbox "Stampa"
' TODO
end sub
' genera una nuova chiave per il record
' si trova nella scheda "AFFITTI" in K1
function GetNewKey as integer
dim nKey as integer
dim oSheet, oCell as Object
oSheet = ThisComponent.Sheets.getByName("AFFITTI")
oCell = oSheet.getCellRangeByName("K1")
GetNewKey = oCell.value
' il valore viene incrementato e memorizzato
GetNewKey = GetNewKey + 1
oCell.value = GetNewKey
end function
- ocramy
- Entusiasta Emergente
- Messaggi: 1307
- Iscrizione: venerdì 7 agosto 2009, 2:18
- Desktop: gnome 3
- Distribuzione: ubuntu 22.10
- Sesso: Maschile
- Località: Lucca
Re: finestre di dialogo su calc
Ottimo lavoro
Altro fondamentale tassello!
Da parte mia sto cercando di apprendere alcuni rudimenti del codice per cercare di apportare le applicazioni utili per raggiungere l'obbiettivo prefissato...
che faticaccia!!!!!!
Altro fondamentale tassello!
Da parte mia sto cercando di apprendere alcuni rudimenti del codice per cercare di apportare le applicazioni utili per raggiungere l'obbiettivo prefissato...
che faticaccia!!!!!!
Ultima modifica di ocramy il venerdì 3 febbraio 2023, 12:08, modificato 1 volta in totale.
- ocramy
- Entusiasta Emergente
- Messaggi: 1307
- Iscrizione: venerdì 7 agosto 2009, 2:18
- Desktop: gnome 3
- Distribuzione: ubuntu 22.10
- Sesso: Maschile
- Località: Lucca
Re: finestre di dialogo su calc
Non riesco a trovare documentazione ...
- Rafbor
- Prode Principiante
- Messaggi: 143
- Iscrizione: domenica 13 febbraio 2022, 18:22
- Desktop: Xubuntu
- Distribuzione: 22.04.3 LTS
- Località: Francia
Re: finestre di dialogo su calc
Anche se non sono identici, qui si possono imparare i principi di base del linguaggio: https://www.html.it/guide/guida-visual-basic/
Il sito web ufficiale per LibreOffice Basic: https://help.libreoffice.org/latest/it/ ... n0601.html
Il sito web ufficiale per LibreOffice Basic: https://help.libreoffice.org/latest/it/ ... n0601.html
- ocramy
- Entusiasta Emergente
- Messaggi: 1307
- Iscrizione: venerdì 7 agosto 2009, 2:18
- Desktop: gnome 3
- Distribuzione: ubuntu 22.10
- Sesso: Maschile
- Località: Lucca
Re: finestre di dialogo su calc
Buongionro,
da questa parte di codice si può determinare che la finestra di dialogo sia richiamata soltanto cliccando nelle celle della tabella dei mesi e non negli spazi adiacenti..
' se una cella selezionata
if ThisComponent.currentSelection.supportsService("com.sun.star.sheet.SheetCell") Then
oActiveCell = ThisComponent.CurrentSelection
nRow = oActiveCell.CellAddress.Row
nCol = oActiveCell.CellAddress.Column
' se la cella non è al di fuori del calendario
nColMax = oActiveSheet.getCellRangeByName("NZ"& nRow).RangeAddress.StartColumn
if nRow < 9 or nRow > 24 or nCol < 2 or nCol > nColMax then
msgbox "Cella non utilizzabile"
exit sub
end if
su questa riga è possibile intervenire?
if nRow < 9 or nRow > 24 or nCol < 2 or nCol > nColMax then
sono delle coordinate?
9 dovrebbe esssere la riga di inizio della tabella dei mesi..
24 ... però non è l'ultima riga, la tabella inffetti terminerebbe con la riga 25...
da questa parte di codice si può determinare che la finestra di dialogo sia richiamata soltanto cliccando nelle celle della tabella dei mesi e non negli spazi adiacenti..
' se una cella selezionata
if ThisComponent.currentSelection.supportsService("com.sun.star.sheet.SheetCell") Then
oActiveCell = ThisComponent.CurrentSelection
nRow = oActiveCell.CellAddress.Row
nCol = oActiveCell.CellAddress.Column
' se la cella non è al di fuori del calendario
nColMax = oActiveSheet.getCellRangeByName("NZ"& nRow).RangeAddress.StartColumn
if nRow < 9 or nRow > 24 or nCol < 2 or nCol > nColMax then
msgbox "Cella non utilizzabile"
exit sub
end if
su questa riga è possibile intervenire?
if nRow < 9 or nRow > 24 or nCol < 2 or nCol > nColMax then
sono delle coordinate?
9 dovrebbe esssere la riga di inizio della tabella dei mesi..
24 ... però non è l'ultima riga, la tabella inffetti terminerebbe con la riga 25...
- Rafbor
- Prode Principiante
- Messaggi: 143
- Iscrizione: domenica 13 febbraio 2022, 18:22
- Desktop: Xubuntu
- Distribuzione: 22.04.3 LTS
- Località: Francia
Re: finestre di dialogo su calc
Certo che puoi modificare, pero' stai attento che questi numeri corrispondano all'indice di riga, che è il numero di riga meno 1.
- ocramy
- Entusiasta Emergente
- Messaggi: 1307
- Iscrizione: venerdì 7 agosto 2009, 2:18
- Desktop: gnome 3
- Distribuzione: ubuntu 22.10
- Sesso: Maschile
- Località: Lucca
Re: finestre di dialogo su calc
Vediamo...
<9
>24
come mai allora se sull'intestazione del mese e sulla scritta sottostante si attiva la finestra di dialogo con il doppio click sulla cella?
<9
>24
come mai allora se sull'intestazione del mese e sulla scritta sottostante si attiva la finestra di dialogo con il doppio click sulla cella?
- Rafbor
- Prode Principiante
- Messaggi: 143
- Iscrizione: domenica 13 febbraio 2022, 18:22
- Desktop: Xubuntu
- Distribuzione: 22.04.3 LTS
- Località: Francia
Re: finestre di dialogo su calc
Hai ragione, non dovrebbe, ma ho appena capito il motivo, sono celle unite e quindi il metodo per trovare le coordinate su queste celle non è appropriato, dovrà essere modificato.
- ocramy
- Entusiasta Emergente
- Messaggi: 1307
- Iscrizione: venerdì 7 agosto 2009, 2:18
- Desktop: gnome 3
- Distribuzione: ubuntu 22.10
- Sesso: Maschile
- Località: Lucca
Re: finestre di dialogo su calc
' se la cella non è al di fuori del calendario
nColMax = oActiveSheet.getCellRangeByName("NZ"& nRow).RangeAddress.StartColumn
if nRow < 9 or nRow > 24 or nCol > nColMax then
msgbox "Cella non utilizzabile"
exit sub
end if
<9....>24
sono le righe (da sistemare le celle unificate....)
or nCol > nColMax then
sono le colonne?
per rendere attive la finestra di dialogo soltanto sulle colonne del mese di gennaio dovrei impostare
nCol < 2 or nCol >33
nColMax = oActiveSheet.getCellRangeByName("NZ"& nRow).RangeAddress.StartColumn
if nRow < 9 or nRow > 24 or nCol > nColMax then
msgbox "Cella non utilizzabile"
exit sub
end if
<9....>24
sono le righe (da sistemare le celle unificate....)
or nCol > nColMax then
sono le colonne?
per rendere attive la finestra di dialogo soltanto sulle colonne del mese di gennaio dovrei impostare
nCol < 2 or nCol >33
- ocramy
- Entusiasta Emergente
- Messaggi: 1307
- Iscrizione: venerdì 7 agosto 2009, 2:18
- Desktop: gnome 3
- Distribuzione: ubuntu 22.10
- Sesso: Maschile
- Località: Lucca
Re: finestre di dialogo su calc
if nRow < 9 or nRow > 24 or nCol < 2 or nCol > 33 or nColMax then
se scrivo così la finestra di dialogo non si attiva mai
if nRow < 9 or nRow > 24 or nCol < 2 or nCol > 33 or
se scrivo così da errore...
if nRow < 9 or nRow > 24 or nCol < 2 or nCol > 33 or then
idem...
se scrivo così la finestra di dialogo non si attiva mai
if nRow < 9 or nRow > 24 or nCol < 2 or nCol > 33 or
se scrivo così da errore...
if nRow < 9 or nRow > 24 or nCol < 2 or nCol > 33 or then
idem...
- ocramy
- Entusiasta Emergente
- Messaggi: 1307
- Iscrizione: venerdì 7 agosto 2009, 2:18
- Desktop: gnome 3
- Distribuzione: ubuntu 22.10
- Sesso: Maschile
- Località: Lucca
Re: finestre di dialogo su calc
nuovo aggiornamneto
ma il codice non funziona con le prove che ho apportato, quindi è rimasto uguale
ma il codice non funziona con le prove che ho apportato, quindi è rimasto uguale
- Allegati
-
- prova_11.ods
- (46.68 KiB) Scaricato 12 volte
Chi c’è in linea
Visualizzano questa sezione: 0 utenti iscritti e 20 ospiti