Corso VBA Excel ITA - 29 - Interazioni con l'utente

  Рет қаралды 8,258

NickTheGeek

NickTheGeek

Күн бұрын

Пікірлер
@andreavescarelli6208
@andreavescarelli6208 Жыл бұрын
Come al solito, lezione fantastica e molto chiara. Lei è un Benefattore.
@NickTheGeek
@NickTheGeek Жыл бұрын
grazie mille
@AlessandroBasiaco
@AlessandroBasiaco Жыл бұрын
Grazie per l'ottimo corso!
@NickTheGeek
@NickTheGeek Жыл бұрын
Grazie a te per il commento!
@vitogiuseppetoto7595
@vitogiuseppetoto7595 3 жыл бұрын
Ciao Nick, tutto chiaro come sempre. grazie per l'ottimo lavoro svolto.
@NickTheGeek
@NickTheGeek 3 жыл бұрын
Grazie Vito.
@riccardoricky1335
@riccardoricky1335 3 жыл бұрын
ottimo anche questo nuovo video, ho notato che se per sbaglio nel campo "nome" scrivi rik8, quindi inserisci un numero, il ciclo va avanti chiedendo l'età. Probabilmente ci sono dei controlli ulteriori che si possono fare, non so se li spiegherai nei video successivi. Grazie, chiarissimo come sempre
@NickTheGeek
@NickTheGeek 3 жыл бұрын
Non mi sembra che nei video successivi spieghi qualcosa di più specifico sulla validazione del campo; lo farò nel video 85 all'interno del progetto finale. Per fartela breve, al posto della verifica con IsNumeric, puoi usare questa: If nome Like "*[0-9]*" Then In pratica verifica "se esiste un qualsiasi carattere che sia una cifra" (0-9 tra parentesi quadrate) "non importa cosa c'è prima o dopo quel carattere" (asterischi).
@riccardoricky1335
@riccardoricky1335 3 жыл бұрын
@@NickTheGeek grazie
@antonysovy5887
@antonysovy5887 5 жыл бұрын
ottimo! sei molto bravo!
@NickTheGeek
@NickTheGeek 5 жыл бұрын
grazie mille Antony!
@robertobraicovick6867
@robertobraicovick6867 6 жыл бұрын
Grazie Nick!
@NickTheGeek
@NickTheGeek 6 жыл бұрын
Grazie a te Roberto :)
@gianni_carboni
@gianni_carboni 4 жыл бұрын
Però quando, durante l'esecuzione di una macro, la finestra di input viene chiusa dall'utente viene dato errore (quindi non compilata nel modo sbagliato e campo vuoto, ma chiusa nettamente dalla X) la macro va in debug. C'è un modo per evitare anche questa casistica?
@NickTheGeek
@NickTheGeek 4 жыл бұрын
Non riesco a riprodurre l'errore, cioè quando chiude la InputBox mi termina la subroutine senza dare errore, sia cliccando Annulla sia cliccando la x. Puoi scrivermi con che codice ti dà questo errore?
@GIULIOBIRILLO
@GIULIOBIRILLO 4 жыл бұрын
Un altra domanda: Quando clicco su una cella di Excel come posso riconoscere il numero di riga e di colonna e salvarli in due altre celle? Per poi poterle utilizzare in seno al preogramma? Grazie Giulio
@NickTheGeek
@NickTheGeek 4 жыл бұрын
La cella attiva è indicata in VBA con ActiveCell. Quindi, se devi solo usare queste informazioni nel programma, salverei i due valori (riga e colonna) in due variabili: riga = ActiveCell.Row colonna = ActiveCell.Column Ovviamente al posto di riga e colonna puoi usare i nomi che preferisci. Altrimenti, se è necessario che i valori vengano anche scritti nel foglio Excel, sostituisci "riga" e "colonna" con le celle in cui vuoi che vengano scritti, ad esempio se vuoi scriverli in C3 e C5: Cells(3,3) = ActiveCell.Row Cells(5,3) = ActiveCell.Column
@davidecongiu6173
@davidecongiu6173 3 жыл бұрын
Ciao Nick! Domandina: se uso una variabile dichiarata come VARIANT per memorizzare un numero attraverso un inputbox, la variabile verifica la condizione ISNUMERIC? O viene considerata come una stringa?
@NickTheGeek
@NickTheGeek 3 жыл бұрын
Ciao Davide. Sì, la funzione isnumeric viene verificata indipendentemente dal tipo di variabile.
@martinagrusovin14
@martinagrusovin14 5 жыл бұрын
Ciao, una domanda, ma se voglio interrompere l'immissione di dati prima dei 2 previsti dall'esempio del range che hai messo tu? Con l'"annulla" non funziona... come faccio ad attivarlo? Cioè come faccio a mettere in pausa l'inserimento dei dati e poi partire da dove ho smesso? grazie
@NickTheGeek
@NickTheGeek 5 жыл бұрын
Ciao, per quanto ne so non puoi, tramite codice, sospendere una subroutine per poi riprenderla dallo stesso punto. Per fare quello che chiedi servono un po' di modifiche. Intanto serve l'istruzione che premendo Annulla o ESC ti fa uscire dalla Sub: If StrPtr(nome_della_variabile_di_riferimento) = 0 Then Exit Sub messa subito dopo l'InputBox. Quindi il codice del video (minuto 10:09) diventerebbe: Sub interazioni() For i = 2 To 4 nome = InputBox("Nome " & i - 1) If StrPtr(nome) = 0 Then Exit Sub anni = InputBox("Anni " & i - 1) If StrPtr(anni) = 0 Then Exit Sub Cells(i, 2) = nome Cells(i, 3) = anni Next i End Sub In questo modo, quando l'inputbox è aperta, se viene intercettato Annulla oppure Esc si chiude la Sub. Per riprendere dal punto di interruzione bisogna modificare tutto il codice, in modo che innanzitutto venga verificato qual è l'ultima cella compilata, e quindi partire da quella successiva. Qualcosa del tipo: Sub interazioni() ultima_riga = Cells(Rows.Count, "B").End(xlUp).Row If Cells(ultima_riga, 3) = "" Then ultima_colonna = 2 inizio = ultima_riga Else ultima_colonna = 3 inizio = ultima_riga + 1 End If For i = inizio To 4 If ultima_colonna = 2 Then GoSub anni nome = InputBox("Nome " & i - 1) If StrPtr(nome) = 0 Then Exit Sub Cells(i, 2) = nome anni: anni = InputBox("Anni " & i - 1) If StrPtr(anni) = 0 Then Exit Sub Cells(i, 3) = anni ultima_colonna = 3 Next i End Sub Detto in italiano: 1) verifica qual è l'ultima riga compilata nella colonna B 2) se la colonna C della stessa riga è vuota, allora l'ultima colonna compilata è la B (riga non completata), altrimenti è la C (riga completata) 3) viene assegnato un valore alla variabile "inizio", che servirà dopo nel ciclo FOR: se l'ultima colonna compilata è la B, significa che manca un pezzo della stessa riga, quindi "inizio" è uguale all'ultima riga scritta (riga non completata = si ricomincia dalla stessa riga); se invece l'ultima colonna compilata è la C, significa che quella riga è stata compilata completamente, quindi alla variabile "inizio" deve essere assegnato il valore corrispondente alla riga successiva (riga completata = si parte da quella sotto) 4) parte il ciclo FOR, che va da "inizio" a 4 (perché nel video ho solo 4 righe) 5) se l'ultima colonna scritta è la B, allora salta l'inputbox "nome" e passa direttamente a quella "anni" (ho usato la label "anni" per fare il rimando con GoSub anni) 6) per entrambe le inputbox, il comportamento non cambia rispetto al video, se non che ho aggiunto le linee per intercettare Annulla o ESC 7) dopo aver compilato la cella degli anni, ho anche impostato il valore di ultima_colonna a 3 per indicare che la riga è completa, non sono sicuro al 100% che serva, ma non ho fatto tutti i test necessari Così dovrebbe funzionare, fammi sapere.
@martinagrusovin14
@martinagrusovin14 5 жыл бұрын
@@NickTheGeek Perfetto, grazie!
@marcogiorgetti2003
@marcogiorgetti2003 4 жыл бұрын
Ciao Nick ho provato a fare l' esempio del nome/età in maniera diversa e mi interessava avere un tuo parere. Dove potrei inviarti la macro?
@NickTheGeek
@NickTheGeek 4 жыл бұрын
Ciao Marco, puoi provare a incollare la macro qui nei commenti
@larapaga2374
@larapaga2374 6 жыл бұрын
Salve Nick,Scusa se ti chiedo ancora delle cose. Come faccio con codice VBA a tornare alla cartella precedente. Il problema è che arrivo a una cartella riepilogo clienti da diverse cartelle per eseguire modifiche o altro però dopo vorrei tornare alla cartella precedente con codice e non col tasto ritorno di exel. E' possibile?
@NickTheGeek
@NickTheGeek 6 жыл бұрын
Ciao, se ho capito bene vorresti saltare da un file all'altro, quindi diciamo che vuoi passare dal File1.xlsm al File2.xlsm, e poi tornare indietro. Quando sei sul File1, prima di passare al File2 scrivi: nome = ActiveWorkbook.Name in questo modo registri nella variabile "nome" il nome del file attuale (File1) Poi passi al file2 in questo modo: Workbooks("File2.xlsm").Activate Quindi fai quello che devi fare sul File2, e per tornare indietro al File1 scrivi: Workbooks(nome).Activate In pratica utilizzi due volte Activate, ma la prima volta indichi esplicitamente il nome del file (File2.xlsm), mentre la seconda utilizzi la variabile "nome", in modo da tornare alla cartella precedente, qualsiasi essa sia, perché in precedenza avevi assegnato alla variabile "nome" il nome della cartella stessa. Non so se sono stato chiaro, fammi sapere. Ciao
@larapaga2374
@larapaga2374 6 жыл бұрын
Grazie hai centrato esattamente il mio quesito ed hai risposto con estrema chiarezza. Questo è molto utile per me. Chiaramente quel(nome) posso cambiarlo con qualsiasi altra parola? Ciao Giulio
@NickTheGeek
@NickTheGeek 6 жыл бұрын
Ottimo! Sì certo puoi assegnare alle variabili il nome che preferisci.
@pincopanco131
@pincopanco131 4 жыл бұрын
Mi sono letto anche i commenti per vedere se era già stata trattata la domanda che vorrei farti. Posso chiamarti prof? Cmq ritornando al passaggio di variabili tramite inputbox, la input box restituisce un valore stringa? Nel momento che dichiari anni integer, quando nella cella vai a mettere il valore della variabile 23 sarà un numero o una stringa?
@NickTheGeek
@NickTheGeek 4 жыл бұрын
No non occorre che mi chiami prof :-D In questo caso è Integer proprio perché l'ho dichiarato Integer all'inizio; te ne accorgi anche perché se nella inputbox inserisci una stringa ti dà errore di tipo non corrispondente; se non avessi dichiarato la variabile, allora di default il contenuto della inputbox sarebbe String. Puoi vedere il tipo di una variabile tramite la funzione VarType, che ti restituisce un numero da cui puoi risalire al tipo tramite questa tabella: docs.microsoft.com/en-us/office/vba/language/reference/user-interface-help/vartype-function Se ad esempio, in questo video, dopo la inputbox degli anni avessi scritto: MsgBox VarType(anni) avrei avuto una msgbox con scritto 2 (cioè Integer); senza la dichiarazione iniziale avrei avuto come valore 8 (cioè String)
@pincopanco131
@pincopanco131 4 жыл бұрын
@@NickTheGeek non ti chiamo prof... ma per come spieghi potresti fare il prof Lo ripeto perché ho paura che cambi. I tuoi video sono lunghi e possono risultare noiosi e scontati . Ma solo per chi va di fretta o non vuole approfondire l argomento. Ma per chi vuole "imparare"... sei perfetto. Non cambiare. Ma se proprio devi a causa di visibilità e visualizzazioni fanne 2. 2 video per argomento. Versione breve e versione professional Ricordo una youtuber che faceva così con i suoi 3 video. Uno in italiano uno in inglese e l altro in polacco mi sembra. Ti auguro di fare tante visualizzazioni in modo da permetterti di fare sempre più video sperando che farai video su qualche linguaggio piu professionale tipo Java o c# o altro. P.s. ho bisogno di imparare a utilizzare le Api interfacciandola con qualche linguaggio più professionale. Per questo mi sto facendo un overdose di te. Per padroneggiare i concetti/basi di programmazione. Ho cercato ma non ho trovato niente. Non pretendo una risposta... ma se sai dove posso cercare mi faresti un favore. A breve parecchi perderanno il lavoro. Ma alcuni di loro trasformeranno questo periodo in trampolini di lancio per qualcosa di nuovo. E ti ringrazio te e quelli come te che condividono la propria conoscenza con gli altri senza chiedere niente in cambio 🤗 Ma se ti trovi dalle mie parti una pizza te la offro volentieri 😜
@NickTheGeek
@NickTheGeek 4 жыл бұрын
non riuscirei mai a fare versioni diverse dello stesso video, richiederebbe troppo tempo e non saprei nemmeno dove porre il limite dell'una e dell'altra; grazie per l'augurio di avere più visualizzazioni, ma mi accontento di quelle che faccio ora, alla fine lo faccio anch'io come passatempo e non ho obiettivi particolari; dopo la playlist su VBA vorrei iniziare una nuova serie su Python, ma ne parleremo dopo l'estate; per quanto riguarda le API, se devi programmarle il discorso è piuttosto complesso e non saprei esserti utile, se invece devi estrarre dati utilizzando API già programmate da altri, allora penso che qualsiasi linguaggio di programmazione completo (C e suoi derivati, Java, Python, etc.) possa fare al caso tuo. Se hai intenzione di approfondire un linguaggio, prima verifica quanto questo possa essere indicato per il suo utilizzo con delle API. Grazie per l'offerta della pizza, non penso che ne usufruirò ma non si sa mai ;)
@pincopanco131
@pincopanco131 4 жыл бұрын
@@NickTheGeek devo usare api sviluppate da altri. Devo solo estrarre dati. Aspetterò il tuo videocorso su python allora :)
@paolog.3461
@paolog.3461 4 жыл бұрын
Eh si mi sa che il problema degli ultimi due video erano i tanti annidamenti! Questo l'ho capito e sono stato in grado di riprodurlo senza guardare! Una curiosità la variabile "anni" nel dichiararla potevo anche non specificare nulla perchè in quel modo sarebbbe stata considerata una "variant" di default giusto?
@NickTheGeek
@NickTheGeek 4 жыл бұрын
esatto, sarebbe Variant
@mirkostilla2888
@mirkostilla2888 4 жыл бұрын
Ciao, la macro vale se inserisco nome ed età tutti in una volta. Ma se volessi inseriere il nome e l'età in un momento e i siccessivi dati in un altro momento, sarebbe possibile?
@NickTheGeek
@NickTheGeek 4 жыл бұрын
Ciao Mirko, in questo caso non potresti usare un ciclo For, ma dovresti calcolare all'inizio la prima riga vuota disponibile: prima_riga_vuota=Cells(Rows.Count, "B").End(xlUp).Row + 1 (ho usato la colonna B perché nel video è una delle due che si riempie man mano che vengono scritti dati, quindi è utile come riferimento) e quindi sostituire a ogni variabile "i" la variabile "prima_riga_vuota". Poi dovrai lanciare la macro ogni volta che vorrai inserire una coppia di valori (nome/età). Non usando il ciclo For, devi cancellare le due righe: For i = 2 to 4 Next i Non ho provato ma credo funzioni.
@mirkostilla2888
@mirkostilla2888 4 жыл бұрын
@@NickTheGeek Grazie proverò!
@nickfont84
@nickfont84 4 жыл бұрын
Ciao Nicola, ho replicato il codice, mi potresti aiutare a gestire l'errore "inserimento di uno spazio" ? cioè..premo la barra spaziatrice ed esce..
@NickTheGeek
@NickTheGeek 4 жыл бұрын
Ciao, scusa ma non ho capito, quando premi la barra spaziatrice esce un errore o esce dal programma?
@nickfont84
@nickfont84 4 жыл бұрын
@@NickTheGeek Esce dal programma. Gestisce bene l'inserimento di numeri/lettere non consentiti. Mente quando voglio riempire la variabile con "spazio vuoto", la procedura di inserimento termina e torna al codice sorgente.
@NickTheGeek
@NickTheGeek 4 жыл бұрын
Quindi nella input box inserisci uno spazio, e ancor prima di premere OK ti esce dalla subroutine?
@nicolafontana7862
@nicolafontana7862 4 жыл бұрын
@@NickTheGeek no, premo invio.. Per vedere se gestisce anche questo errore.. Ed esce.. Non gestisce l'errore
@NickTheGeek
@NickTheGeek 4 жыл бұрын
Ok, allora per fargli gestire l'errore devi inserire nel codice la condizione: If nome = " " Then ... cioè devi inserire uno spazio tra le virgolette
@larapaga2374
@larapaga2374 6 жыл бұрын
Ciao Nick una domanda? Range("C4").Select ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:="..\MONTI", _ TextToDisplay:="ROSSI ANTONIO" Selection.Hyperlinks(1).Address = "..\TURISTI\ROSSI\ROSSI ANTONIO.xlsm" I nomi del percorso possono essere cambiati in Celles che contengono i valori tipo B1 ,B2, B3, coi nomi spesifici che cambiano a seconda del turista su cui sto lavorando? Questo mi servirebbe per creare un collegamento ipertestual automatico da codice
@NickTheGeek
@NickTheGeek 6 жыл бұрын
ti ho risposto nell'altro commento
@larapaga2374
@larapaga2374 6 жыл бұрын
Salve Nick,Vorrei che mi spiegassi come fare apparire nell'inputbox il valore di una cella exel in modo da dare l'ok se il valore ci sta bene oppure scriverne un altro. Es. il mio programma ha già assegnato un numero di camera che è già nella scheda exel del cliente. vorrei visualizzarlo nella parte imput in blu in modo da dire ok mi sta bene oppure mettere un altro numero a piacere mio e dare ok. Come scrivo la mia InputBox per fare apparire questo numero che è già in una cella. Spero tu abbia capito anche se non mi spiego molto tecnicamente. Grazie Giulio
@NickTheGeek
@NickTheGeek 6 жыл бұрын
Ciao Giulio. In generale, per far comparire un valore predefinito nella InputBox devi usare il terzo argomento della funzione (il secondo è il titolo della casella), quindi se nella cella A1 c'è il numero di camera, per farlo comparire nella InputBox devi scrivere queste due righe: numero_camera = Cells(1,1) numero_camera_confermato = InputBox("numero di camera", , numero_camera) La prima riga assegna il numero della camera alla variabile numero_camera. La seconda riga assegna alla variabile numero_camera_confermato il valore presente nella InputBox dopo aver premuto OK. Dopo che compare la InputBox con il numero già valorizzato puoi confermarlo con OK, oppure modificarlo e quindi premere OK. Per sovrascrivere il valore nuovo a quello vecchio (potenzialmente rimasto uguale se non hai modificato il testo della InputBox), aggiungi una terza riga: Cells(1,1) = numero_camera_confermato Ho lasciato vuoto il secondo argomento della InputBox, ma puoi metterci il titolo della finestra se vuoi (sempre tra virgolette). Ovviamente i nomi delle variabili e degli argomenti della InputBox sono a piacere. Mi chiedo però: come sono le schede Excel dei clienti (una scheda per ogni file? o un unico file con una scheda per foglio?)? Con che modalità deve aprirsi la InputBox (lanci la macro tramite un pulsante? entri nel codice e lanci la macro da lì? o fa parte di una macro più ampia?)? Mostra meno
@larapaga2374
@larapaga2374 6 жыл бұрын
Grazie Nick proverò come dici tu e poi ti farò sapere. Poi non lo userò solo per il numero camera ma anche per la caparra, acconti o saldo. e anche per altre cose del cliente. Ogni scheda ha un cliente e le schede hanno diversi fogli :con un menu a immagini selezionabili per accedere ai vari fogli. I fogli contengono: uno i dati personali il periodo di vacanza , numero persone con eta dei bimbi (fino a 4 anni non pagano) , uno le consumazioni bar e cene, uno la fattura finale o la ricevuta ecc... Poi c'è una scheda riepilogo dalla quale ci si può collegare direttamente alla scheda cliente (questo l'ho fatto col collegamento ipertestuale che però non mi piace molto, credo che con vba si possa accedere in altro modo più semplice ma devo ancora scoprirlo) Le mie macro sono un misto di macro automatiche con inseriti codici manuali vba e le lancio sempre comunque da un immagine da me creata con assegnazione macro. Devo dire che tu sei molto chiaro e semplice nelle tue spiegazioni ma per digerirle tutte ho bisogno di assimilarle piano piano. Devi sapere che ero programmatore a 20 anni e lavoravo con cobol e assemblaggi. Per 40 anni non ho più praticato e adesso a 74 anni cerco di gestire la mia attività con programma fatto da me perchè non mi piacciono quelli che vendono; non sono su misura. Ti ringrazio ancora per il tempo che ti faccio perdere A presto Giulio
@NickTheGeek
@NickTheGeek 6 жыл бұрын
Mi fa piacere che i miei video abbiano anche un'utilità pratica, e non mi fai assolutamente perdere tempo. Ma quando parli di assemblaggi intendi assembly? Mi sembra di capire che la soluzione migliore con cui potresti gestire il tutto attraverso VBA sono le userform, di cui parlerò a partire dal video 61; in pratica sono delle inputbox più complesse, con cui puoi gestire diversi tipi di controlli (caselle di testo, menu a tendina, pulsanti, etc...) in una maschera tipo quella di un normale software, ma sempre all'interno di Excel. Per quanto riguarda il passaggio dalla scheda riepilogo alla scheda cliente, direi che il link ipertestuale va bene, se vuoi farlo in VBA potresti usare un pulsante anziché il link, ma alla fine non cambierebbe molto. Comunque con le userform forse ti verrà anche qualche altra idea al riguardo. Nel frattempo se hai dubbi specifici scrivimi pure.
@larapaga2374
@larapaga2374 5 жыл бұрын
Grazie per le risposte. Ho ancora problemi per il collegamenti di file con altre cartelle: Per esempio se da un elenco di clienti voglio cliccare su di uno e aprire la sua cartella e poi il suo foglio excel quali sono le istruzioni? Allora clicco sul nome del cliente e attivo il programma che copia il nome in una cella "nome" che è in una cartella che ha il nome del cliente cosa devo fare: Devo scrivere tutto il percorso Es:Workbooks( "C/:Documents and Settings/Documenti/Giulio/Clienti 2019/Cartella/nome.xlsm").Activate Così mi dà sempre errore Debag Ho scritto anche Dim nome as variant Dim cartella as variant Forse sbaglio usando la barra che è sopra il 7 invece di quella rovescia nel primo tasto della tastiera? Mi puoi dare una spiegazione chiara. Certo è difficile l'uso esatto delle parole delle maiscole dei simboli. C'è un libro o un sito dove trovo i codici di VBA spiegati in modo chiaro? Non so dove sbaglio? Ti ringrazio se mi puoi aiutare. Ciao Giulio
@NickTheGeek
@NickTheGeek 5 жыл бұрын
Ciao Giulio, ti rispondo nell'altro commento (quello con il codice)
@paoloantoniobarbarisi1997
@paoloantoniobarbarisi1997 6 жыл бұрын
ciao scusa se ti disturbo volevo sapere se tu eri ingrado di svolgere degi integrali su VBA, e se magari potevi farmi un tutorial..o semplicemente spiegarmelo velocemente..Grazie infinite!
@NickTheGeek
@NickTheGeek 6 жыл бұрын
Ciao, no mi dispiace non saprei come risolvere un integrale in VBA, immagino che sarà necessario scrivere una funzione piuttosto complessa.
@larapaga2374
@larapaga2374 6 жыл бұрын
CORREGGO LA MIA DOMANDA ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:="..IROSSI ANTONIO", _ TextToDisplay:="ROSSI ANTONIO" Selection.Hyperlinks(1).Address = "..\TURISTI\ROSSI\ROSSI ANTONIO.xlsm" I nomi DEL PERCORSO possono essere cambiati in Celles che contengono i valori tipo B1 ,B2, B3, coi nomi spesifici che cambiano a seconda del turista su cui sto lavorando? Questo mi servirebbe per creare un collegamento ipertestual automatico da codice
@NickTheGeek
@NickTheGeek 6 жыл бұрын
Ciao Giulio, non conosco queste istruzioni quindi non saprei come riprodurle, ma a occhio direi che nel tuo esempio potresti scrivere: in B1 ..\ROSSI ANTONIO in B2 ROSSI ANTONIO in B3 ..\TURISTI\ROSSI\ROSSI ANTONIO.xlsm quindi il codice diventerebbe ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:=Range("B1"), TextToDisplay:=Range("B2") Selection.Hyperlinks(1).Address = Range("B3") però non riesco a verificarlo quindi fammi sapere se così funziona
@stefanoagostini8292
@stefanoagostini8292 4 жыл бұрын
Ciao Nick. Grazie per il corso, mi piace molto. Ho una domanda: ho un file excel con 4 fogli di lavoro. Nel secondo foglio ho inserito un bottone che attiva un algoritmo che va a fare dei controlli su una tabella che si trova sul foglio uno. Fin qui tutto ok! Sempre attraverso questo codice, ho tentato di contare le rghe della tabella del Foglio uno, ma ahimè mi conta le righe del foglio 2. Non capisco perché. Il primo foglio si chiama TABELLA GENERALE. I secondo FREQUENZE E RITARDI Ecco il codice che ho inserito: Worksheets("TABELLA GENERALE").Activate ULTIMA_RIGA = WorksheetFunction.Count(Columns(3)) ULTIMA_RIGA = Cells(Rows.Count, "C").End(xlUp).Row PS - ho provato con entrambe le istruzioni.... Mi ritorna sempre il numero di righe della tabella nel foglio 2, cioè FREQUENZE E RITARDI e non quelle del primo foglio TABELLA GENERALE. Grazie in anticipo!!!
@NickTheGeek
@NickTheGeek 4 жыл бұрын
Ciao Stefano, grazie per seguirmi. Questo problema mi sembra molto strano. Hai provato a lanciare la macro con F8 per vedere se effettivamente dopo l'istruzione Activate il foglio attivo è quello che ti interessa? Eventualmente, subito dopo l'activate metti questa istruzione: MsgBox (ActiveSheet.Name) così vedi qual è il foglio considerato attivo in quel momento. Come metodi per calcolare l'ultima riga io uso sempre il secondo, cioè ULTIMA_RIGA = Cells(Rows.Count, "C").End(xlUp).Row però qui potresti modificare con ULTIMA_RIGA = ActiveSheet.Cells(Rows.Count, "C").End(xlUp).Row In pratica aggiungi ActiveSheet prima di Cells, in modo da essere sicuro che il conteggio venga fatto sul foglio attivo. In ogni caso normalmente non è necessario specificarlo, quindi non capisco dove possa essere il problema. Fammi sapere, casomai ti chiederò di mandarmi il file.
@stefanoagostini8292
@stefanoagostini8292 4 жыл бұрын
@@NickTheGeek lo farò domani. Posso solo anticiparti che "sì", si attiva il primo foglio, ma la macro effettua stranamente il conteggio sul secondo foglio. Ancora grazie 1000. Ciao.
@stefanoagostini8292
@stefanoagostini8292 4 жыл бұрын
@@NickTheGeek ciao!! Eccomi qui con una risposta alle nostre perplessità. Per prima cosa, ti confermo che la MACRO si posiziona nel primo foglio ma che poi erroneamente conteggia le righe della tabella presente nel secondo foglio, forse perchè la MACRO corrisponde ad un bottone che si trova nel secondo foglio (?). Chiaramente, abbiamo trovato un BACO! Infatti, se nella MACRO inserisco queste righe di codice : Worksheets("TABELLA GENERALE").Activate MsgBox (ActiveSheet.Name) ULTIMA_RIGA = WorksheetFunction.Count(Worksheets("TABELLA GENERALE").Columns(3)) ULTIMA_RIGA = ActiveSheet.Cells(Rows.Count, "C").End(xlUp).Row ...ove la seconda istruzione l'ho modificata io puntando esplicitamente al primo foglio, mentre la terza è quella che mi hai suggerito tu ove compare in più la ACTIVESHEET, tutto funziona magicamente !!!!! Problema non risolto, ma aggirato! Grazie Nick! Ciao e a presto.
@NickTheGeek
@NickTheGeek 4 жыл бұрын
Hai scritto il codice VBA all'interno di un foglio specifico? In questo caso l'istruzione si riferisce sempre a quel foglio, non importa quale sia quello attivo. Ti consiglio sempre di mettere il codice in moduli separati dai fogli
@nickfont84
@nickfont84 4 жыл бұрын
Aiuto... Nicola, mi da un errore nel "loop while" alla fine. Sub InserisceInputNumerico() 'inserisce una sequenza di dati numerici Dim inputUtente As String ' a partire da A1 Dim ok As Boolean Dim I As Integer I = 1 Do inputUtente = InputBox(" Inserisci un dato numerico." & Chr(13) & _ "N.B. per terminare non inserire niente e premere OK", "ACQUISISCE INPUT NUMERICO DA TASTIERA", _ "", 500, 800) If IsNumeric(inputUtente) = False Then ' se accedo qui e’ x 2 motivi: ' a. dato non numerico ' b. dato vuoto (lunghezza = 0) (questo caso non lo considero ma terminera’ il ciclo) If Len(inputUtente) > 0 Then MsgBox " Il dato inserito " & inputUtente & " non e’ "" numerico """ Else Cells(I, 1).Value = CStr(inputUtente) ' input pieno, inserisce il dato I = I + 1 End If Loop While inputUtente "" End Sub
@NickTheGeek
@NickTheGeek 4 жыл бұрын
Non so che errore ti dia, però mi sembra che ci sia un problema con l'Else, perché non si capisce a quale If si riferisca: 1) se è riferito al primo If (come credo), allora il secondo If deve stare su una sola riga, oppure devi aggiungere un End If subito dopo la msgbox "il dato inserito non è numerico" 2) se è riferito al secondo If (dubito) allora manca un End If alla fine
@nickfont84
@nickfont84 4 жыл бұрын
@@NickTheGeek l'errore che mi viene fuori è: "loop senza do"
@NickTheGeek
@NickTheGeek 4 жыл бұрын
visto che il Do c'è, allora dipende dalla mancanza di un End If, hai provato a sistemare come ti ho scritto?
@nickfont84
@nickfont84 4 жыл бұрын
@@NickTheGeek provato e risolto!!! Grazie mille!!! Bravissimo e gentilissimo!!! Per la cronaca..stavo replicando il codice scritto da un docente universitario!! :D
@NickTheGeek
@NickTheGeek 4 жыл бұрын
Di niente figurati
@Max_sbk12
@Max_sbk12 5 жыл бұрын
Nel video 23 quando hai spiegato la prima volta la funzione DO/WHILE LOOP utilizzavi negli esempi una sintassi dove il ciclo iniziava con "DO WHILE" e poi il "LOOP" in chiusura, contrariamente a questo esempio in cui hai scritto DO e poi in chiusura LOOP WHILE. C'è una ragione? Una diversa proprietà di funzione? Grazie sei B R A V I S S I M O !!!!!!!!
@NickTheGeek
@NickTheGeek 5 жыл бұрын
Ciao Max, grazie per i complimenti. I cicli DO WHILE... LOOP (video 23) e DO... LOOP WHILE (video 25) sono diversi: il primo serve a fare un ciclo iniziando subito a verificare una condizione (DO WHILE), quindi se la condizione è già falsa in partenza, il ciclo non viene eseguito nemmeno una volta; con il secondo, invece, il ciclo viene eseguito sempre almeno una volta (DO), e la condizione entra in gioco solo per le iterazioni dalla seconda in poi; in questo video (29) mi serviva che la maschera con la richiesta del nome venisse proposta almeno una volta, quindi ho utilizzato il ciclo DO... LOOP WHILE.
@Santigliana96
@Santigliana96 4 жыл бұрын
Ho un problema. Devo inserire due date su più fogli. Mi sono bloccato.
@NickTheGeek
@NickTheGeek 4 жыл бұрын
Mi dovresti fare un esempio pratico perché non ho ben capito cosa vorresti fare.
@Santigliana96
@Santigliana96 4 жыл бұрын
fogli nr 12 corrispondenti ai mesi - in ogni foglio, tra le altre, ho due celle per l'inserimento di una data iniziale e una finale per calcolare la spesa media del periodo.
@Santigliana96
@Santigliana96 4 жыл бұрын
Colgo l'occasione per rifarti i complimenti. Mi sto affascinando sempre più a vba. grazie
@NickTheGeek
@NickTheGeek 4 жыл бұрын
Grazie per i complimenti. Quindi vuoi usare una inputbox che deve comparire 24 volte, cioè 2 volte per ogni foglio? E a ogni coppia devi cambiare foglio dove scrivere?
@GIULIOBIRILLO
@GIULIOBIRILLO 4 жыл бұрын
Anche il mio pc ha avuto un virus e ho dovuto riscrivere alcuni programmi Adesso non so se questa serie di istruzioni si può scrivere in un unica istruzione visto che sono celle adiacenti:: Cells(1, 1) = Cells(nriga, 1) Cells(1, 2) = Cells(nriga, 2) Cells(1, 3) = Cells(nriga, 3) Cells(1, 4) = Cells(nriga, 4) Cells(1, 5) = Cells(nriga, 5) Cells(1, 6) = Cells(nriga, 6) Cells(1, 7) = Cells(nriga, 7) Forse c'è una tua lezione sull'argomento ma ora nonn la trovo. Ti sarei grateo se mi rammenti l?istruzione unica o la lezione sull'argomento. Grazie Giulio
@NickTheGeek
@NickTheGeek 4 жыл бұрын
Ciao Giulio, potresti usare un ciclo For: For i = 1 to 7 Cells(1,i) = Cells(nriga,i) Next i In pratica la riga centrale viene ripetuta 7 volte, e ogni volta cambia il valore di i, incrementandolo da 1 a 7. Ne parlo nel video 20.
@larapaga2374
@larapaga2374 5 жыл бұрын
Ho provato anche queste istruzioni ma non funzionano Sub SALTI() ' ' SALTI Macro ' ' Selection.Copy Range("A1").Select ActiveSheet.Paste Dim nome As Variant Dim Cartella As Variant Cartella = Cells(1, 1) nome = Cells(1, 1) ChDir _ "C:\Documents and Settings\federica\Documenti\DOCUMENTI 1\AA GULIA\AGANYA 2019\cartella.XLS" Workbooks.Open Filename:= _ "C:\Documents and Settings\federica\Documenti\DOCUMENTI 1\AA GULIA\AGANYA 2019\FAVARO ome.xlsm" End Sub
@NickTheGeek
@NickTheGeek 5 жыл бұрын
Ciao, quello che stai tentando di fare è corretto, ma ci sono un paio di problemi: 1) l'istruzione ChDir vuole come argomento una cartella, mentre tu hai indicato un file (cartella.XLS); dato che comunque nella riga successiva usiamo un riferimento assoluto scrivendo tutto il percorso del file, la riga con ChDir puoi direttamente cancellarla 2) è corretto salvare nelle variabili "cartella" e "nome" il nome del cliente, se sia la cartella che il file si chiamano così; però poi hai scritto "nome.xlsm", quindi il programma cerca un file che si chiama esattamente "nome.xlsm", e non lo trova; dato che il contenuto delle variabili "cartella" e "nome" è (appunto) variabile, c'è solo una parte del percorso che è fissa (cioè fino a AGANYA 2019), mentre gli ultimi due pezzi (la cartella e il nome) cambiano di volta in volta; il codice da scrivere al posto dell'ultima riga è: Workbooks.Open Filename:= _ "C:\Documents and Settings\federica\Documenti\DOCUMENTI 1\AA GULIA\AGANYA 2019\" & cartella & "\" & nome & ".xlsm" Il simbolo "&" in VBA serve a concatenare una stringa fissa (cioè tutto quello scritto tra virgolette) con una variabile (tutto quello che non è scritto tra virgolette). Tradotto in italiano, significa: prendi il percorso che si chiama "C:\Documents and Settings\federica\Documenti\DOCUMENTI 1\AA GULIA\AGANYA 2019\", aggiungi il nome della cartella, aggiungi la \, aggiungi il nome del file, infine aggiungi l'estensione .xlsm In questo modo ottieni il percorso completo che ti serve, quindi se in A1 hai scritto Rossi, il percorso è: "C:\Documents and Settings\federica\Documenti\DOCUMENTI 1\AA GULIA\AGANYA 2019\Rossi\Rossi.xlsm" Fammi sapere se è tutto chiaro; gli unici libri che conosco sono quelli della serie "Power Programming with VBA", di John Walkenbach; non so se esistono traduzioni in italiano. Per quanto riguarda quello che ho scritto in questo commento, ti consiglio anche di guardare il mio video 53, Gestione dei file Excel tramite VBA.
@larapaga2374
@larapaga2374 5 жыл бұрын
La tua risposta è chiara come sempre . Adesso è tardi domani provo e poi ti dico. Intanto Grazie! Giulio
@larapaga2374
@larapaga2374 5 жыл бұрын
Sto diventando matto perchè: In un programma ho un collegamento ipertestale in una cella, lo copio e lo incollo in un altra cartella di lavoro da istruzione vba e resta perfetto Invece in un altro programma faccio la stessa cosa col collegamento iper.. ma il pc mi cambia indirizzo es1. il percorso ...../ clienti/italiani/rossi/rossi.xlms poi incollo in una cartella ""Varie"" dove c'è una cartella " riepilogo di clienti " e mi mette il rossi nella catrella"varie" così..../clienti/italiani/varie/rossi.xlms In certi casi non lo fa anche cambiando cartella e così non capisco cosa sbaglio. Anche Incollando in un altra cartella vorrei che rimanesse sempre il percorso originale come in es1 Il copia incolla è nelle istruzioni da programma vba sia nel programma che mantiene il percorso giusto sia in quello che me lo cambia per cui non capisco la differenza. Non so se mi sono spiegato bene : Spero solo che tu possa risolvermi questo problema. Grazie Giulio
@NickTheGeek
@NickTheGeek 5 жыл бұрын
Ciao, il problema è strano soprattutto perché non ti succede sempre. Come fai il copia incolla? Dai direttamente una istruzione per il copia e una per l'incolla? In tal caso, prova invece a salvare il contenuto del percorso in una variabile, e poi usala per "incollare" il percorso dove ti serve
@claraferlenghi9552
@claraferlenghi9552 4 жыл бұрын
Buongiorno, grazie anche per questo video! Ho un problema di compilazione, ho seguito il tuo codice passo-passo, Option Explicit Sub interazioni() Range("b2:c4").ClearContents Dim nome As String Dim anni As Integer Dim i As Integer For i = 2 To 4 Do nome = InputBox("Inserisci il tuo nome " & i - 1) If IsNumeric(nome) Or nome = "" Then MsgBox ("Digita un nome!!") End If Loop While IsNumeric(nome) Or nome = "" Do anni = InputBox("Digita l'età " & i - 1) If Not IsNumeric(anni) Or anni = "" Then MsgBox ("Digita un'età valida!!!") End If Loop While Not IsNumeric(anni) Or anni = "" Cells(i, 2) = nome Cells(i, 3) = anni Next i End Sub Ma il controllo dell'età non funziona, sai dirmi gentilmente come mai? Mi dà il messaggio "errore di runtime 13, incongruenza di tipo", quindi come se non funzionasse il controllo sull'età.. grazie :)
@NickTheGeek
@NickTheGeek 4 жыл бұрын
Ciao, il problema deriva dal fatto che qualsiasi cosa venga scritta nella inputbox viene considerata una stringa; dato che inizialmente la variabile "anni" è stata dichiarata come integer, ti dà errore; dovresti dichiararla come Variant, come mostro intorno al minuto 22. Fammi sapere se è chiaro.
@claraferlenghi9552
@claraferlenghi9552 4 жыл бұрын
@@NickTheGeek Sistemato, grazie mille!!!
@larapaga2374
@larapaga2374 6 жыл бұрын
il torna indietro l'ho già applicato al mio programma. E' fantastico funziona perfettamente dandogli il Dim nomecartella as variant. Quando sarai stanco delle mie domande dimmelo. Potrei ricambiare invitandoti nel mio villaggio in Grecia www.mediterraneosconosciuto.com per 1 settimana in qualsiasi periodo ma non in Agosto Grazie ancora Giulio
@NickTheGeek
@NickTheGeek 6 жыл бұрын
Perfetto, la variabile puoi dichiararla anche come String se vuoi (contiene solo il nome del file). Non preoccuparti, quando posso cerco sempre di rispondere :) e grazie mille per l'offerta, ma non occorre ricambiare, sono qui anche per rispondere ai commenti oltre che per fare i video.
Corso VBA Excel ITA - 30 - Matrici
23:29
NickTheGeek
Рет қаралды 10 М.
Corso VBA Excel ITA - 31 - Matrici multidimensionali
33:52
NickTheGeek
Рет қаралды 8 М.
Tuna 🍣 ​⁠@patrickzeinali ​⁠@ChefRush
00:48
albert_cancook
Рет қаралды 148 МЛН
Мен атып көрмегенмін ! | Qalam | 5 серия
25:41
My scorpion was taken away from me 😢
00:55
TyphoonFast 5
Рет қаралды 2,7 МЛН
Quando A Diferença De Altura É Muito Grande 😲😂
00:12
Mari Maria
Рет қаралды 45 МЛН
Corso VBA Excel ITA - 21 - Cicli annidati
21:33
NickTheGeek
Рет қаралды 10 М.
Corso VBA Excel ITA - 22 - Combinazioni For/If
22:55
NickTheGeek
Рет қаралды 11 М.
Corso VBA Excel ITA - 27 - Caso reale (pulizia dati)
38:40
NickTheGeek
Рет қаралды 10 М.
Corso VBA Excel ITA - 28 - Caso reale (esercizio)
30:49
NickTheGeek
Рет қаралды 8 М.
Corso VBA Excel ITA - 26 - Ciclo For Each... Next
30:31
NickTheGeek
Рет қаралды 11 М.
Tuna 🍣 ​⁠@patrickzeinali ​⁠@ChefRush
00:48
albert_cancook
Рет қаралды 148 МЛН