|
03/12/2023 15:29 | |
Ciao,
accogliendo il suggerimento di alfrimpa, che ringrazio, apro un nuovo post trasferendo quanto avevo chiesto nel post "Progetto file gestionale" inserito nella Sezione "I vostri lavori".
Nel file allegato quando clicco sul pulsante "Registra" posto sulla form "FrmInsDoc" mi dà questo messaggio "Impossibile trovare l'oggetto specificato".
Non ho capito dove sta l'errore.
rex88 |
|
| | Post: 7.458 | Registrato il: 14/11/2004
| Utente Master | Office 2019 | | OFFLINE |
|
03/12/2023 15:49 | |
Ciao L'errore sta nel fatto che prima nomini i "TextBox" con "TB_Prodotti1-2-3-etc" e poi nella verifica e pulizia li chiami "TextBox", come vedi qui
For nTB = 1 To 5
If Me.Controls("TB_Prodotti" & nTB).Value = "" Then
Me.Controls("TB_Prodotti" & nTB).SetFocus
Err.Raise vbObjectError + 513, Description:="inserire " & Me.Controls("Label" & nTB).Caption
End If
Next nTB
ho sostituito io "TexBox" con "TB_Prodotti" vi è anche da un altra parte lo stesso errore, e non ho controllato se vi sarà lo stesso errore da qualche altra parte.
Non capisco la mania di cambiare nome agli oggetti, che vengono gestiti meglio da Excel con i loro nomi originali
Ciao By Sal (8-D se ti piace la soluzione sostienici con una DONAZIONE a piacere. Grazie clicca qui |
|
03/12/2023 16:10 | |
Ciao,
ho fatto le correzioni.
Il messaggio persiste. |
| | Post: 4.986 | Registrato il: 21/06/2013
| Città: NAPOLI | Età: 70 | Utente Master | Excel 365 | | ONLINE |
|
03/12/2023 16:20 | |
by sal, 03/12/2023 15:49:
Non capisco la mania di cambiare nome agli oggetti, che vengono gestiti meglio da Excel con i loro nomi originali
Concordo totalmente
Alfredo |
|
03/12/2023 16:23 | |
Allora li devo chiamare TextBox1, TextBox2, ....? |
| | Post: 7.459 | Registrato il: 14/11/2004
| Utente Master | Office 2019 | | OFFLINE |
|
04/12/2023 08:59 | |
Ciao Non è quello di chiamarli come Textbox1-2-etc.. è il modo di scrivere il codice vba, ti faccio un esempio di 3 textbox.
nelle proprietà cambio i nomi di Textbo1 in TB_Codice Textbox2 in TB_Descrizione e Textbox3 in TB_Quantita
ora dovrei con il codice pulire queste Textbox, con il nome TextBox1-2-3 me la cavo con 3 righe di codice
For x = 1 to 3
Controls("TextBox" & x) = ""
next x
invece nominandole diversamente anche se leggendo TB_Codice "si tratta di codice parlante" capisco che quella Textbox è relativa al Codice cosi per le altre, ma devo scrivere forzatamente il codice diverso per ogni Textbox
TB_Codice = ""
TB_Descrizione = ""
TB_Quantita = ""
pensa se sono 20 o più textbox dovrei scriverle sempre ognuna sia per cancellare che per controllare o scrivere nel foglio, invece me la cavo solamente con le tre righe di codice con il ciclo For..Next invece di 3 scrivo 20 ed ho risolto
Il segreto principale, è quando si crea il form si mettono le textbox o Combobox in modo sequenziale, in questo modo contando le texbox sul form sai il nome della textbox usata per quel particolare dato.
ti allego il tuo file che ho modificato
Ciao By Sal (8-D [Modificato da by sal 04/12/2023 09:00] se ti piace la soluzione sostienici con una DONAZIONE a piacere. Grazie clicca qui |
|
04/12/2023 10:27 | |
Ho scaricato il tuo file.
Dove trovo la correzione fatta da te nel codivìce vba? |
| | Post: 3.591 | Registrato il: 06/04/2013
| Utente Master | 2010 | | OFFLINE |
|
04/12/2023 10:28 | |
by sal:
Non capisco la mania di cambiare nome agli oggetti, che vengono gestiti meglio da Excel con i loro nomi originali
Ciao
non mi trovate molto d'accordo con questa affermazione.
I nomi "parlanti" sono di molto aiuto nella lettura di un codice, in modo particolare da parte di chi, non avendolo fatto, ci deve mettere le mani.
Capisco la comodità (in questo caso) di utilizzare controls(....), ma ci sono vie alternative:
- magari l'utilizzo dei Tag
- oppure riferirsi alla parte comune del nome (TB_)
- o, se si è un po' più esperti, delle classi.
saluti
[Modificato da dodo47 04/12/2023 10:33] Domenico
Win 10 - Excel 2016 |
|
04/12/2023 10:52 | |
Ciao bysal,
ho fatto alcune prove con il file da te corretto, ma il problema persite.
Ciao dodo47,
confesso di non essere i grado di spingermi oltre.
Grazie.
rex88 |
| | Post: 7.462 | Registrato il: 14/11/2004
| Utente Master | Office 2019 | | OFFLINE |
|
04/12/2023 10:57 | |
Ciao fai un immagine di come imposti il form, a me non da problemi forse ci sarà qualche altro Textbox da qualche parte che non ho visto.
Ciao By Sal (8-D
se ti piace la soluzione sostienici con una DONAZIONE a piacere. Grazie clicca qui |
| | Post: 7.463 | Registrato il: 14/11/2004
| Utente Master | Office 2019 | | OFFLINE |
|
04/12/2023 11:00 | |
Ciao Domenico, lo so per il fatto del codice parlante, ma confesso non so usare le classi, o meglio non mi entrano in testa, ed ho difficolta quanto nel codice VBA cambiano il nome agli oggetti.
Comunque lo sai il VBA è Soggettivo, non tutti lo usano allo stesso modo.
Ciao Salvatore (8-D se ti piace la soluzione sostienici con una DONAZIONE a piacere. Grazie clicca qui |
|
04/12/2023 11:12 | |
Ciao bysal,
questo è l'immagine del file.
Dopo aver cliccato su pulsante Inserisci i dati vendono inseriti nella listbox.
Quando clicco sul pulsante Registra appare il messaggio. |
| | Post: 3.592 | Registrato il: 06/04/2013
| Utente Master | 2010 | | OFFLINE |
|
04/12/2023 11:20 | |
ciao
questa istruzione:
Me.Controls("Label" & nTB)
sicuro che esistono le "LabelXXX" ??
Nel tuo foglio hai solo la Label225 e 338 che contengono le intestazioni
saluti
[Modificato da dodo47 04/12/2023 11:35] Domenico
Win 10 - Excel 2016 |
|
04/12/2023 11:37 | |
Ciao,
sulla form esistino due label:
Label255
Label338
LB_Descrizione |
|
04/12/2023 11:44 | |
Ho eliminato dal codice la riga:
Err.Raise vbObjectError + 513, Description:="inserire " & Me.Controls("Label" & nTB). Caption
Adesso funziona
Passo allo step successivo. |
| | Post: 7.464 | Registrato il: 14/11/2004
| Utente Master | Office 2019 | | OFFLINE |
|
04/12/2023 11:47 | |
Ciao il processo incriminato è questo, CREDO
For nTB = 1 To 5
If Me.Controls("TB_Prodotti" & nTB).Value = "" Then
Me.Controls("TB_Prodotti" & nTB).SetFocus
Err.Raise vbObjectError + 513, Description:="inserire " & Me.Controls("TB_Prodotti" & nTB).Name 'modifica
End If
Next nTB
For nComboBox = 1 To 4
If Me.Controls("ComboBox" & nComboBox).Value = "" Then
Me.Controls("ComboBox" & nComboBox).SetFocus
Err.Raise vbObjectError + 513, Description:="inserire " & Me.Controls("ComboBox" & nComboBox).Name 'modifica
End If
Next nComboBox
penso che con Label volesse indicare il nome del TextBox oppure ComboBox che sta controllando quando non è riempito, quel codice serve a questo, poi la Caption vale per la scritta nella label e non il nome dell'oggetto, vedi la modifica che ho effettuato rispetto al tuo codice
ti ho inserito anche un Exit Sub prima dell'errore, per non vedere il MsgBox alla fine della Routine
Exit Sub
USCITA:
If Err.Number <> 0 Then
MsgBox Err.Description, vbExclamation, "ATTENZIONE"
End If
End Sub
poi mi dici i vari passaggi, fai prima Inserisci e poi Registra, dopo inserisci il Registra trova le textbox e combobox vuote e qui scatta l'errore se non sono piene.
ti allego il file
Ciao By Sal (8-D
[Modificato da by sal 04/12/2023 11:48] se ti piace la soluzione sostienici con una DONAZIONE a piacere. Grazie clicca qui |
|
04/12/2023 12:08 | |
Ho eliminato queste due righe dal codice del pulsante "Registra"
Err.Raise vbObjectError + 513, Description:="inserire " & Me.Controls("Label" & nTB).Caption
Err.Raise vbObjectError + 513, Description:="inserire " & Me.Controls("Label" & nTB).Caption
Adesso non dà più il messaggio.
Ho inserito due prodotti ma nel foglio allegati si popola solo la riga 10, invece si dovrebbe accodare. |
|
04/12/2023 12:10 | |
Scusami bysal,
ci siamo incrociati con i messaggi.
Il mio ulimo non ha tenuto conto del tuo ultimo.
Faccio le prove e poi comunico. |
|
04/12/2023 12:18 | |
Ciao bysal,
ho inserito due righe e ho cliccato su Registra.
Il risulktato è nell'immagine allegata. |
|
04/12/2023 13:20 | |
Questo è il tuo file da dove ho ricavato l'immagine.
|
|
04/12/2023 18:15 | |
Ciao bysal,
se sei d'accordo chiuderei il post come risolto limitatamente all'oggetto e trasferirei in un altro post il messaggi delle ore 12:18 e 13:20, dando al post il seguente titolo: Inserire dati da userform a foglio. |
| | Post: 934 | Registrato il: 02/04/2018
| Città: PESCARA | Età: 75 | Utente Senior | EXCEL 2016 - SPREAD32 | | OFFLINE |
|
04/12/2023 19:16 | |
@rex88
un post è un messaggio
l'insieme dei post o messaggi raggruppati sotto un titolo si chiama thread o discussione
l'etichetta di internet, detta anche netiquette, suggerisce che non è estetico, ordinato e leggibile un intero gruppo di discussioni portate avanti contemporaneamente, cioè aggiornando continuamente questa o quell'altra discussione, come hai già fatto.
Ogni argomento è una discussione ed è educato chiudere una discussione PRIMA di aprirne un'altra
Quindi, poichè sullo stesso argomento complessivo tieni già aperte 3 discussioni, i casi sono 2
O continui su questa senza aprirne altre
O, se ritieni di dover trattare un altro argomento, piu o meno diverso da questo devi accettare che le 3 precedenti vengano chiuse.
per chiuderle è sufficiente che tu non le aggiorni più, diversamente verranno chiuse d'ufficio
Se una discussione verte su un argomento lungo o complicato, a mio avviso non ha senso creare una nuova discussione con nuovo titolo per ogni passo da compiere nella risoluzione dello stesso
Inoltre poichè un forum non è una chat non appare ergonomico scrivere messagi in continuazione anche per motivi inutili
ogni messaggio puo' essere aggiornato, modificato entro un lasso di tempo molto comodo, cliccando su tasto MODIFICA del proprio ultimo messaggio, almeno per segnalare piccole variazioni della situazione operativa.
Saluti
LEO
https://t.me/LordBrum |
|
04/12/2023 20:18 | |
Ti ringrazio e mi atterrò alle disposizioni.
Pertanto continuo con questo. |
| | Post: 935 | Registrato il: 02/04/2018
| Città: PESCARA | Età: 75 | Utente Senior | EXCEL 2016 - SPREAD32 | | OFFLINE |
|
04/12/2023 20:20 | |
rex88 (nTdQ231201), 04/12/2023 20:18:
Ti ringrazio e mi atterrò alle disposizioni.
Pertanto continuo con questo.
grazie a te per la comprensione
LEO
https://t.me/LordBrum |
|
05/12/2023 10:04 | |
Ciao,
nel codice posto sul pulsante "Registra" c'è questa parte che riguarda i prodotti
'verifica dati inseriti
For nTB = 1 To 5
If Me.Controls("TB_Prodotti" & nTB).Value = "" Then
Me.Controls("TB_Prodotti" & nTB).SetFocus
Err.Raise vbObjectError + 513, Description:="inserire " & Me.Controls("TB_Prodotti" & nTB).Name 'modifica
End If
Next nTB
Il messaggio che si trova nell'immagine allegata al post di ieri ore 12:18 può dipendere dal fatto che i prodotti sono testo e nella parte del codive vba c'è .Value?
Per favore mi potete dire come mettere il codice vba ytra tag.
Grazie
rex88
|
| | Post: 936 | Registrato il: 02/04/2018
| Città: PESCARA | Età: 75 | Utente Senior | EXCEL 2016 - SPREAD32 | | OFFLINE |
|
05/12/2023 10:14 | |
ciao
"Per favore mi potete dire come mettere il codice vba ytra tag."
Per mettere il codice fra tag, in un messaggio, anzitutto scrivi il testo del codice
For nTB = 1 To 5
If Me.Controls("TB_Prodotti" & nTB).Value = "" Then
Me.Controls("TB_Prodotti" & nTB).SetFocus
Err.Raise vbObjectError + 513, Description:="inserire " & Me.Controls("TB_Prodotti" & nTB).Name 'modifica
End If
Next nTB
poi lo "evidenzi", quindi dovrebbe diventare azzurro
poi in basso alla finestra del messaggio clicchi sul simbolo composto da "minore, slash, maggiore" accidenti non me lo fa scrivere, è i simbolo che si trova subito a destra delle doppie virgolone
clicchi OK la prima volta, lasciando invariata la parola TEXT, poi la seconda volta potresti scrivere un piccolo titolo esplicativo (io ho messo VB)
e a sto punto il codice compare così
VB For nTB = 1 To 5
If Me.Controls("TB_Prodotti" & nTB).Value = "" Then
Me.Controls("TB_Prodotti" & nTB).SetFocus
Err.Raise vbObjectError + 513, Description:="inserire " & Me.Controls("TB_Prodotti" & nTB).Name 'modifica
End If
Next nTB
[Modificato da L2018 05/12/2023 10:18]
LEO
https://t.me/LordBrum |
|
05/12/2023 10:17 | |
Grazie
Ho provato a sostituire . Value con .Text ma niente da fare.ù
Non riesco a trovare l'errore.
rex88 [Modificato da rex88 05/12/2023 10:23] |
| | Post: 7.469 | Registrato il: 14/11/2004
| Utente Master | Office 2019 | | OFFLINE |
|
05/12/2023 12:37 | |
Ciao Premesso che quella parte controlla solamente se vi è un valore nella textbox.
usami una cortesia, metti questo codice al posto del tuo
For x = 1 To 5
If Controls("TB_Prodotti" & x) = "" Then
MsgBox "Attenzione controlla TextBox, Manca dato", vbCritical, "Controllo dati"
Exit Sub
End If
Next x
For x = 1 To 4
If Controls("Combobox" & x) = "" Then
MsgBox "Attenzione controlla ComboBox, Manca dato", vbCritical, "Controllo dati"
Exit Sub
End If
Next x
e elimina questo
For nTB = 1 To 5
If Me.Controls("TB_Prodotti" & nTB).Value = "" Then
Me.Controls("TB_Prodotti" & nTB).SetFocus
Err.Raise vbObjectError + 513, Description:="inserire " & Me.Controls("TB_Prodotti" & nTB).Name 'modifica
End If
Next nTB
For nComboBox = 1 To 4
If Me.Controls("ComboBox" & nComboBox).Value = "" Then
Me.Controls("ComboBox" & nComboBox).SetFocus
Err.Raise vbObjectError + 513, Description:="inserire " & Me.Controls("ComboBox" & nComboBox).Name 'modifica
End If
Next nComboBox
cosi risolviamo il problema, non ce bisogno di fare il controllo dell'errore, se manca il dato non puoi proseguire nella registrazione
Ciao By Sal (8-D se ti piace la soluzione sostienici con una DONAZIONE a piacere. Grazie clicca qui |
|
05/12/2023 13:00 | |
Ho fatto come suggerito.
Come devo dichiare la x
Dim x As
Inoltre come fare se alcune textbox o combobox non hanno dati inseriti? [Modificato da rex88 05/12/2023 13:26] |
| | Post: 937 | Registrato il: 02/04/2018
| Città: PESCARA | Età: 75 | Utente Senior | EXCEL 2016 - SPREAD32 | | OFFLINE |
|
05/12/2023 13:32 | |
Ciao, mi fa piacere che tu abbia rapidamente appreso a modificare un post
Ora, mentre aspetti la risposta di By_sal, se vuoi, e se mi suggerisci tu, possiamo cambiare il titolo a tutta questa discussione richiamandone tutto il contenuto in poche parole, ripeto, se vuoi
Attenzione:
dopo il prossimo messaggio la discussione aprirà automaticamente una seconda pagina, sempre appartenente a questa discussione [Modificato da L2018 05/12/2023 13:36]
LEO
https://t.me/LordBrum |
|
|