Stellar Blade Un'esclusiva PS5 che sta facendo discutere per l'eccessiva bellezza della protagonista. Vieni a parlarne su Award & Oscar!
 
Pagina precedente | 1 2 3 | Pagina successiva
Vota | Stampa | Notifica email    
Autore

Inserire Dati da Userform a Foglio [RISOLTO - CHIUSA]

Ultimo Aggiornamento: 09/12/2023 13:56
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
OFFLINE
03/12/2023 16:20

Re:
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

Re:
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

Re:
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

Re:
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
Vota:
Amministra Discussione: | Riapri | Sposta | Cancella | Modifica | Notifica email Pagina precedente | 1 2 3 | Pagina successiva
Nuova Discussione
 | 
Rispondi
Cerca nel forum
Tag discussione
Discussioni Simili   [vedi tutte]
Feed | Forum | Bacheca | Album | Utenti | Cerca | Login | Registrati | Amministra
Tutti gli orari sono GMT+01:00. Adesso sono le 07:00. Versione: Stampabile | Mobile | Regolamento | Privacy
FreeForumZone [v.6.1] - Copyright © 2000-2024 FFZ srl - www.freeforumzone.com