|
|||||||
| Cerca | Messaggi odierni | Segna come letti |
| Forum microsoft.public.it.office.excel Newsgroup microsoft.public.it.office.excel |
![]() |
|
|
Strumenti della discussione | Modalità di visualizzazione |
|
#1
|
|||
|
|||
|
Ciao ragazzi,
vorrei risolvere un problema con la seguente macro: ========================= Sub Prova() Dim Nome As String Dim Verifica As String Dim Cognome As String Workbooks.Open Filename:="C:\NomiCognomi.xls" Application.WindowState = xlMinimized Nome = InputBox("Inserisci nome") Windows("NomiCognomi.xls").Range("A2").Value Verifica = ActiveCell.Value Windows("NomiCognomi.xls").Range("B2").Value Cognome = ActiveCell.Value If Nome = Verifica Then MsgBox "Il cognome è..." & Cognome Else MsgBox "Nome errato" End If End Sub ========================= Ho due file, quello attivo sul quale stò lavorando ed un altro file (NomiCognomi.xls) posizionato nella directory principale di C che contiene due valori nelle celle A2 e B2. Lavorando sul file attivo lancio una macro che apre una inputbox nella quale scrivo un nome. Se il nome scritto corrisponde al valore scritto nella cella A2 del file NomiCognomi.xls il codice legge la cella B2 del file NomiCognomi.xls restituendomi in una MsgBox il cognome altrimenti mi avvisa con una seconda MsgBox che il nome è errato. Tornando al mio codice, riesco ad aprire il file NomiCognomi.xls, riesco a lanciare l'inputbox ma poi mi da errore. Come risolvo? Grazie 1000. |
|
|
||||
|
||||
|
|
|
#2
|
|||
|
|||
|
On 11 Mar, 21:00, Snoopy <am43210...***gmail.com> wrote:
Devi referenziare con la sintassi punto la cella partendo dagli oggetti insieme contenitori : cartella lavoro > foglio lavoro > cella Si assume che il foglio di lavoro si chiami "Foglio1". Comunque non è necessario aprire la cartella di lavoro per leggerne il contenuto di una cella. Se vuoi comunque aprire la cartella di lavoro prova con Sub Prova() Dim Nome As String Dim Verifica As String Dim Cognome As String Workbooks.Open Filename:="C:\NomiCognomi.xls" Nome = InputBox("Inserisci nome") Verifica = Workbooks("NomiCognomi.xls").Worksheets("Foglio1") .Range("A2") Cognome = Workbooks("NomiCognomi.xls").Worksheets("Foglio1") .Range("B2") If Nome = Verifica Then MsgBox "Il cognome è..." & Cognome Else MsgBox "Nome errato" End If End Sub Ciao Elio > Ciao ragazzi, > vorrei risolvere un problema con la seguente macro: > > ========================= > Sub Prova() > > *** *** Dim Nome As String > *** *** Dim Verifica As String > *** *** Dim Cognome As String > > *** *** Workbooks.Open Filename:="C:\NomiCognomi.xls" > *** *** Application.WindowState = xlMinimized > > *** *** Nome = InputBox("Inserisci nome") > *** *** Windows("NomiCognomi.xls").Range("A2").Value > *** *** Verifica = ActiveCell.Value > *** *** Windows("NomiCognomi.xls").Range("B2").Value > *** *** Cognome = ActiveCell.Value > > *** *** If Nome = Verifica Then > *** *** *** *** MsgBox "Il cognome è..." & Cognome > *** *** Else > *** *** *** *** MsgBox "Nome errato" > *** *** End If > > End Sub > ========================= > > Ho due file, quello attivo sul quale stò lavorando ed un altro file > (NomiCognomi.xls) posizionato nella directory principale di C che > contiene due valori nelle celle A2 e B2. > Lavorando sul file attivo lancio una macro che apre una inputbox nella > quale scrivo un nome. > Se il nome scritto corrisponde al valore scritto nella cella A2 del > file NomiCognomi.xls il codice legge la cella B2 del file > NomiCognomi.xls restituendomi in una MsgBox il cognome altrimenti mi > avvisa con una seconda MsgBox che il nome è errato. > Tornando al mio codice, riesco ad aprire il file NomiCognomi.xls, > riesco a lanciare l'inputbox ma poi mi da errore. > Come risolvo? > Grazie 1000. |
|
#3
|
|||
|
|||
|
In article <246e61ce-b33d-46a1-894f-
86e4d5e6266a***t41g2000yqt.googlegroups.com>, am43210694***gmail.com says... > Ciao ragazzi, > vorrei risolvere un problema con la seguente macro: > cut > Windows("NomiCognomi.xls").Range("A2").Value cosa farebbe questa istruzione?? E' come se scrivessi p.e.: 12 così da solo > Windows("NomiCognomi.xls").Range("B2").Value idem Forse invece di . value: Windows("NomiCognomi.xls").Range("B2").Value visto che poi usi activecell, dovresti usare Windows("NomiCognomi.xls").Range("B2").select ma il tutto nan ha molto senso. Se proprio: Nome = InputBox("Inserisci nome") Verifica = Windows("NomiCognomi.xls").Range("A2").Value Cognome = Windows("NomiCognomi.xls").Range("B2").Value If Nome = Verifica Then MsgBox "Il cognome è..." & Cognome Else MsgBox "Nome errato" End If Ma una cosa pulita sarebbe: '-------------------------------- 'in un modulo del workbook "attivo" Sub Prova() Dim wb as Workbook Dim sh as worksheet Dim Nome As String Dim Verifica As String Dim Cognome As String Workbooks.Open Filename:="C:\NomiCognomi.xls" Application.WindowState = xlMinimized set wb = workbooks("NomiCognomi.xls") set sh = wb.worksheets("Foglio1") ' da cambiare Verifica = sh.range("A2").value Cognome = sh.range("B2").value Nome = InputBox("Inserisci nome") If Nome = Verifica Then MsgBox "Il cognome è..." & Cognome Else MsgBox "Nome errato" End If set wb = nothing set sh = nothing End Sub '----------------------------- Scritta al volo qui, da testare. Fai sapere se hai risolto, grazie. -- Bye! Scossa |
|
#4
|
|||
|
|||
|
Ciao
Senza aprire il file di origine; stringato senza gestione errori Sub OttieniValore() Dim arg1 As String Dim arg2 As String Dim Nome As String Dim Verifica As String Dim Cognome As String Const strPercorso As String = "C:\" Const strNomeFile As String = "NomiCognomi.xls" Const strNomeFoglio As String = "Foglio1" Const Indirizzo1 As String = "A2" Const Indirizzo2 As String = "B2" arg1 = "'" & strPercorso & "[" & strNomeFile & "]" & strNomeFoglio & "'!" _ & Range(Indirizzo1).Range("A1").Address(, , xlR1C1) arg2 = "'" & strPercorso & "[" & strNomeFile & "]" & strNomeFoglio & "'!" _ & Range(Indirizzo2).Range("A1").Address(, , xlR1C1) Nome = InputBox("Inserisci Nome") If Nome = ExecuteExcel4Macro(arg1) Then MsgBox "Il cognome è ..." & ExecuteExcel4Macro(arg2) Else MsgBox "Nome errato" End If End Sub Ciao Elio On 11 Mar, 22:13, Scossa <Scossa...***gmail.com> wrote: > In article <246e61ce-b33d-46a1-894f- > 86e4d5e62...***t41g2000yqt.googlegroups.com>, am43210...***gmail.com says... > > > Ciao ragazzi, > > vorrei risolvere un problema con la seguente macro: > > cut > > > *** *** Windows("NomiCognomi.xls").Range("A2").Value > > cosa farebbe questa istruzione?? > > E' come se scrivessi p.e.: > > *** *** *** *** 12 > > così da solo > > > *** *** Windows("NomiCognomi.xls").Range("B2").Value > > idem > > Forse invece di . value: > > *** *** *** *** Windows("NomiCognomi.xls").Range("B2").Value > > visto che poi usi activecell, dovresti usare > > Windows("NomiCognomi.xls").Range("B2").select > > ma il tutto nan ha molto senso. > Se proprio: > > *** *** Nome = InputBox("Inserisci nome") > *** *** Verifica = Windows("NomiCognomi.xls").Range("A2").Value *** *** > *** *** Cognome = Windows("NomiCognomi.xls").Range("B2").Value > *** *** If Nome = Verifica Then > *** *** *** *** MsgBox "Il cognome è..." & Cognome > *** *** Else > *** *** *** *** MsgBox "Nome errato" > *** *** End If > > Ma una cosa pulita sarebbe: > > '-------------------------------- > 'in un modulo del workbook "attivo" > > Sub Prova() > *** *** Dim wb as Workbook > *** *** Dim sh as worksheet > *** *** Dim Nome As String > *** *** Dim Verifica As String > *** *** Dim Cognome As String > > *** *** Workbooks.Open Filename:="C:\NomiCognomi.xls" > *** *** Application.WindowState = xlMinimized > > *** *** set wb = workbooks("NomiCognomi.xls") > *** *** set sh = wb.worksheets("Foglio1") ' da cambiare > > *** *** Verifica = sh.range("A2").value > *** *** Cognome = sh.range("B2").value > > *** *** Nome = InputBox("Inserisci nome") > > *** *** If Nome = Verifica Then > *** *** *** *** MsgBox "Il cognome è..." & Cognome > *** *** Else > *** *** *** *** MsgBox "Nome errato" > *** *** End If > > *** *** set wb = nothing > *** *** set sh = nothing > End Sub > > '----------------------------- > > Scritta al volo qui, da testare. > > Fai sapere se hai risolto, grazie. > > -- > Bye! > Scossa |
|
#5
|
|||
|
|||
|
Ho due file, quello attivo sul quale stò lavorando ed un altro file
(NomiCognomi.xls) posizionato nella directory principale di C che contiene due valori nelle celle A2 e B2. Lavorando sul file attivo lancio una macro che apre una inputbox nella quale scrivo un nome. Se il nome scritto corrisponde al valore scritto nella cella A2 del file NomiCognomi.xls il codice legge la cella B2 del file NomiCognomi.xls restituendomi in una MsgBox il cognome altrimenti mi avvisa con una seconda MsgBox che il nome è errato. ******************************************* Non ho la più pallida idea di cosa tu stia facendo, ma se questo valore devi portarlo in una cella.... Consideriamo A.xls il file che hai in C: e i valori che stai cercando in A2 e B2 del Foglio1. Nel foglio dove vuoi validare la ricerca B2: =SE(A2='C:\[A.xls]Foglio1'!A2;'C:\[A.xls]Foglio1'!$B$2;"") Adesso se inserisci il nome corretto in A2, ti verrà riportato in B2 quanto trovato nella cella B2 del Foglio1 del file in C:, altrimenti la cella resterà vuota. E', senza scomodare vb, la soluzione postata da elby. Dipende dal tuo contesto. -- --------------------------- Mauro Gamberini Microsoft MVP - Excel http://www.riolab.org/ http://www.maurogsc.eu/ http://social.microsoft.com/Forums/i...xcelit/threads __________ Informazioni da ESET NOD32 Antivirus, versione del database delle firme digitali 4937 (20100311) __________ Il messaggio è stato controllato da ESET NOD32 Antivirus. www.nod32.it |
|
#6
|
|||
|
|||
|
Ciao Scossa, elby e Mauro,
vi ringrazio per le risposte e vi informo che ho scelto quella di Scossa che coincide con quello che volevo fare. Però ho altre tre domande (una sorge dall'assistenza di elby) per Scossa: 1 - Come faccio a non aprire il file NomiCognomi.xls e leggerne comunque i contenuti che mi servono? 2 - In alternativa al primo punto, ho provato a chiudere il file NomiCognomi.xls con la stringa ------------------------------------- Workbooks.Close Filename:="C:\NomiCognomi.xls" ------------------------------------- .... ma non funziona. 3 - Se volessi gestire l'errore dovuto alla mandanza del file NomiCognomi.xls nella directory C:\, come posso fare? Grazie 1000 per l'ulteriore aiuto e buona giornata. X Mauro.... com'è andata la convention di Microsoft? Vi siete divertiti? |
|
#7
|
|||
|
|||
|
1 - Come faccio a non aprire il file NomiCognomi.xls e leggerne
comunque i contenuti che mi servono? ********************************** Ci sono diversi modi. Elby ne ha illustrato uno. Esattamente cosa devi recuperare da quel foglio? 2 - In alternativa al primo punto, ho provato a chiudere il file NomiCognomi.xls con la stringa ------------------------------------- Workbooks.Close Filename:="C:\NomiCognomi.xls" ------------------------------------- .... ma non funziona. ************************************ Workbooks("C:\NomiCognomi.xls").Close 3 - Se volessi gestire l'errore dovuto alla mandanza del file NomiCognomi.xls nella directory C:\, come posso fare? ******************************* If Dir("C:\NomiCognomi.xls") = "" Then 'il file non c'è Else 'il file c'è End if Dai un'occhiatina a Dir nella guida del vb di Excel. X Mauro.... com'è andata la convention di Microsoft? Vi siete divertiti? ******************** Era: Microsoft SharePoint & Office Conference 2010 Interessante, grazie. -- --------------------------- Mauro Gamberini Microsoft MVP - Excel http://www.riolab.org/ http://www.maurogsc.eu/ http://social.microsoft.com/Forums/i...xcelit/threads __________ Informazioni da ESET NOD32 Antivirus, versione del database delle firme digitali 4937 (20100311) __________ Il messaggio è stato controllato da ESET NOD32 Antivirus. www.nod32.it |
|
#8
|
|||
|
|||
|
Ciao Mauro
> ....... Dipende dal tuo contesto. Personalmente non gradisco i messaggi sui collegamenti della cartella di lavoro alla sua apertura. In Excel 2007 i collegamenti sono considerati contenuto attivo alla stregua di una macro, e quindi non c'è differenza al riguardo ( bisogna attivare il contenuto attivo ). Se poi la cartella di lavoro origine dati è protetta verrà richiesta la password in entrambi i casi; però, nella soluzione vb si può passarla con SendKeys, senza la noia di inserirla manualmente: Sub OttieniValore() Dim arg1 As String Dim arg2 As String Dim Nome As String Dim Verifica As String Dim Cognome As String Const strPercorso As String = "C:\" Const strNomeFile As String = "NomiCognomi.xls" Const strNomeFoglio As String = "Foglio1" Const Indirizzo1 As String = "A2" Const Indirizzo2 As String = "B2" arg1 = "'" & strPercorso & "[" & strNomeFile & "]" _ & strNomeFoglio & "'!" _ & Range(Indirizzo1).Range("A1").Address(, , xlR1C1) arg2 = "'" & strPercorso & "[" & strNomeFile & "]" _ & strNomeFoglio & "'!" _ & Range(Indirizzo2).Range("A1").Address(, , xlR1C1) Nome = InputBox("Inserisci Nome") Application.SendKeys ("password") Application.SendKeys ("{ENTER}") If Nome = ExecuteExcel4Macro(arg1) Then Application.SendKeys ("password") Application.SendKeys ("{ENTER}") MsgBox "Il cognome è ..." & ExecuteExcel4Macro(arg2) Else MsgBox "Nome errato" End If End Sub Ciao Elio |
|
#9
|
|||
|
|||
|
Ciao
> 1 - Come faccio a non aprire il file NomiCognomi.xls e leggerne > comunque i contenuti che mi servono? L'accesso ai dati a file chiuso è permesso da varie tecnologie come DAO e ADO, che vengono utilizzate di solito per l'accesso ai database. Excel da accesso ai file chiusi attraverso i collegamenti sui fogli di lavoro ( vedi intevento di Mauro ). L'equivalente in VB di una sorta di collegamento temporaneo ( giusto il tempo della lettura del dato ) è l'esecuzione della ExecuteExcel4Macro ( vedi mio secondo intervento) che accetta come argomento una stringa con tutti gli elementi del percorso ( percorso file, nome file, foglio lavoro, indirizzo cella ). Ciao Elio |
|
#10
|
|||
|
|||
|
Personalmente non gradisco i messaggi sui collegamenti della cartella
di lavoro alla sua apertura. ************************+ Ciao Elby. Io farei con ADO. Tutto chiuso. Sinceramente però, non ho ancora capito se l'OP ha una tabella da leggere e cercare un valore. Bah... ;-) -- --------------------------- Mauro Gamberini Microsoft MVP - Excel http://www.riolab.org/ http://www.maurogsc.eu/ http://social.microsoft.com/Forums/i...xcelit/threads __________ Informazioni da ESET NOD32 Antivirus, versione del database delle firme digitali 4937 (20100311) __________ Il messaggio è stato controllato da ESET NOD32 Antivirus. www.nod32.it |
|
#11
|
|||
|
|||
|
Grazie!
Allora... ho provato la soluzione di Elby (Elio) è va benissimo ugualmente per il risultato che voglio raggiungere. Per rispondere a Mauro... .... questo è un codice di test che devo integrare con altro codice per ottenere delle risposte in base al contenuto in un file. Ho voluto semplificare il problema per evitare di mettervi in confusione. Ho provato a chiudere il file NomiCognomi.xls con la tua stringa ma ottengo un "Errore di run-time '9' - Indice non incluso nell'intervallo". Per il risultato ottenuto e l'assistenza gentile e puntuale (come sempre del resto!!!), Vi ringrazio tantissimo. |
|
#12
|
|||
|
|||
|
On 12 Mar, 11:40, Snoopy <amn...***tiscali.it> wrote:
> Ho provato a chiudere il file NomiCognomi.xls con la tua stringa ma > ottengo un "Errore di run-time '9' - Indice non incluso > nell'intervallo". > Prova così: Workbooks("NomiCognomi.xls").Close Bye! Scossa |
|
|
|
|
![]() |
| Tags: |
| Strumenti della discussione | |
| Modalità di visualizzazione | |
|
|
Discussioni simili
|
||||
| Discussione | Ha iniziato questa discussione | Forum | Repliche | Ultimo messaggio |
| Macro: Leggere e copiare celle da file su server | Daniele | Forum microsoft.public.it.office.excel | 9 | 05-02-2009 02:11 PM |
| Leggere contenuto file - vbs | enzo | Forum microsoft.public.it.scripting | 1 | 05-03-2007 04:02 PM |
| Leggere File di configurazione da altro sw | John | Forum microsoft.public.it.dotnet.vb | 1 | 02-05-2007 04:23 PM |
| Leggere il contenuto di un file | Maurizio | Forum microsoft.public.it.scripting | 2 | 05-06-2006 08:22 PM |
| Semplice - Leggere un file di testo (.txt, .log) utilizzato da un altro processo | NetSlacker | Forum microsoft.public.it.dotnet.vb | 3 | 02-22-2006 11:16 AM |