Condividi:        

Inserimento dati su tabella da codice a barre

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

Re: Inserimento dati su tabella da codice a barre

Postdi Anthony47 » 12/03/24 18:57

A) Ma tu vuoi mantenere la possibilità di introdurre da tastiera quando ti manca la pistola o arriva un carico privo di informazioni in codice a barra, vero?
E come pensi di identificare un input da tastiera (che deve essere processato con il codice esistente che lavora con Select Case) da un input da pistola (che deve essere gestito in un modo nuovo)?
A questo dovevano servire i marcatori tipo #ZcZx# in testa a una lettura da pistola.

B) Hai detto che vuoi usare la "virgola" come separatore di campi; ma sei sicuro che i tuoi campi non conterranno mai la Virgola? Forse sarebbe meglio usare un carattere o una stringa che offra maggiori garanzia di unicità; e la scelta va concordata con chi da qualche parte deve stampare i messaggi in codice a barre.

C) Insomma secondo me serve un po' più di analisi prima di arrivare al codice.

Veniamo alla tua segnalazione...
Probabilmente che la Sub Pusher usi una variabile I e che l'esempio che ti avevo fatto per chiamare Pusher (Call Pusher(Cells(I, "A").Value, "#", I)) usasse anche lei una variabile I ti hanno fatto pensare che ci sia una permeabilità tra il chiamante e il chiamato, che in realtà non c'è: ogni variabile in genere "vive" solo all'interno della Sub o della Function in cui e' usata, salvo che non sia impostato altrimenti all'atto della dichiarazione delle variabili. Per approfondire cerca "vba area di validità di una variabile site:microsoft.com" (senza le virgolette)

Ora e' evidente che la WorksheetChange deve essere ripensata a fronte dei commenti A-B-C (sopra) ma, per quanto appena detto, dovrebbe esserti chiaro che non puoi usare nella prima istruzione di una Sub delle variabili che non hanno nessun valore, come invece vedo in testa della tua WorksheetChange:
Codice: Seleziona tutto
Call Pusher(Cells(I, "A").Value, "#", I)
In quel momento I non ha nessun valore, quindi ti viene segnalato che stai cercando di passare "niente" alla Sub Pusher, che in quella posizione si aspetta un Long; ma in assenza di quell'errore avresti avuto un errore di run time 1004 perché Cells(I, "A") non punta a niente...

Solo per prova, ripristina il codice originale della WorksheetChange del primo foglio e usa questo codice per la WorksheetChange in un secondo foglio di prova:
Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)
'
If Target.Count = 1 Then
    If Target.Column = 1 Then
        Application.EnableEvents = False
        Call Pusher(Target.Value, ",", Target.Row)
        Application.EnableEvents = True
    End If
End If
End Sub

Poi vai in una cella di colonna A di questo secondo foglio e "sparagli" da pistola la stringa "uno,due,tre,quattro,cinque"; oppure (perche' credo che la pistola te l'abbiano ancora fornita) scrivi quella stringa da tastiera.

Se nella Sub Pusher hai usato la mia Mappa, ti ritroverai in colonna A-C-F di quella riga le stringhe uno/due/tre (quattro e cinque vanno invece perduti perche' la mia "Mappa" contiene solo tre colonne)

Ovviamente questa WorksheetChange ha perduto la prestazione di saltare alla "prossima colonna"; se vuoi mantenere (come credo sia prudente) la possibilita' di inserire i singoli campi da tastiera, allora devi creare una WorksheetChange ibrida: non e' difficile, ma è subordinata all'analisi C (vedi sopra). Comunque la soluzione che sceglierete puo' essere anche diversa, ma deve essere sviluppata in proprio e presa in carico dal vostro reparto IT; se così non fosse va a pallino tutto il vostro Sistema della Qualità.
E per evitare di metterti in una brutta situazione, per il futuro io ti darò solo chiarimenti e singoli pezzi di istruzioni, ma niente macro funzionanti.

Puoi invece usare in Foglio2 la Sub Worksheet_Change che ti ho dato in questo messaggio e in Foglio1 la Sub Worksheet_Change precedente (quella che usava Select Case) per creare un prototipo dimostrativo per stimolare chi deve decidere se ha senso investire per passare a un prodotto aziendale funzionante.
Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19230
Iscritto il: 21/03/06 16:03
Località: Ivrea

Sponsor
 

Re: Inserimento dati su tabella da codice a barre

Postdi systemcrack » 13/03/24 08:43

Anthony47 ha scritto:A) Ma tu vuoi mantenere la possibilità di introdurre da tastiera quando ti manca la pistola o arriva un carico privo di informazioni in codice a barra, vero?
E come pensi di identificare un input da tastiera (che deve essere processato con il codice esistente che lavora con Select Case) da un input da pistola (che deve essere gestito in un modo nuovo)?
A questo dovevano servire i marcatori tipo #ZcZx# in testa a una lettura da pistola.

Pensavo fosse più semplice la realizzazione visto che il codice a barre non è altro che un font e che lo shot della pistola è paragonabile all'immissione di dati da tastiera o ad un copia e incolla. La macro che avevo postato io, (quella intera non quella che avevo modificato io) lo faceva (quasi a parte il fatto che non saltava le colonne come volevo io), solo che apriva troppi messaggi e richiedeva ogni volta di indicare la cella da splittare.

Anthony47 ha scritto:B) Hai detto che vuoi usare la "virgola" come separatore di campi; ma sei sicuro che i tuoi campi non conterranno mai la Virgola? Forse sarebbe meglio usare un carattere o una stringa che offra maggiori garanzia di unicità; e la scelta va concordata con chi da qualche parte deve stampare i messaggi in codice a barre.

Si sono sicuro, il codice a barre estratto dal buono di carico conterrà solo un numero limitato di caratteri per ogni campo e nell'intestazione di ogni azienda non ci sono virgole, ma si potrebbe anche usare asterischi anzi.. mentre ti scrivevo è passato quello che viene stipendiato dalla ditta come programmatore e ha detto che come separatore utilizzerà il carattere " | ".

Anthony47 ha scritto:Veniamo alla tua segnalazione...
Probabilmente che la Sub Pusher usi una variabile I e che l'esempio che ti avevo fatto per chiamare Pusher (Call Pusher(Cells(I, "A").Value, "#", I)) usasse anche lei una variabile I ti hanno fatto pensare che ci sia una permeabilità tra il chiamante e il chiamato, che in realtà non c'è: ogni variabile in genere "vive" solo all'interno della Sub o della Function in cui e' usata, salvo che non sia impostato altrimenti all'atto della dichiarazione delle variabili. Per approfondire cerca "vba area di validità di una variabile site:microsoft.com" (senza le virgolette)

Ora e' evidente che la WorksheetChange deve essere ripensata a fronte dei commenti A-B-C (sopra) ma, per quanto appena detto, dovrebbe esserti chiaro che non puoi usare nella prima istruzione di una Sub delle variabili che non hanno nessun valore, come invece vedo in testa della tua WorksheetChange:

Rileggerò come un mantra questi tuoi nuovi consigli e cercherò di informarmi ulteriormente in proposito

Anthony47 ha scritto: Comunque la soluzione che sceglierete puo' essere anche diversa, ma deve essere sviluppata in proprio e presa in carico dal vostro reparto IT; se così non fosse va a pallino tutto il vostro Sistema della Qualità.

Sistema qualità :lol: :lol: :lol: grazie Anthony per avermi regalato un sorriso in questa giornata grigia :lol: :lol: :lol:

Anthony47 ha scritto:E per evitare di metterti in una brutta situazione, per il futuro io ti darò solo chiarimenti e singoli pezzi di istruzioni, ma niente macro funzionanti.

Guarda Anthony, come ho scritto qui il mio proseguire su questo lavoro è solo per mia curiosità e cercare di capire ulteriormente il linguaggio, non voglio la pappa pronta. ;)

Ps
Ho chiesto con il programmatore aziendale, con cui ho appena finito di parlare, il quale mi ha detto che lui conosce vba, ma non lo ha mai applicato a excel. Mi ha rimbalzato su un ingegnere sempre in azienda che sembra essere più ferrata, ma con cui non sono affatto in confidenza.
Avatar utente
systemcrack
Utente Senior
 
Post: 283
Iscritto il: 27/07/17 09:40

Re: Inserimento dati su tabella da codice a barre

Postdi systemcrack » 16/03/24 08:43

L'unica cosa che non riesco a fare è posizionare il puntatore, alla fine della macro che dispone il testo nelle caselle e che finisce il suo ""lavoro" in colonna H poi vorrei si posizionarsi in colonna P. È pura fighetteria, perché il mouse è comunque da prendere per fare doppio click è lanciare le piantine, ma voglio capire come funziona il codice.. chissà che in un futuro non mi torni utile.
Avatar utente
systemcrack
Utente Senior
 
Post: 283
Iscritto il: 27/07/17 09:40

Re: Inserimento dati su tabella da codice a barre

Postdi Anthony47 » 19/03/24 11:00

Per selezionare la colonna P si puo' semplicemente usare, subito prima di End Sub, qualcosa come
Codice: Seleziona tutto
Cells(kk,"P").Select

dove kk e' il numero di riga, che quindi probabilmente gia' conosci ed e' memorizzato all'interno di qualche variabile della tua macro corrente.
Avatar utente
Anthony47
Moderatore
 
Post: 19230
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Inserimento dati su tabella da codice a barre

Postdi systemcrack » 19/03/24 14:16

Ciao Anthony, mettendo mano alla macro
Codice: Seleziona tutto
Sub Pusher(ByVal iStr As String, pSep As String, oRow As Long)
Dim Mappa, mySplit, I As Long
'
Mappa = Array("B", "C", "F", "H")      '<<< Colonne di destinazione
mySplit = Split(iStr & pSep, pSep, , vbTextCompare)
If UBound(mySplit) > 0 Then
    For I = 0 To UBound(mySplit) - 1
        Cells(oRow, Mappa(I)).Value = mySplit(I)
        If I >= UBound(Mappa) Then Exit For
    Next I
End If
End Sub

E trasformandola così
Codice: Seleziona tutto
Sub Pusher(ByVal iStr As String, pSep As String, oRow As Long)
Dim Mappa, mySplit, I As Long
'
Mappa = Array("B", "C", "F", "H")      '<<< Colonne di destinazione
mySplit = Split(iStr & pSep, pSep, , vbTextCompare)
If UBound(mySplit) > 0 Then
    For I = 0 To UBound(mySplit) - 1
        Cells(oRow, Mappa(I)).Value = mySplit(I)
        If I >= UBound(Mappa) Then Exit For
    Next I
End If
Cells(I,"P").Select
End Sub

Funzionicchia.. ossia si ferma sulla colonna P, ma sempre nella cella nr 3.

Ora ho iniziato a fare delle prove e mi sono accorto che dopo la prima prova in cui ricevo un errore la macro splyt smette di funzionare, anche se torno indietro e/o elimino le modifiche eseguite.
Cosa potrebbe provocare questo blocco? :undecided:
Avatar utente
systemcrack
Utente Senior
 
Post: 283
Iscritto il: 27/07/17 09:40

Re: Inserimento dati su tabella da codice a barre

Postdi systemcrack » 19/03/24 15:36

Non capisco proprio come "relativizzare" la posizione su P in base alla posizione su I...
Codice: Seleziona tutto
ActiveSheet.Cells(6, 5).Select

Come faccio ad adattare questa soluzione alla mia situazione?
Codice: Seleziona tutto
Cells(I, "P").Select

Tra l'altro il problema poi che lo schema non funziona più sul mio pc, mentre negli altri si, mi ha un pò azzoppato.
Avatar utente
systemcrack
Utente Senior
 
Post: 283
Iscritto il: 27/07/17 09:40

Re: Inserimento dati su tabella da codice a barre

Postdi systemcrack » 19/03/24 16:22

Sto tentando con:
Codice: Seleziona tutto
Range("I:I").Offset(0, 6).Select

Ma non funziona, mi seleziona tutta la colonna, oppure se provo con
Codice: Seleziona tutto
Range("I:I").Offset(1, 6).Select

ricevo errore 1004 :aaah
Avatar utente
systemcrack
Utente Senior
 
Post: 283
Iscritto il: 27/07/17 09:40

Re: Inserimento dati su tabella da codice a barre

Postdi Anthony47 » 19/03/24 17:00

Si puo' lavorare con Offset, ma bisogna conoscere con certezza la posizione di partenza: e' gia' sulla riga giusta o e' ad esempio gia' sulla riga "successiva" (come succede dopo che hai caricato qualcosa in una cella?
Se mi dici come fai a scrivere in cella Hxx, posso suggerire qualcosa in modo piu' mirato

Aspe', vedo che hai messo il codice nel messaggio "precedente" a quello cui ho risposto (che mi era sfuggito a prima lettura)

Se vuoi lavorare in Pusher allora ricorda che I e' una variabile "interna" alla Sub; ma tu "passi" a Pusher la riga su cui lavorare nella variabile oRow; quindi inveche che Cells(I,"P").Select sovresti semplicemente fare
Codice: Seleziona tutto
Cells(oRow,"P").Select
Avatar utente
Anthony47
Moderatore
 
Post: 19230
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Inserimento dati su tabella da codice a barre

Postdi systemcrack » 19/03/24 17:17

Non avevo provato questa combinazione.. grazie Anthony!
Avatar utente
systemcrack
Utente Senior
 
Post: 283
Iscritto il: 27/07/17 09:40

Re: Inserimento dati su tabella da codice a barre

Postdi systemcrack » 20/03/24 16:54

L'unica pecca che rimane perchè le macro che dispongono il testo nelle varie celle, convivano rimane solo da sistemare una finezza.. in pratica quando, digitando da tastiera arrivo all'inserimento della merce dopo non salta alla colonna P, mentre se digito la cella (adibita all'inserimento della targa), cioè la colonna B, salta subito alla colonna P.
Avatar utente
systemcrack
Utente Senior
 
Post: 283
Iscritto il: 27/07/17 09:40

Re: Inserimento dati su tabella da codice a barre

Postdi Anthony47 » 20/03/24 17:58

Ma e' per quello (poter discriminare se un input e' da pistola o da tasiera) che io avevo suggerito di "marcare" le letture da pistola con (ad esempio) #ZcZx#.
In quel modo la WorksheetChange puo' subito determinare se la lettura e' da pistola (presenza del marker in testa alla stringa) o da tastiera, e stabilire due percorsi logici (caricamento tramite Pusher e poi posizionamento su P, OPPURE caricamento della cella e posizionamento nella successiva)

Nota che io avevo suggerito di usare dei marcatori a livello di campo (es TARGA, VETTORE, ...), che avrebbero consentito di leggere da pistola uno oppure più campi, non necessariamente in sequenza (perche' appunto il marker conteneva anche il codice del campo in lettura). Vedi viewtopic.php?f=26&t=113280&start=40#p666544
Avatar utente
Anthony47
Moderatore
 
Post: 19230
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Inserimento dati su tabella da codice a barre

Postdi systemcrack » 21/03/24 08:11

Buongiorno Anthony
Si si ricordo bene.. Dai! per il momento me la faccio andare bene così :lol: poi mi riservo in futuro di ripensarci.
Per il momento aspetto che arrivi una pistola che funzioni. Purtroppo il codice generato dai dati da riportare è troppo lungo e necessita di una pistola hd per poter aumentare la densità del codice ed accorciarne la lunghezza. Siamo in attesa che arrivi :aaah :lol:
Avatar utente
systemcrack
Utente Senior
 
Post: 283
Iscritto il: 27/07/17 09:40

Re: Inserimento dati su tabella da codice a barre

Postdi Dylan666 » 21/03/24 10:17

systemcrack ha scritto:Purtroppo il codice generato dai dati da riportare è troppo lungo e necessita di una pistola hd per poter aumentare la densità del codice ed accorciarne la lunghezza.

Mi spieghi bene questo pezzo?
Perché sono molto curioso
Avatar utente
Dylan666
Moderatore
 
Post: 39994
Iscritto il: 18/11/03 16:46

Re: Inserimento dati su tabella da codice a barre

Postdi systemcrack » 21/03/24 16:14

Ciao Dylan, so che del codice 128 che è quello che utilizziamo ce ne sono di 2 tipi semplice o ad alta densità il secondo richiede una pistola/lettore in HD per poter essere letto. Ovviamente essendo più strette le righette, il codice è più corto e dovrebbe bastare per far leggere il codice al lettore che diversamente non riesce. Detto molto in spiccioli.
Avatar utente
systemcrack
Utente Senior
 
Post: 283
Iscritto il: 27/07/17 09:40

Re: Inserimento dati su tabella da codice a barre

Postdi Dylan666 » 21/03/24 18:38

Parliamo per caso di GS1-128?
Avatar utente
Dylan666
Moderatore
 
Post: 39994
Iscritto il: 18/11/03 16:46

Re: Inserimento dati su tabella da codice a barre

Postdi systemcrack » 22/03/24 10:08

Mi sono passati per le mani, 2 modelli di pistola laser (che non hanno funzionato), appena mi forniscono quella che funzionerà sarò ben lieto di dirti nome e modello.
Avatar utente
systemcrack
Utente Senior
 
Post: 283
Iscritto il: 27/07/17 09:40

Re: Inserimento dati su tabella da codice a barre

Postdi Dylan666 » 22/03/24 14:43

Il nome che facevo io era del tipo di barcode, non del lettore
Avatar utente
Dylan666
Moderatore
 
Post: 39994
Iscritto il: 18/11/03 16:46

Re: Inserimento dati su tabella da codice a barre

Postdi Anthony47 » 22/03/24 17:00

Dylan ha scritto:
systemcreack ha scritto: Purtroppo il codice generato dai dati da riportare è troppo lungo e necessita di una pistola hd per poter aumentare la densità del codice ed accorciarne la lunghezza.


Mi spieghi bene questo pezzo?
Perché sono molto curioso

Credo che l'utente stia semplicemente dicendo: "Visto che la stringa complessiva in barcode e' molto lunga devo usare il formato in HR per poter mantenere la dimensione della stringa abbastanza compatta da poterla leggere con una pistola"
Infatti systemcrack sta ragionando di caricare 3 campi con una sola lettura
Avatar utente
Anthony47
Moderatore
 
Post: 19230
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Inserimento dati su tabella da codice a barre

Postdi systemcrack » 22/03/24 23:22

Dylan666 ha scritto:Il nome che facevo io era del tipo di barcode, non del lettore

Cod.128
Avatar utente
systemcrack
Utente Senior
 
Post: 283
Iscritto il: 27/07/17 09:40

Re: Inserimento dati su tabella da codice a barre

Postdi Dylan666 » 23/03/24 22:36

Sì, l'ho capito, ma il Code 128 ad "alta densità" non esiste, al massimo si parla di GS1-128 detto anche UCC-128 e EAN-128
Avatar utente
Dylan666
Moderatore
 
Post: 39994
Iscritto il: 18/11/03 16:46

PrecedenteProssimo

Torna a Applicazioni Office Windows


Topic correlati a "Inserimento dati su tabella da codice a barre":


Chi c’è in linea

Visitano il forum: Nessuno e 33 ospiti