Evitare codici doppi
-
- Messaggi: 10
- Iscritto il: domenica 3 novembre 2013, 20:25
Evitare codici doppi
Sto realizzando un foglio di lavoro per la gestione di un magazzino con Calc.
Sul foglio 1 "Carica Listino" ho realizzato una maschera per l'immissione dei dati, il foglio 2 "Calcoli e Relazioni" lo uso per le varie relazioni e controlli, sul foglio 3 "Matrice Listino" tramite una macro (presa da questo forum) attivata con un pulsante (Salva codice listino) vengono inseriti i dati della maschera nel foglio Matrice Listino.
Nella maschera ogni volta che scrivo il codice prodotto c'è una cella con formattazione condizionata che si evidenzia "Codice Presente" se il codice inserito nella maschera nel campo codice è presente nel foglio Matrice Listino.
Se schiaccio Salva_Codice_Listino anche se presente il codice viene salvato e quindi diventa doppio.
Vorrei aggiungere alla macro Salva_Codice_Listino un controllo che se il codice è presente mandi un messaggio di errore ed esca dalla macro senza copiare.
Sub Salva_Codice_Listino
Doc = ThisComponent
Sheet = Doc.Sheets.getByName("Calcoli e Relazioni")
Sheet1 = Doc.Sheets.getByName("Matrice Listino")
c = Sheet1.createCursor
c.gotoEndOfUsedArea(false)
LastRow = c.RangeAddress.EndRow + 2
Range = Sheet.getCellRangeByName("H10:M10").getRangeAddress() ' range to move
Sheet1.getCellRangeByName("A" & Lastrow & ":F" & Lastrow).setDataArray(Sheet.getCellRangeByName("H10:M10").getDataArray
End Sub
Sul foglio 1 "Carica Listino" ho realizzato una maschera per l'immissione dei dati, il foglio 2 "Calcoli e Relazioni" lo uso per le varie relazioni e controlli, sul foglio 3 "Matrice Listino" tramite una macro (presa da questo forum) attivata con un pulsante (Salva codice listino) vengono inseriti i dati della maschera nel foglio Matrice Listino.
Nella maschera ogni volta che scrivo il codice prodotto c'è una cella con formattazione condizionata che si evidenzia "Codice Presente" se il codice inserito nella maschera nel campo codice è presente nel foglio Matrice Listino.
Se schiaccio Salva_Codice_Listino anche se presente il codice viene salvato e quindi diventa doppio.
Vorrei aggiungere alla macro Salva_Codice_Listino un controllo che se il codice è presente mandi un messaggio di errore ed esca dalla macro senza copiare.
Sub Salva_Codice_Listino
Doc = ThisComponent
Sheet = Doc.Sheets.getByName("Calcoli e Relazioni")
Sheet1 = Doc.Sheets.getByName("Matrice Listino")
c = Sheet1.createCursor
c.gotoEndOfUsedArea(false)
LastRow = c.RangeAddress.EndRow + 2
Range = Sheet.getCellRangeByName("H10:M10").getRangeAddress() ' range to move
Sheet1.getCellRangeByName("A" & Lastrow & ":F" & Lastrow).setDataArray(Sheet.getCellRangeByName("H10:M10").getDataArray
End Sub
Andrea - openoffice 3.4.1 - windows Vista
Re: Evitare codici doppi
Non capisco, la tua macro copia un range da un foglio all'altro e tu parli di un codice, quale ?
la riga Range = Sheet.getCellRangeByName("H10:M10").getRangeAddress() ' range to move è inutile
la riga Range = Sheet.getCellRangeByName("H10:M10").getRangeAddress() ' range to move è inutile
-------------------
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
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
Re: Evitare codici doppi
Ciao baxand, se alleghi il tuo file è meglio, così si possono fare delle prove per capire meglio come aiutarti, ciao.
OpenOffice 3.3 SU WINDOWS 7
-
- Messaggi: 10
- Iscritto il: domenica 3 novembre 2013, 20:25
Re: Evitare codici doppi
Non Allego il file perchè supera 256 KB e non me lo permette se mi dite se posso inviarlo in altri modi provo.
I dati della maschera vengono ordinati su una riga di Calcoli e Relazioni (H10:M10), la macro del pulsante SALVA, in Carica Listino copia i dati di questa riga nella prima riga vuota di MATRICE LISTINO, se su "Codice Prodotto" (cella della maschera dove metto l'articolo x intenderci) c'è un codice di un prodotto inserito in listino si evidenzia la cella F20 della maschera. Se inserisco lo stesso codice vorrei che non lo facesse, questo per evitare doppioni. A naso bisognerebbe inseire una condizione che se F20=codice presente esce dalla procedura senza salvare e compare un messaggio "Codice presente " o altro.
Comunque la procedura evidenziata in precedenza funziona bene, va completata come vorrei se è possibile.
Grazie a tutti comunque
I dati della maschera vengono ordinati su una riga di Calcoli e Relazioni (H10:M10), la macro del pulsante SALVA, in Carica Listino copia i dati di questa riga nella prima riga vuota di MATRICE LISTINO, se su "Codice Prodotto" (cella della maschera dove metto l'articolo x intenderci) c'è un codice di un prodotto inserito in listino si evidenzia la cella F20 della maschera. Se inserisco lo stesso codice vorrei che non lo facesse, questo per evitare doppioni. A naso bisognerebbe inseire una condizione che se F20=codice presente esce dalla procedura senza salvare e compare un messaggio "Codice presente " o altro.
Comunque la procedura evidenziata in precedenza funziona bene, va completata come vorrei se è possibile.
Grazie a tutti comunque
Andrea - openoffice 3.4.1 - windows Vista
Re: Evitare codici doppi
Ciao baxand, per allegare il tuo file, puoi fare in questo modo.
Fai una copia del tuo file, elimina tutti i dati sensibili, lascia la macro e la struttura del corpo che hai realizzato e popola i campi che ti interessano con due nomi di fantasia.
Con questo sistema ridurrai notevolmente la grandezza del file, ma soprattutto darai la possibilità a chi deciderà di venir in tuo aiuto, di ottimizzare i tempi, concentrandosi solo sul reale problema senza dover reinventarsi tutta la struttura base per capire se l'implementazione alla tua macro gira correttamente.
Diversamente si rischia di entrare in un giro di botta e risposta senza venirne a capo.
Spero di esser stato chiaro, ciao.
Fai una copia del tuo file, elimina tutti i dati sensibili, lascia la macro e la struttura del corpo che hai realizzato e popola i campi che ti interessano con due nomi di fantasia.
Con questo sistema ridurrai notevolmente la grandezza del file, ma soprattutto darai la possibilità a chi deciderà di venir in tuo aiuto, di ottimizzare i tempi, concentrandosi solo sul reale problema senza dover reinventarsi tutta la struttura base per capire se l'implementazione alla tua macro gira correttamente.
Diversamente si rischia di entrare in un giro di botta e risposta senza venirne a capo.
Spero di esser stato chiaro, ciao.
OpenOffice 3.3 SU WINDOWS 7
Re: Evitare codici doppi
dalla descrizione che ha fatto ora allegare la macro Salva_Codice_Listino è stato inutile, il controllo di cui parli deve stare a monte.
Ti allego un file di esempio con il controllo dei duplicati in colonna A
Ti allego un file di esempio con il controllo dei duplicati in colonna A
- Allegati
-
- NoDuplicati.ods
- (10.75 KiB) Scaricato 158 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
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
-
- Messaggi: 10
- Iscritto il: domenica 3 novembre 2013, 20:25
Re: Evitare codici doppi
Ho prova su un foglio a fare un esempio di ciò che cerco e nel file ci sono tutti i dettagli possibili, sperando di essere stato sufficientemente chiaro.
Grazie fin da ora comunque vada a finire
Grazie fin da ora comunque vada a finire
- Allegati
-
- Esempio Gesty.ods
- (13.76 KiB) Scaricato 123 volte
Andrea - openoffice 3.4.1 - windows Vista
Re: Evitare codici doppi
Ciao patel, sfruttando la proprietà "RangeAddressesAsString" che restituisce l'indirizzo dell'intersezione quindi del target, si può evitare l'uso della "Function AddressString(cell as object)"patel ha scritto: Ti allego un file di esempio con il controllo dei duplicati in colonna A
Se poi si vuol far comparire solo il nome della cella basta usare l'istruzione Right ect ect...
Codice: Seleziona tutto
Sub eventocella(Target)
dim svc As Object
If NOT Target.supportsService("com.sun.star.sheet.SheetCell") then exit sub
sh = Target.getSpreadsheet()
range1 = sh.getCellRangeByName("A2:A10")
range2 = range1.queryintersection(Target.rangeaddress())
If range2.RangeAddressesAsString = "" Then Exit Sub
svc = createUnoService("com.sun.star.sheet.FunctionAccess")
If svc.callFunction("COUNTIF", Array(Range1, Target.value)) > 1 Then
MsgBox "duplicato rilevato" & chr$(13) & "Verrà cancellata la cella " & range2.RangeAddressesAsString, 48, "Messaggio di ERRORE"
Target.string = ""
Endif
End Sub
LibreOffice 7.2.2.2 windows 10
Openoffice 4.1.13 su windows 10
Openoffice 4.1.13 su windows 10
Re: Evitare codici doppi
Ti allego file con macro modificata, oltre alla riga inutile segnalata da patel ho cambiato i riferimenti con quelli dell'esempio e aggiunto un controllo per verificare se il codice è già presente.
- Allegati
-
- Esempio Gesty.ods
- (15.24 KiB) Scaricato 144 volte
LibreOffice 7.2.2.2 windows 10
Openoffice 4.1.13 su windows 10
Openoffice 4.1.13 su windows 10
Re: Evitare codici doppi
Giusto, non l'avevo guardata attentamente.Gaetanopr ha scritto: Ciao patel, sfruttando la proprietà "RangeAddressesAsString" che restituisce l'indirizzo dell'intersezione quindi del target, si può evitare l'uso della "Function AddressString(cell as object)"
-------------------
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
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