finestre di dialogo su calc

Installazione, configurazione e uso di programmi e strumenti.
Avatar utente
ocramy
Entusiasta Emergente
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

Messaggio da ocramy »

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
Avatar utente
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

Messaggio da Rafbor »

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.
Avatar utente
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

Messaggio da Rafbor »

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.
prova_9.ods
(59.08 KiB) Scaricato 31 volte
La macro per cancellare ancora non l'ho fatta, non so quando potrò farla.
Avatar utente
ocramy
Entusiasta Emergente
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

Messaggio da ocramy »

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?
Avatar utente
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

Messaggio da Rafbor »

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.
Avatar utente
ocramy
Entusiasta Emergente
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

Messaggio da ocramy »

Consultiamo la documentazione
Avatar utente
ocramy
Entusiasta Emergente
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

Messaggio da ocramy »

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?
Avatar utente
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

Messaggio da Rafbor »

La posizione della cella deve essere verificata, le sue coordinate sono qui

Codice: Seleziona tutto

nRow = oActiveCell.CellAddress.Row
nCol = oActiveCell.CellAddress.Column
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.
Avatar utente
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

Messaggio da Rafbor »

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.
prova_10.ods
(59.51 KiB) Scaricato 34 volte
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
Avatar utente
ocramy
Entusiasta Emergente
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

Messaggio da ocramy »

Ottimo lavoro
:woot:

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!!!!!! :D :cry:
Ultima modifica di ocramy il venerdì 3 febbraio 2023, 12:08, modificato 1 volta in totale.
Avatar utente
ocramy
Entusiasta Emergente
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

Messaggio da ocramy »

Non riesco a trovare documentazione ...
Avatar utente
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

Messaggio da Rafbor »

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
Avatar utente
ocramy
Entusiasta Emergente
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

Messaggio da ocramy »

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...
Avatar utente
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

Messaggio da Rafbor »

Certo che puoi modificare, pero' stai attento che questi numeri corrispondano all'indice di riga, che è il numero di riga meno 1.
Avatar utente
ocramy
Entusiasta Emergente
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

Messaggio da ocramy »

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?
Avatar utente
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

Messaggio da Rafbor »

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.
Avatar utente
ocramy
Entusiasta Emergente
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

Messaggio da ocramy »

' 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
Avatar utente
ocramy
Entusiasta Emergente
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

Messaggio da ocramy »

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...
Avatar utente
ocramy
Entusiasta Emergente
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

Messaggio da ocramy »

nuovo aggiornamneto

ma il codice non funziona con le prove che ho apportato, quindi è rimasto uguale
Allegati
prova_11.ods
(46.68 KiB) Scaricato 12 volte
Scrivi risposta

Ritorna a “Applicazioni”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 20 ospiti