Nascondi i fogli, tuti meno uno.
Foglio che, potr� essere vuoto
e del colore che vuoi tu.
--
---------------------------
Mauro Gamberini
http://www.riolab.org/
http://www.maurogsc.eu/
http://social.microsoft.com/Forums/it-IT/excelit/threads
Ci avevo pensato ma quando vado a selezionare un foglio di quelli
nascosti mi da errore
Come selezioni un foglio nascosto ?
non seleziono un foglio nascosto, mi da errore, ma i dati che utilizzo
sono in 4 fogli, e se vado a utiòizzare quel foglio con Sheets
("Foglio1").select mi da errore se lo ho nascosto, qui infatti è il
mio problema
Ciao Fabrizio,
Al di là della protezione che puoi rimuovere e poi rimettere (oppure
guarda l'help riguardo "userinterfaceonly"), ma ti è indispensabile
usare .select ?
Il più delle volto è del tutto inutile e può essere evitato, considera
che:
sub m()
Worksheets("Foglio1").Select
Range("A1").Select
Selection.Copy
Sheets("Foglio2").Select
Range("B4").Select
ActiveSheet.Paste
Application.CutCopyMode = False
end sub
può essere scritta molto meglio così:
Public Sub m()
Dim sh1 As Worksheet
Dim sh2 As Worksheet
Set sh1 = ThisWorkbook.Worksheets("Foglio1")
Set sh2 = ThisWorkbook.Worksheets("Foglio2")
sh1.Range("A1").Copy sh2.Range("B4")
Set sh1 = Nothing
Set sh2 = Nothing
End Sub
Fai sapere se hai risolto, grazie.
Bye!
Scossa
non seleziono un foglio nascosto, mi da errore, ma i dati che utilizzo
sono in 4 fogli, e se vado a uti�izzare quel foglio con Sheets
("Foglio1").select mi da errore se lo ho nascosto, qui infatti � il
mio problema
**************************************************
Activepippoplutopaperino e Selectquiquoqua sono
da evitare. Nel 99 per centto dei casi non servono
a nulla, fanno solo *perdere tempo* ad
Excel e creano dei problemi a te.
Copia/incolla, lettura dati, riordini e filtri tabelle,
ecc, si possono fare *senza* selezionare foglio
e/o cella.
Puoi eliminare e rimettere la protezione ai tuoi fogli
runtime(durante il procedere del codice) tamite
i metodi Protect e Unprotect del foglio stesso.
Vedi la guida del vb di Excel per chiarimenti e *poi*
chiedi se non ti � chiaro.
Puoi utilizzare e gestire il parametro UserInterfaceOnly
del metodo Protect. Vedi sempre la guida del vb
di Excel per chiarimenti e se non ti � chiaro qualcosa,
chiedi.
Per nascondere il foglio, utilizza la costante:
xlSheetVeryHidden
dellla propriet� Visible del foglio, i modo da renderlo
visibile *solo* da codice.
Ricorda che il tuo codice sar� *sempre* visibile
ad un operatore appena appena esperto, anche
se lo proteggi dalla visualizzazione e che le macro
possono essere disabilitate all'avvio senza nessun
problema.
Insomma, utilizza la protezione di Excel
per quello che �, cio� un aiuto per chi inserisce
i dati nel fogli e non un qualcosa che abbia a che fare
con la *protezione di segreti* nel tuo codice.
--
---------------------------
Mauro Gamberini
http://www.riolab.org/
http://www.maurogsc.eu/
Se(se) i controlli sono nella UserForm
e i dati devi metterli nel Foglio2 e chiudere
la UserForm finita la routine e se(se) il dato
in colonna C � quello che determina o meno
che la riga abbia un valore:
Private Sub CommandButton1_Click()
'dichiaro le variabili
Dim wk As Workbook
Dim sh2 As Worksheet
Dim lNuovaRiga As Long
'metto un riferimento al Workbook
'che contiene la macro
Set wk = ThisWorkbook
With wk
'metto un riferimento al foglio
'(in questo caso specifico � sul
'Foglio2 che eseguo le operazioni)
Set sh2 = .Worksheets("Foglio2")
End With
'alcuni settaggi
With Application
.ScreenUpdating = False
.Calculation = xlCalculationManual
End With
With sh2
'trovo l'ultima riga con valori
'della colonna C e aumento di 1
'per scrivere nella nuova riga
lNuovaRiga = .Range("C" & _
.Rows.Count).End(xlUp).Row + 1
'scrivo nella prima riga vuota i dati
'dei vari controlli
.Cells(lNuovaRiga, 1).Value = Me.TextBox1.Text
.Cells(lNuovaRiga, 2).Value = Me.ComboBox5.Text
.Cells(lNuovaRiga, 3).Value = Me.TextBox2.Text
.Cells(lNuovaRiga, 4).Value = Me.ComboBox6.Text
'.......
'.......
'.......
.Cells(lNuovaRiga, 8).Value = Me.TextBox6.Text
End With
'alcuni settaggi
With Application
.ScreenUpdating = True
.Calculation = xlCalculationAutomatic
End With
'Set a Nothing delle variabili oggetto
Set sh2 = Nothing
Set wk = Nothing
'chiudo la UserForm
Unload Me
End Sub
Funziona, foglio nascosto o meno.
Private Sub CommandButton3_Click()
Dim sh2 As Worksheet
Set sh2 = ThisWorkbook.Worksheets("Foglio2")
sh2.Visible = xlSheetVeryHidden = -1
Set sh2 = Nothing
End Sub
ALMENO CREDO
il problema però che sorge è ?
a questo punto mi ritrovo con i fogli visibili perchè ho modificato la
loro costante "Visible" nelle proprietà del foglio quindi o intervengo
manualmente(non mi sembra una grande soluzione), o creo un codice che
all' apertura del file comanda la costante "Visible"
xlSheetVeryHidden = 0, quindi avevo pensato di mettere un codice in
ThisWorkbook del tipo
Private Sub Workbook_Open()
Public sh2 As WorkSheets
Public sh3 As WorkSheets
Public sh1 As WorkSheets
Public sh4 As WorkSheets
Public shs As WorkSheets
Set sh1 = .Worksheets("Foglio1")
Set sh2 = .Worksheets("Foglio2")
Set sh3 = .Worksheets("Foglio3")
Set sh4 = .Worksheets("Foglio4")
Set sh5 = .Worksheets("Foglio5")
Whit sh1
.Visible = xlSheetVeryHidden = 0
End Whit
Whit sh2
.Visible = xlSheetVeryHidden = 0
End Whit
Whit sh3
.Visible = xlSheetVeryHidden = 0
End Whit
Whit sh4
.Visible = xlSheetVeryHidden = 0
End Whit
Whit sh5
.Visible = xlSheetVeryHidden = 0
End Whit
With ActiveWindow
.DisplayHeadings = False
.DisplayHorizontalScrollBar = False
.DisplayVerticalScrollBar = False
.DisplayWorkbookTabs = False
End With
Application.DisplayFormulaBar = False
Application.DisplayFullScreen = True
Set sh1 = Nothing
Set sh2 = Nothing
Set sh3 = Nothing
Set sh4 = Nothing
Set sh5 = Nothing
Sheets("Foglio6").Select
UserForm2.Show
End Sub
Su questo codice ci credo molto meno di quello sopra :-D ,purtoppo
non sto sul mio portatile quindi non posso verificare quanto sia
grossa la boiata che ho scritto, spero che mi diciate che qualcosina
lo azzeccata.
Scusate e grazie per la vostra pazienza, in fondo il lavoro che ho
svolto fino ad ora funziona benissimo, ma per migliorarmi voglio
cercare di cimentarmi a trovare miglioramenti a questo file che
sicuramente aiuteranno anche me a fare esperienza
Ciao, a tutti, una volta tanto dico pure la mia, anche io avevo lo
stesso problema di non visualizzare i fogli dietro l'userform.
Ma ho risolto con Application.Visible = false ed un pulsante che
lancia Application.Visible = true.
in questo modo Excel non e più visible, ed i fogli tutti disponibili,
l'unico problema, che quando si genera un errore per visualizzare
Excel si deve chiuderlo da taskManager, però si potrebbe intercettare
l'errore e far partire la macro che visualizzi Excel.
Ciao By Sal 8-)
Situazione.
Voglio che i fogli, tutti meno uno
(qui nell'esempio il Foglio2),
siano visibili o invisibili a scelta.
Posso fare due pulsanti:
Private Sub CommandButton1_Click()
'dichiaro le variabili
Dim wk As Workbook
Dim sh As Worksheet
'metto un riferimento al workbook
'che contiene il codice
Set wk = ThisWorkbook
With wk
'ciclo i fogli per renderli
'invisibili
For Each sh In .Worksheets
If sh.Name <> "Foglio2" Then
sh.Visible = xlSheetVeryHidden
End If
Next
End With
'Set a Nothing delle variabili oggetto
Set sh = Nothing
Set wk = Nothing
End Sub
Private Sub CommandButton2_Click()
'dichiaro le variabili
Dim wk As Workbook
Dim sh As Worksheet
'metto un riferimento al workbook
'che contiene il codice
Set wk = ThisWorkbook
With wk
'ciclo i fogli per renderli
'visibili
For Each sh In .Worksheets
If sh.Name <> "Foglio2" Then
sh.Visible = xlSheetVisible
End If
Next
End With
'Set a Nothing delle variabili oggetto
Set sh = Nothing
Set wk = Nothing
End Sub
Oppure un unico pulsante che faccia
alternativamente le due cose:
Private Sub CommandButton3_Click()
'dichiaro le variabili
Dim wk As Workbook
Dim sh As Worksheet
'metto un riferimento al workbook
'che contiene il codice
Set wk = ThisWorkbook
With wk
'ciclo i fogli per renderli
'invisibili o invisibili
For Each sh In .Worksheets
If sh.Name <> "Foglio2" Then
If sh.Visible = xlSheetVisible Then
sh.Visible = xlSheetVeryHidden
Else
sh.Visible = xlSheetVisible
End If
End If
Next
End With
'Set a Nothing delle variabili oggetto
Set sh = Nothing
Set wk = Nothing
End Sub
a questo punto mi ritrovo con i fogli visibili perch� ho modificato la
loro costante "Visible" nelle propriet� del foglio quindi o intervengo
manualmente(non mi sembra una grande soluzione), o creo un codice che
all' apertura del file comanda la costante "Visible"
xlSheetVeryHidden = 0, quindi avevo pensato di mettere un codice in
ThisWorkbook del tipo
****************************************************
<cut>
Per ci� che riguarda l'apertura(e la chiusura) del file.
Questo codice in un modulo standard:
Public Sub mMostra()
'dichiaro le variabili
Dim wk As Workbook
Dim sh As Worksheet
'metto un riferimento al workbook
'che contiene il codice
Set wk = ThisWorkbook
With wk
'ciclo i fogli per renderli
'invisibili o invisibili
For Each sh In .Worksheets
If sh.Name <> "Foglio2" Then
If sh.Visible = xlSheetVisible Then
sh.Visible = xlSheetVeryHidden
Else
sh.Visible = xlSheetVisible
End If
End If
Next
End With
'Set a Nothing delle variabili oggetto
Set sh = Nothing
Set wk = Nothing
End Sub
Public Sub mNascondi()
'dichiaro le variabili
Dim wk As Workbook
Dim sh As Worksheet
'metto un riferimento al workbook
'che contiene il codice
Set wk = ThisWorkbook
With wk
'ciclo i fogli per renderli
'invisibili
For Each sh In .Worksheets
If sh.Name <> "Foglio2" Then
sh.Visible = xlSheetVeryHidden
End If
Next
End With
'Set a Nothing delle variabili oggetto
Set sh = Nothing
Set wk = Nothing
End Sub
E questo nel modulo di codice di ThisWorkbook:
Private Sub Workbook_Open()
Call mNascondi
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Call mNascondi
End Sub
Puoi adesso modificare anche il codice
dei due pulsanti sulla UserForm cos�:
Private Sub CommandButton1_Click()
Call mNascondi
End Sub
Private Sub CommandButton2_Click()
Call mMostra
End Sub
Utilizzando le stesse routine per nascondere
e visualizzare i fogli.
Nota.
Tieni sempre presente che posso disabilitare
le macro all'avvio del file e che il tuo codice
sar� sempre visibile con poca fatica anche
proteggendolo dalla visualizzazione.
Grazie per l'attenzione.
--
---------------------------
Mauro Gamberini
http://www.riolab.org/
http://www.maurogsc.eu/
http://social.microsoft.com/Forums/it-IT/excelit/threads
Gli ho solo dato un'occhiata per capire
cosa dovevi fare. Diciamo che io non
lo utilizzerei. Ma io, eh.
--
---------------------------
Mauro Gamberini
http://www.riolab.org/
http://www.maurogsc.eu/
Vedere codice, dare(forse) soluzione... ;-)
Grazie si ho visto che era il codice.
adesso mi è comparso un nuovo problema, nascondendo i fogli avevo il
problema che i codici non funzionassero, poi grazie ai vostri
suggerimenti credevo di aver risolto il problema,
ma ci sono codici che non riesco a capire come modificarli sono picci
codici come:
Private Sub UserForm_Activate()
'Sheets("Foglio3").Select
End Sub
se lascio questo codice mi blocca tutto, a dire il vero lo avevo
temuto ma non riesco a cambiare questo codice in modo che faccia
quello che fa' ma non mi si blocchi perchè il foglio è nascosto
Perch� devi selezionare il Foglio3?
Select � male nel 99% dei casi.
E in quel 99% si pu� fare in altro modo.
Ripeto, perch� selezioni il Foglio3?
Seleziono il foglio3 o altri fogli all'apertura di una userform per
far leggere alle textbox i valori delle celle che sono in quel foglio
Non serve a nulla selezionare il foglio!
Ragioniamo.
Hai i dati in Foglio3, cella A1 e B1.
Tu cosa fai adesso, immagino una cosa
cos�:
Foglio3.Select
TextBox1.Text = ActiveSheet.Range("A1").Value
TextBox2.Text = ActiveSheet.Range("B1").Value
Ma funziona anche *senza* selezionare il Foglio3,
cosa che ti da errore se il Foglio3 � nascosto.
Quindi, semplificando:
With ThisWorkbook.Worksheets("Foglio3")
TextBox1.Text = .Range("A1").Value
TextBox2.Text = .Range("B1").Value
'ecc
End With
Funziona anche * al contrario*
nel caso tu debba scrivere sul Foglio3
i dati delle TextBox.:
With ThisWorkbook.Worksheets("Foglio3")
.Range("A1").Value = TextBox1.Text
.Range("B1").Value = TextBox2.Text
'ecc
End With
E questo, Foglio3
nascosto o meno.
Ancora una volta: Activepippoplutopaperino
e Selectquiquoqua portano ad errori e/o a
cose non volute.
Dai un'occhiatina qui se ne hai tempo e voglia:
http://www.maurogsc.eu/excel/xlsmisteriosacellaa1.aspx
Grazie per l'attenzione.
Grazie, il problema è che ho fatto tutto senza pensare di voler
nascondere i fogli , poi una volta finito mi sono messo a migliorare
il lavoro una di queste cose era nasconder i fogli per evitare che si
vedessero sotto la userform principale, con le vostre spiegazioni ho
capito come dovevo fare e ho modificato quasi tutti i codici però mi
sto rendendo conto che devo rifare quasi tutto di nuovo, perchè ho
usato in molti codici la forma Sheets("foglion").Select, va be sarà
una faticaccia visto qunto ho impiegto a finire la prima volta i
codici però sicuramente adesso ho quasi imparato come scrivere un
codice decente per qualche prossima idea di lavoro
Meglio riscrivere un po' di codice che avere
una cosa che si pianta o che non fa(bene)
quello che dovrebbe.
Grazie per il riscontro e buon lavoro.
Rieccomi, per favore sopportami solo un'altro pochino, ho letto " La
misteriosa cella A1"
è devo farti i miei complimenti perchè risulta molto facile da capire
anche a principianti come me,
ora credo di aver capito che usando la programmazione ad oggetti, ogni
volta che scrivo un codice devo usare la metodologia presente
nell'esempio finale, ed è per questo che non mi serve più usare codici
tipo Sheets("Foglion").Select, quindi tornando al mio caso se uso
questa forma di codice su ogni evento generato dalla mia UserForm non
devo richiamare il foglio da dove recupero i miei dati all' apertura
del foglio come ho fatto fino ad ora
Es:Private Sub UserForm_Activate()
Sheets("Foglio3").Select
End Sub .
Ho quasi capito?
Sub W()
If TextBox1 = "" Then
MsgBox "Inserisci Identificativo"
TextBox1.SetFocus
Exit Sub
End If
Dim gb As Worksheet
Set gb = Worksheets("Foglio1")
With gb
Dim d As Object
For Each d In Range("A2:N900")
Dim x As String
x = UserForm4.TextBox1.Value
If d = x Then
d.Select
Y = d.Value
TextBox2 = d.Offset(0, -2).Value
TextBox3 = d.Offset(0, -1).Value
TextBox4 = d.Value
TextBox5 = d.Offset(0, 1).Value
TextBox6 = d.Offset(0, 2).Value
TextBox7 = d.Offset(0, 3).Value
TextBox8 = d.Offset(0, 4).Value
TextBox9 = d.Offset(0, 5).Value
TextBox10 = d.Offset(0, 6).Value
TextBox11 = d.Offset(0, 7).Value
TextBox12 = d.Offset(0, 8).Value
TextBox13 = d.Offset(0, 9).Value
TextBox14 = d.Offset(0, 10).Value
TextBox15 = d.Offset(0, 11).Value
Dim irisposta As Integer
irisposta = MsgBox("Trovato " & Y & ". Vuoi fermarti ?", vbYesNo)
If irisposta = vbYes Then
Exit For
End If
End If
Next d
End With
Set gb = Nothing
End Sub
per favore spiegami che cosa è che non riesco a capire
Direi di s�.
Per� per� per�...
... programmare ad oggetti(in Excel)
� *uno* dei modi. E' sicuramente
pi� robusto, ma ti costringe a scrivere
molto di pi�. Questo non � un male,
ma va considerato. Inoltre a volte
non serve specificare oggetti,
per esempio una UDF
viene eseguita da chiunque la chiami.
Spero adesso di essere chiaro e di non
crearti confusione.
UserForm con 3 TextBox e 3 CommandButton.
Ho dati in Foglio1, Foglio2, Foglio3, celle A1:C1.
Che i fogli siano o meno nascosti *non ha*
importanza.
Voglio che cliccando su CommandButton1
mi recuperi nelle 3 TextBox il contenuto
delle celle A1:C1 del Foglio1,
cliccando su CommandButton2
il contenuto delle celle A1:C1 del Foglio2,
cliccando sul CommandButton3 il contenuto
di A1:C1 del Foglio3.
Questo il codice(commentato) da inserire
nel modulo di codice della UserForm:
Option Explicit
'dichiaro le variabili visibili
'da tutta la UserForm
Private wk As Workbook
Private sh1 As Worksheet
Private sh2 As Worksheet
Private sh3 As Worksheet
Private Sub Frame2_Click()
End Sub
'questo � l'evento che viene eseguito quando
'crei la UserForm
Private Sub UserForm_Initialize()
'metto i riferimenti al workbook
'che contiene la UserForm e ai fogli
'del workbook
Set wk = ThisWorkbook
With ThisWorkbook
Set sh1 = .Worksheets("Foglio1")
Set sh2 = .Worksheets("Foglio2")
Set sh3 = .Worksheets("Foglio3")
End With
'adesso all'interno della UserForm posso
'utilizzare sh1/sh2/sh3 per riferirmi
'ai 3 fogli
End Sub
'carico nelle TextBox i valori di A1:C1
'del Foglio1
Private Sub CommandButton1_Click()
With sh1
Me.TextBox1.Text = _
.Range("A1").Value
Me.TextBox2.Text = _
.Range("B1").Value
Me.TextBox3.Text = _
.Range("C1").Value
End With
End Sub
'carico nelle TextBox i valori di A1:C1
'del Foglio2
Private Sub CommandButton2_Click()
With sh2
Me.TextBox1.Text = _
.Range("A1").Value
Me.TextBox2.Text = _
.Range("B1").Value
Me.TextBox3.Text = _
.Range("C1").Value
End With
End Sub
'carico nelle TextBox i valori di A1:C1
'del Foglio3
Private Sub CommandButton3_Click()
With sh3
Me.TextBox1.Text = _
.Range("A1").Value
Me.TextBox2.Text = _
.Range("B1").Value
Me.TextBox3.Text = _
.Range("C1").Value
End With
End Sub
'evento che si verifica quando
'chiudi la UserForm
Private Sub UserForm_Terminate()
'Set a Nothing delle variabili oggetto
Set sh3 = Nothing
Set sh2 = Nothing
Set sh1 = Nothing
Set wk = Nothing
End Sub
Tieni presente che questo codice �
scritto perch� sia *facile* da capire.
Pu� essere scritto in modo diverso.
Qui trovi il file che ho utilizzato per
le prove:
http://www.maurogsc.eu/esemping/fogliuserform.zip
Vi �, oltre alla UserForm1, anche la
UserForm2 con il codice diverso.
Potrei ottimizzarlo ulterirmente, ma va, credo,
oltre lo scopo di questo post.
Come sempre, grazie per l'attenzione.
--
---------------------------
No, forse sono io che non ho capito.
Cosa devi fare?
Hai una tabella?
Su quale foglio?
I suoi estremi(il riferimento)?
Hai una colonna in cui vuoi fare la ricerca?
Quale?
Il dato � univoco nella colonna
o pu� ripetersi?
Una volta che troviamo il dato, cosa
dobbiamo fare?
Per favore, una risposta per ogni domanda.
Grazie.
Allora
Cosa devo fare? nello specifico con una userform faccio una ricerca
su una tabella dati che sta nel foglio1, in questa UserForm ho tre
Bottoni con cui seleziono il criterio per fare la ricerca nel
database, il riferimento del data base sono A1:N979
questi sono i due file peso che forse si capisce meglio
http://www.fabriziobiaggi.com/Osteria del curato.xls questo è quello
che ho cominciato a modificare
http://www.fabriziobiaggi.com/Osteria del curato4.xls questo è quello
finito e funzionante
http:/www.fabriziobiaggi.com/Osteria.xls
http:/www.fabriziobiaggi.com/Osteria4.xls
http:/www.fabriziobiaggi.com/Osteria4.xls
********************************
Pagine non trovate.
Per favore, rispondi alle mie domande, grazie.
Posta la routine che da l'errore.
Grazie.
leggendo quello che mi hai spiegato sopra io l'ho scritta cosi ma mi
da errore
Option Explicit
'dichiaro le variabili visibili
'da tutta la UserForm
Private wk As Workbook
Private sh1 As Worksheet
Private sh2 As Worksheet
Private sh3 As Worksheet
Private sh4 As Worksheet
Private sh5 As Worksheet
Private sh6 As Worksheet
Private Sub ComboBox1_Change()
TextBox1.Text = ComboBox1.Text
End Sub
Private Sub CommandButton1_Click()
Application.ScreenUpdating = False
Dim Number As String
Number = Range("Z1").Value
Select Case Number
Case "K"
Call K
Case "J"
Call J
Case "W"
Call W
Case Else
End Select
Application.ScreenUpdating = True
End Sub
Private Sub CommandButton10_Click()
Application.ScreenUpdating = False
ComboBox1.RowSource = "PSrif"
Range("Z1") = "K"
Range("Y1") = "d"
Range("X1") = "g"
Application.ScreenUpdating = True
End Sub
Private Sub CommandButton2_Click()
Application.ScreenUpdating = False
If TextBox2 = "" Then
MsgBox "Devi Inserire almeno il nominativo"
TextBox2.SetFocus
Exit Sub
End If
Whit sh1
Dim irisposta As Integer
irisposta = MsgBox("Confermi la registrazione" _
& " di " & TextBox2.Value & " ?", vbYesNo)
If irisposta = vbYes Then
Range("A2").End(xlDown).Offset(1, 0).Select
ActiveCell.Value = TextBox2
ActiveCell.Offset(0, 0).Value = TextBox2
ActiveCell.Offset(0, 1).Value = TextBox3
ActiveCell.Offset(0, 2).Value = TextBox4
ActiveCell.Offset(0, 3).Value = TextBox5
ActiveCell.Offset(0, 4).Value = TextBox6
ActiveCell.Offset(0, 5).Value = TextBox7
ActiveCell.Offset(0, 6).Value = TextBox8
ActiveCell.Offset(0, 7).Value = TextBox9
ActiveCell.Offset(0, 8).Value = TextBox10
ActiveCell.Offset(0, 9).Value = TextBox11
ActiveCell.Offset(0, 10).Value = TextBox12
ActiveCell.Offset(0, 11).Value = TextBox13
ActiveCell.Offset(0, 12).Value = TextBox14
ActiveCell.Offset(0, 13).Value = TextBox15
MsgBox "Ok Capo, eseguito!"
TextBox2 = ""
TextBox3 = ""
TextBox4 = ""
TextBox5 = ""
TextBox6 = ""
TextBox7 = ""
TextBox8 = ""
TextBox9 = ""
TextBox10 = ""
TextBox11 = ""
TextBox12 = ""
TextBox13 = ""
TextBox14 = ""
TextBox15 = ""
End If
End With
Application.ScreenUpdating = True
End Sub
Private Sub CommandButton3_Click()
Application.ScreenUpdating = False
If TextBox2 = "" Then
MsgBox "Devi Cercare un nominativo per modificarlo"
Exit Sub
End If
With sh1
ActiveCell.Value = TextBox2
ActiveCell.Offset(0, 1).Value = TextBox3
ActiveCell.Offset(0, 2).Value = TextBox4
ActiveCell.Offset(0, 3).Value = TextBox5
ActiveCell.Offset(0, 4).Value = TextBox6
ActiveCell.Offset(0, 5).Value = TextBox7
ActiveCell.Offset(0, 6).Value = TextBox8
ActiveCell.Offset(0, 7).Value = TextBox9
ActiveCell.Offset(0, 8).Value = TextBox10
ActiveCell.Offset(0, 9).Value = TextBox11
ActiveCell.Offset(0, 10).Value = TextBox12
ActiveCell.Offset(0, 11).Value = TextBox13
ActiveCell.Offset(0, 12).Value = TextBox14
ActiveCell.Offset(0, 13).Value = TextBox15
MsgBox "Ok! Eseguito"
End With
Application.ScreenUpdating = True
End Sub
Private Sub CommandButton4_Click()
Application.ScreenUpdating = False
With sh1
If TextBox2 = "" Then Exit Sub
ActiveCell.Select
Dim irisposta As Integer
irisposta = MsgBox("Vuoi cancellare il Nominativo: " &
ActiveCell.Value & " ?", vbYesNo)
If irisposta = vbYes Then
ActiveCell.EntireRow.Delete
End If
End With
Application.ScreenUpdating = True
End Sub
Private Sub CommandButton5_Click()
Application.ScreenUpdating = False
Dim Number As String
Number = Range("Y1").Value
Select Case Number
Case "A"
Call A
Case "B"
Call B
Case "d"
Call d
Case Else
End Select
Application.ScreenUpdating = True
End Sub
Private Sub CommandButton6_Click()
Dim Number As String
Number = Range("X1").Value
Select Case Number
Case "E"
Call E
Case "F"
Call F
Case "g"
Call g
Case Else
End Select
End Sub
Private Sub CommandButton7_Click()
Application.ScreenUpdating = False
UserForm4.Hide
Application.ScreenUpdating = True
End Sub
Private Sub CommandButton8_Click()
Application.ScreenUpdating = False
ComboBox1.RowSource = "Identificativo"
Range("Z1") = "J"
Range("Y1") = "A"
Range("X1") = "E"
Application.ScreenUpdating = True
End Sub
Private Sub CommandButton9_Click()
Application.ScreenUpdating = False
ComboBox1.RowSource = "Riferimenti"
Range("Z1") = "W"
Range("Y1") = "B"
Range("X1") = "F"
Application.ScreenUpdating = True
End Sub
Private Sub Label8_Click()
TextBox2 = ""
TextBox3 = ""
TextBox4 = ""
TextBox5 = ""
TextBox6 = ""
TextBox7 = ""
TextBox8 = ""
TextBox9 = ""
TextBox10 = ""
TextBox11 = ""
TextBox12 = ""
TextBox13 = ""
TextBox14 = ""
TextBox15 = ""
End Sub
'Private Sub UserForm_Activate()
'Sheets("Foglio1").Select
'End Sub
Private Sub UserForm_Initialize()
'metto i riferimenti al workbook
'che contiene la UserForm e ai fogli
'del workbook
Set wk = ThisWorkbook
With ThisWorkbook
Set sh1 = .Worksheets("Foglio1")
Set sh2 = .Worksheets("Foglio2")
Set sh3 = .Worksheets("Foglio3")
Set sh4 = .Worksheets("Foglio4")
Set sh5 = .Worksheets("Foglio5")
Set sh6 = .Worksheets("Foglio6")
End With
'adesso all'interno della UserForm posso
'utilizzare sh1/sh2/sh3 per riferirmi
'ai 3 fogli
End Sub
Sub K()
If TextBox1 = "" Then
MsgBox "Inserisci Identificativo"
TextBox1.SetFocus
Exit Sub
End If
Set sh1 = .Worksheets("Foglio1")
Whit sh1
Dim c As Object
For Each c In Range("A2:N900")
Dim x As String
x = UserForm4.TextBox1.Value
If c = x Then
c.Select
Y = c.Value
TextBox2 = c.Offset(0, -3).Value
TextBox3 = c.Offset(0, -2).Value
TextBox4 = c.Offset(0, -1).Value
TextBox5 = c.Value
TextBox6 = c.Offset(0, 1).Value
TextBox7 = c.Offset(0, 2).Value
TextBox8 = c.Offset(0, 3).Value
TextBox9 = c.Offset(0, 4).Value
TextBox10 = c.Offset(0, 5).Value
TextBox11 = c.Offset(0, 6).Value
TextBox12 = c.Offset(0, 7).Value
TextBox13 = c.Offset(0, 8).Value
TextBox14 = c.Offset(0, 9).Value
TextBox15 = c.Offset(0, 10).Value
Dim irisposta As Integer
irisposta = MsgBox("Trovato " & Y & ". Vuoi fermarti ?", vbYesNo)
If irisposta = vbYes Then
Exit For
End If
End If
Next c
End With
End Sub
Sub W()
If TextBox1 = "" Then
MsgBox "Inserisci Identificativo"
TextBox1.SetFocus
Exit Sub
End If
'Set sh1 = .Worksheets("Foglio1")
Whit sh1
Set sh1 = .Worksheets("Foglio1")
End Sub
Sub J()
If TextBox1 = "" Then
MsgBox "Inserisci Identificativo"
TextBox1.SetFocus
Exit Sub
End If
Set sh1 = .Worksheets("Foglio1")
Whit sh1
Dim m As Object
For Each m In Range("A2:N900")
Dim x As String
x = UserForm4.TextBox1.Value
If m = x Then
m.Select
Y = m.Value
TextBox2 = m.Value
TextBox3 = m.Offset(0, 1).Value
TextBox4 = m.Offset(0, 2).Value
TextBox5 = m.Offset(0, 3).Value
TextBox6 = m.Offset(0, 4).Value
TextBox7 = m.Offset(0, 5).Value
TextBox8 = m.Offset(0, 6).Value
TextBox9 = m.Offset(0, 7).Value
TextBox10 = m.Offset(0, 8).Value
TextBox11 = m.Offset(0, 9).Value
TextBox12 = m.Offset(0, 10).Value
TextBox13 = m.Offset(0, 11).Value
TextBox14 = m.Offset(0, 12).Value
TextBox15 = m.Offset(0, 13).Value
Dim irisposta As Integer
irisposta = MsgBox("Trovato " & Y & ". Vuoi fermarti ?", vbYesNo)
If irisposta = vbYes Then
Exit For
End If
End If
Next m
End With
End Sub
Sub A()
If Range("Y1") = "A" Then
If ActiveCell.Offset(-1, 0).Value = "IDENT" Then
MsgBox "Siamo a inizio elenco, impossibile salire oltre"
Exit Sub
End If
Set sh1 = .Worksheets("Foglio1")
Whit sh1
ActiveCell.Offset(-1, 0).Select
TextBox2 = ActiveCell.Offset(0, 0).Value
TextBox3 = ActiveCell.Offset(0, 1).Value
TextBox4 = ActiveCell.Offset(0, 2).Value
TextBox5 = ActiveCell.Offset(0, 3).Value
TextBox6 = ActiveCell.Offset(0, 4).Value
TextBox7 = ActiveCell.Offset(0, 5).Value
TextBox8 = ActiveCell.Offset(0, 6).Value
TextBox9 = ActiveCell.Offset(0, 7).Value
TextBox10 = ActiveCell.Offset(0, 8).Value
TextBox11 = ActiveCell.Offset(0, 9).Value
TextBox12 = ActiveCell.Offset(0, 10).Value
TextBox13 = ActiveCell.Offset(0, 11).Value
TextBox14 = ActiveCell.Offset(0, 12).Value
TextBox15 = ActiveCell.Offset(0, 13).Value
End If
End With
End Sub
Sub B()
If Range("Y1") = "B" Then
If ActiveCell.Offset(-1, 0).Value = "Enti" Then
MsgBox "Siamo a inizio elenco, impossibile salire oltre"
Exit Sub
End If
Set sh1 = .Worksheets("Foglio1")
Whit sh1
ActiveCell.Offset(-1, 0).Select
TextBox2 = ActiveCell.Offset(0, -2).Value
TextBox3 = ActiveCell.Offset(0, -1).Value
TextBox4 = ActiveCell.Offset(0, 0).Value
TextBox5 = ActiveCell.Offset(0, 1).Value
TextBox6 = ActiveCell.Offset(0, 2).Value
TextBox7 = ActiveCell.Offset(0, 3).Value
TextBox8 = ActiveCell.Offset(0, 4).Value
TextBox9 = ActiveCell.Offset(0, 5).Value
TextBox10 = ActiveCell.Offset(0, 6).Value
TextBox11 = ActiveCell.Offset(0, 7).Value
TextBox12 = ActiveCell.Offset(0, 8).Value
TextBox13 = ActiveCell.Offset(0, 9).Value
TextBox14 = ActiveCell.Offset(0, 10).Value
TextBox15 = ActiveCell.Offset(0, 11).Value
End If
End With
End Sub
Sub d()
If Range("Y1") = "d" Then
If ActiveCell.Offset(-1, 0).Value = "Riferimento P.S." Then
MsgBox "Siamo a inizio elenco, impossibile salire oltre"
Exit Sub
End If
Set sh1 = .Worksheets("Foglio1")
Whit sh1
ActiveCell.Offset(-1, 0).Select
TextBox2 = ActiveCell.Offset(0, -3).Value
TextBox3 = ActiveCell.Offset(0, -2).Value
TextBox4 = ActiveCell.Offset(0, -1).Value
TextBox5 = ActiveCell.Offset(0, 0).Value
TextBox6 = ActiveCell.Offset(0, 1).Value
TextBox7 = ActiveCell.Offset(0, 2).Value
TextBox8 = ActiveCell.Offset(0, 3).Value
TextBox9 = ActiveCell.Offset(0, 4).Value
TextBox10 = ActiveCell.Offset(0, 5).Value
TextBox11 = ActiveCell.Offset(0, 6).Value
TextBox12 = ActiveCell.Offset(0, 7).Value
TextBox13 = ActiveCell.Offset(0, 8).Value
TextBox14 = ActiveCell.Offset(0, 9).Value
TextBox15 = ActiveCell.Offset(0, 10).Value
End If
End With
End Sub
Sub E()
If ActiveCell.Offset(1, 0).Value = "" Then
MsgBox "Siamo a fine elenco, impossibile proseguire"
Exit Sub
End If
Set sh1 = .Worksheets("Foglio1")
Whit sh1
ActiveCell.Offset(1, 0).Select
TextBox2 = ActiveCell.Offset(0, 0).Value
TextBox3 = ActiveCell.Offset(0, 1).Value
TextBox4 = ActiveCell.Offset(0, 2).Value
TextBox5 = ActiveCell.Offset(0, 3).Value
TextBox6 = ActiveCell.Offset(0, 4).Value
TextBox7 = ActiveCell.Offset(0, 5).Value
TextBox8 = ActiveCell.Offset(0, 6).Value
TextBox9 = ActiveCell.Offset(0, 7).Value
TextBox10 = ActiveCell.Offset(0, 8).Value
TextBox11 = ActiveCell.Offset(0, 9).Value
TextBox12 = ActiveCell.Offset(0, 10).Value
TextBox13 = ActiveCell.Offset(0, 11).Value
TextBox14 = ActiveCell.Offset(0, 12).Value
TextBox15 = ActiveCell.Offset(0, 13).Value
End With
End Sub
Sub F()
If ActiveCell.Offset(1, 0).Value = "" Then
MsgBox "Siamo a fine elenco, impossibile proseguire"
Exit Sub
End If
Set sh1 = .Worksheets("Foglio1")
With sh1
ActiveCell.Offset(1, 0).Select
TextBox2 = ActiveCell.Offset(0, -2).Value
TextBox3 = ActiveCell.Offset(0, -1).Value
TextBox4 = ActiveCell.Offset(0, 0).Value
TextBox5 = ActiveCell.Offset(0, 1).Value
TextBox6 = ActiveCell.Offset(0, 2).Value
TextBox7 = ActiveCell.Offset(0, 3).Value
TextBox8 = ActiveCell.Offset(0, 4).Value
TextBox9 = ActiveCell.Offset(0, 5).Value
TextBox10 = ActiveCell.Offset(0, 6).Value
TextBox11 = ActiveCell.Offset(0, 7).Value
TextBox12 = ActiveCell.Offset(0, 8).Value
TextBox13 = ActiveCell.Offset(0, 9).Value
TextBox14 = ActiveCell.Offset(0, 10).Value
TextBox15 = ActiveCell.Offset(0, 11).Value
End With
End Sub
Sub g()
If ActiveCell.Offset(1, 0).Value = "" Then
MsgBox "Siamo a fine elenco, impossibile proseguire"
Exit Sub
End If
Set sh1 = .Worksheets("Foglio1")
With sh1
ActiveCell.Offset(1, 0).Select
TextBox2 = ActiveCell.Offset(0, -3).Value
TextBox3 = ActiveCell.Offset(0, -2).Value
TextBox4 = ActiveCell.Offset(0, -1).Value
TextBox5 = ActiveCell.Offset(0, 0).Value
TextBox6 = ActiveCell.Offset(0, 1).Value
TextBox7 = ActiveCell.Offset(0, 2).Value
TextBox8 = ActiveCell.Offset(0, 3).Value
TextBox9 = ActiveCell.Offset(0, 4).Value
TextBox10 = ActiveCell.Offset(0, 5).Value
TextBox11 = ActiveCell.Offset(0, 6).Value
TextBox12 = ActiveCell.Offset(0, 7).Value
TextBox13 = ActiveCell.Offset(0, 8).Value
TextBox14 = ActiveCell.Offset(0, 9).Value
TextBox15 = ActiveCell.Offset(0, 10).Value
End With
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As
Integer)
If CloseMode <> 1 Then Cancel = 1
End Sub
la parte di select case è una di quelle che in seguito studierò come
migliorare perchè non è certo il massimo
scusa questo l'ho aggiunto dopo per vedere se così funzionasse anche
se secondo me non ci andava
Set sh1 = .Worksheets("Foglio1")
perche' già messo in Private Sub UserForm_Initialize()
Dove hai l'errore?
Puoi gentilmente riportare la/le riga/he
dove hai l'errore?
Sub J()
If TextBox1 = "" Then
MsgBox "Inserisci Identificativo"
TextBox1.SetFocus
Exit Sub
End If
Whit sh1 qui mi da' l' errore su tutti i codici dove l'ho
utilizzato
Che tipo di errore?
Cosa dice l'avviso?
Sub, Function o Property non definita (errore 35)
With e non Whit
ops scusa, ma non va ugualmente
Sub W()
If TextBox1 = "" Then
MsgBox "Inserisci Identificativo"
TextBox1.SetFocus
Exit Sub
End If
With sh1
Dim d As Object
'Dim Y As String
For Each d In Range("A2:N900")
Dim x As String
x = UserForm4.TextBox1.Value
If d = x Then
d.Select
Y = d.Value "adesso l'ERRORE lo da qui"
TextBox2 = d.Offset(0, -2).Value
TextBox3 = d.Offset(0, -1).Value
TextBox4 = d.Value
TextBox5 = d.Offset(0, 1).Value
TextBox6 = d.Offset(0, 2).Value
TextBox7 = d.Offset(0, 3).Value
TextBox8 = d.Offset(0, 4).Value
TextBox9 = d.Offset(0, 5).Value
TextBox10 = d.Offset(0, 6).Value
TextBox11 = d.Offset(0, 7).Value
TextBox12 = d.Offset(0, 8).Value
TextBox13 = d.Offset(0, 9).Value
TextBox14 = d.Offset(0, 10).Value
TextBox15 = d.Offset(0, 11).Value
Dim irisposta As Integer
irisposta = MsgBox("Trovato " & Y & ". Vuoi fermarti ?", vbYesNo)
If irisposta = vbYes Then
Exit For
End If
End If
Next d
End With
End Sub
il tipo di errore è: Variabile non definita
leggendo l' help di vba avevo pensato di inserire :
Option Explicit
'dichiaro le variabili visibili
'da tutta la UserForm
Private wk As Workbook
Private sh1 As Worksheet
Private sh2 As Worksheet
Private sh3 As Worksheet
Private sh4 As Worksheet
Private sh5 As Worksheet
Private sh6 As Worksheet
Private Y As String
così non mi da errore ma non funziona
se ti sto scocciando dimmelo capisco di essere un po' invadente
Nessun problema(per ora).
Se non rispondo pi� oggi,
lo faccio domani, pi� tardi
devo uscire.
Vediamo un po'...
Se ho capito bene vuoi confrontare
il valore delle celle del Range A2:N900
con il valore della TextBox1.
Public Sub W()
If Len(Me.TextBox1.Text) = 0 Then
MsgBox "Inserisci Identificativo"
Me.TextBox1.SetFocus
Exit Sub
End If
Dim rng As Range
Dim c As Range
Set rng = sh1.Range("A2:N900")
For Each c in rng
If c.Value = Me.TextBox1.Text Then
'il codice se � uguale
Else
'il codice se � diverso
End If
Next
Set c = Nothing
Set rng = Nothing
End Sub
Assumendo che sh sia il riferimento al Foglio1.
Inoltre.
Utilizza le propriet� degli oggetti:
TextBox2.Text = qualcosa
e non
TextBox2 = qualcosa
Prova un po'.
>
> Public Sub W()
>
> If Len(Me.TextBox1.Text) = 0 Then
> MsgBox "Inserisci Identificativo"
> Me.TextBox1.SetFocus
> Exit Sub
> End If
>
> Dim rng As Range
> Dim c As Range
>
> Set rng = sh1.Range("A2:N900")
>
> For Each c in rng
> If c.Value = Me.TextBox1.Text Then
> 'il codice se è uguale
> Else
> 'il codice se è diverso
> End If
> Next
>
> Set c = Nothing
> Set rng = Nothing
>
> End Sub
>
> Assumendo che sh sia il riferimento al Foglio1.
>
> Inoltre.
> Utilizza le proprietà degli oggetti:
>
> TextBox2.Text = qualcosa
> e non
> TextBox2 = qualcosa
>
> Prova un po'.
>
> --
> ---------------------------
> Mauro Gamberinihttp://www.riolab.org/http://www.maurogsc.eu/http://social.microsoft.com/Forums/it-IT/officeit/threads
Ho creato un nuovo file dove c'è una tabella di tre colonne dove la
colonna A è quella che uso per ricercare i dati, dove c'è una userform
con un pulsante una ComboBox e tre TextBox dopo varie prove questo è
il codice che sembra funzionare
Private Sub CommandButton1_Click()
Dim wk As Workbooks
Dim sh1 As Worksheet
Dim sh2 As Worksheet
Dim sh3 As Worksheet
Dim sh4 As Worksheet
Dim sh5 As Worksheet
Dim sh6 As Worksheet
If Len(Me.ComboBox1.Text) = 0 Then
MsgBox "Inserisci Identificativo"
Me.ComboBox1.SetFocus
Exit Sub
End If
Dim rn As Range
Dim c As Range
Set rn = Range("A1:A10")
Set sh1 = Worksheets("Foglio1")' Questa riga l'ho aggiunta dopo per la
disperazione, anche se non mi sembra poi una gran bestialità
With sh1
For Each c In rn
If c.Value = Me.ComboBox1.Text Then
Y = c.Value
TextBox1 = c.Value 'Qui si ferma il codice quando il foglio 1 è
nascosto, stavolta non riesco a spiegarmi perchè
TextBox2 = c.Offset(0, 1).Value
TextBox3 = c.Offset(0, 2).Value
Dim irisposta As Integer
irisposta = MsgBox("Trovato " & Y & ". Vuoi fermarti ?", vbYesNo)
If irisposta = vbYes Then
Exit For
End If
End If
Next c
End With
Set c = Nothing
Set rn = Nothing
End Sub
Funziona benissimo se non nascondo i fogli altrimenti nel punto dove
ti ho segnalato sul codice si blocca.
Mi sta venendo il mal di testa tutta questa fatica per riscrivere il
codice e siamo da capo, e la cosa che mi rattrista è che io sono al
massimo delle mie conoscenze( anzi grazie a te le ho superate di un
bel pezzettino).
If Len(Me.ComboBox1.Text) = 0 Then
MsgBox "Inserisci Identificativo"
Me.ComboBox1.SetFocus
Exit Sub
End If
Dim rn As Range
Dim c As Range
Set rn = Range("A1:A10")
Set sh1 = Worksheets("Foglio1")
With sh1
For Each c In rn
If c.Value = Me.ComboBox1.Text Then
Y = c.Value
Me.TextBox1.Text = c.Value
Me.TextBox2.Text = c.Offset(0, 1).Value
Me.TextBox3.Text = c.Offset(0, 2).Value
Dim irisposta As Integer
irisposta = MsgBox("Trovato " & Y & ". Vuoi fermarti ?", vbYesNo)
If irisposta = vbYes Then
Exit For
End If
End If
Next c
End With
Set c = Nothing
Set rn = Nothing
End Sub
ho fatto anche queste modifiche ma niente non so più cosa fare
> Set rn = Range("A1:A10")
> Set sh1 = Worksheets("Foglio1")
Ciao Fabrizio,
non ho seguito molto il thread e forse mi intrometto a sproposito,
ma rn = range("A1:A10") a quale foglio si riferisce?
Secondo me sarebbe buona norma rispettare la gerarchia: prima definire
(eventualmente) il workbook, poi il/i worksheets poi i vari range.
Quindi se rn è un range di "Foglio1":
Set sh1 = Worksheets("Foglio1")
Set rn = sh1.Range("A1:A10")
> With sh1
A cosa serve impostare with su sh1 se non ne fai nessun riferimento?
Eventualmente deposita il file su un server di sharing.
Bye!
Scossa
Nella tua routine, fai il Set del Range
(cio� metti un riferimento al Range
A2:N900) *senza indicare* a quale
foglio ti riferisci.
La giusta sequenza sarebbe questa:
Dichiaro le variabili con(che sono
solo dichiarate e non fanno riferimento
a nulla)
Quindi faccio il Set delle variabili indicando
a quale oggetto fanno riferimento.
La cosa, in questo caso, ha un suo
ordine ben preciso:
1)indico il workbook sul quale ho il codice
2)indico quale foglio di quel workbook
3)indico quale range di quel foglio
Nel codice che hai postato vedo qualcosa di diverso.
Ho creato un nuovo file dove c'� una tabella di tre colonne dove la
colonna A � quella che uso per ricercare i dati, dove c'� una userform
con un pulsante una ComboBox e tre TextBox dopo varie prove questo �
il codice che sembra funzionare
****************************************************
L'ho fatto anch'io.
Questo il codice della UserForm:
'dichiaro le variabili visibili
'da tutta la UserForm
Private wk As Workbook
Private sh1 As Worksheet
Private sh2 As Worksheet
Private sh3 As Worksheet
Private Sub UserForm_Initialize()
'metto un riferimento al workbook
'con il codice e ai suoi fogli
Set wk = ThisWorkbook
With wk
Set sh1 = .Worksheets("Foglio1")
Set sh2 = .Worksheets("Foglio2")
Set sh3 = .Worksheets("Foglio3")
End With
'carico la ComboBox(questo �
'uno dei tanti modi per farlo)
With Me.ComboBox1
.RowSource = sh1.Name & "!A1:A10"
End With
End Sub
Private Sub CommandButton1_Click()
'richiamo la routine di ricerca
'passandole il valore da ricercare
Call mRicerca(Me.ComboBox1.Text)
End Sub
Private Sub ComboBox1_Click()
'richiamo la routine di ricerca
'passandole il valore da ricercare
Call mRicerca(Me.ComboBox1.Text)
End Sub
Private Sub mRicerca(ByVal v As Variant)
If Len(Me.ComboBox1.Text) = 0 Then
MsgBox "Selezionare un valore"
Exit Sub
End If
'dichiaro le variabili
Dim c As Range
Dim rng As Range
'pulisco le TextBox dai dati
'precedenti
Call mVuotaTextBox
With sh1
'metto un riferimento al Range
'A1:A10 del Foglio1
Set rng = .Range("A1:A10")
'ciclo il Range
For Each c In rng
'se il valore di c � ugale
'al valore passato come parametro
If c.Value = v Then
'riempi le TextBox
Me.TextBox1.Text = _
c.Value
Me.TextBox2.Text = _
c.Offset(0, 1).Value
Me.TextBox3.Text = _
c.Offset(0, 2).Value
End If
Next
End With
End Sub
Private Sub mVuotaTextBox()
'pulisco le TextBox
With Me
.TextBox1.Text = ""
.TextBox2.Text = ""
.TextBox3.Text = ""
End With
End Sub
Private Sub UserForm_Terminate()
'Set a Nothing delle variabili oggetto
Set sh3 = Nothing
Set sh2 = Nothing
Set sh1 = Nothing
Set wk = Nothing
End Sub
E qui trovi il file:
http://www.maurogsc.eu/esemping/foglionascosto.zip
E come vedi, il Foglio1 � nascosto,
per� tutto funziona. Nascosto, non
protetto. Perch� se parliamo di protezione
(quale e dove?) dobbiamo aggiungere
qualcosa.
A s�, dimenticavo...
Perch� utilizzi un pulsante per validare la scelta
che hai fatto nella ComboBox?
Il codice postato e che trovi nel file,
ti mostra come sia possibile chiamare la
routine di ricerca direttamente con la
scelta fatta nella ComboBox.
La routine � chiamata *anche* dal
CommandButton. Questi i due eventi:
Private Sub CommandButton1_Click()
'richiamo la routine di ricerca
'passandole il valore da ricercare
Call mRicerca(Me.ComboBox1.Text)
End Sub
Private Sub ComboBox1_Click()
'richiamo la routine di ricerca
'passandole il valore da ricercare
Call mRicerca(Me.ComboBox1.Text)
End Sub
Commenta o elimina
l'evento che non ti serve.
Grazie, sei gentilissimo, però ieri ho notato che se usavo Option
Explicit poi non potevo dichiarare più variabili all'interno del
codice perchè non le riconosce(questo mi sembra di aver capito
leggendo l' help di excel),
in realtà io ho bisogno di poter continuare la ricerca dello stesso
criterio nella tabella se esistono altri dati con che corrispondono
allo stesso criterio, io usavo questo per farlo
Set sh1 = Worksheets("Foglio1")
Set rn = Range("A1:A10")
With sh1
For Each c In rn
If c.Value = Me.ComboBox1.Text Then
Y = c.Value '(in pratica non mi riconosce questa variabile e quindi
non mi fa funzionare il codice, ho provato a metterla nella parte dove
dichiaro le altre macredo per miei limiti non va')
Me.TextBox1.Text = c.Value
Me.TextBox2.Text = c.Offset(0, 1).Value
Me.TextBox3.Text = c.Offset(0, 2).Value
Dim irisposta As Integer
irisposta = MsgBox("Trovato " & Y & ". Vuoi fermarti ?", vbYesNo)
If irisposta = vbYes Then
Exit For
Next c
risali ancora in cattedra please! comunque sia ti ringrazio perchè ho
imparato tantissimo con il tuo aiuto in questo lavoro
Allora...
Option Explicit c'� in tutti i miei moduli,
ci mancherebbe! A volte non li posto
nelle risposte, ma se guardi i moduli degli
esempi, c'� sempre!
in realt� io ho bisogno di poter continuare la ricerca dello stesso
criterio nella tabella se esistono altri dati con che corrispondono
allo stesso criterio, io usavo questo per farlo
************************************************
Partiamo dal file scaricabile qui:
http://www.maurogsc.eu/esemping/foglionascosto.zip
Io per fare quanto chiedi, farei cos�:
Private Sub mRicerca(ByVal v As Variant)
If Len(Me.ComboBox1.Text) = 0 Then
MsgBox "Selezionare un valore"
Exit Sub
End If
'dichiaro le variabili
Dim c As Range
Dim rng As Range
Dim lRisposta
'pulisco le TextBox dai dati
'precedenti
Call mVuotaTextBox
With sh1
'metto un riferimento al Range
'A1:A10 del Foglio1
Set rng = .Range("A1:A10")
'ciclo il Range
For Each c In rng
'se il valore di c � ugale
'al valore passato come parametro
If c.Value = v Then
'riempi le TextBox
Me.TextBox1.Text = _
c.Value
Me.TextBox2.Text = _
c.Offset(0, 1).Value
Me.TextBox3.Text = _
c.Offset(0, 2).Value
lRisposta = MsgBox(Prompt:="Vuoi continuare.", _
Title:="Trovato un riscontro", _
Buttons:=vbYesNo + vbQuestion)
If lRisposta = vbNo Then
Exit Sub
End If
End If
Next
End With
End Sub
Sostituendo con questa, la routine
con lo stesso nome che hai nel
file scaricato.
Ovviamente metti 2 o pi� valori uguali in colonna A
se vuoi vedere come funziona... ;-)
Grazie ora funziona perfettamente, faccio ancora degli errori nel
scrivere codici ma mi sto avvicinando,
visto che ci sono ti chiedo due cosette che leggendo il tuo codice non
mi sono molto chiare
Private Sub mRicerca(ByVal v As Variant) perchè ?
Dim iRisposta non hai dato nessun valore cosa significa?
Tutti facciamo ancora degli errori.
visto che ci sono ti chiedo due cosette che leggendo il tuo codice non
mi sono molto chiare
Private Sub mRicerca(ByVal v As Variant) perch� ?
******************************************
Vuol dire che la routine si
aspetta un valore di tipo Variant.
Di tipo variant perch� io non so
che tipo di valore stai cercando,
anche se, a dire il vero, sia
la TextBox che la ComboBox
restituiscono una String dalla propriet�
Text.
Il click sul pulsante, ad esempio,
chiama la routine e le passa il valore
che ha la ComboBox:
Private Sub CommandButton1_Click()
'richiamo la routine di ricerca
'passandole il valore da ricercare
Call mRicerca(Me.ComboBox1.Text)
End Sub
Private Sub mRicerca(ByVal v As Variant)
'codice
'qui v ha il valore
'che hai passato fra le
'parentesi quando hai
'chiamato la Sub dal
'CommandButton
If c.Value = v Then
'codice
End Sub
Dim iRisposta non hai dato nessun valore cosa significa?
******************************************
S� che l'ho valorizzato!
lRisposta = MsgBox(Prompt:="Vuoi continuare.", _
Title:="Trovato un riscontro", _
Buttons:=vbYesNo + vbQuestion)
If lRisposta = vbNo Then
Exit Sub
End If
In pratica passo il valore restituito dal pulsante
che hai premuto. Poi controllo il valore
nell' If e in base a quello eseguo o
meno codice.
Grazie per l'attenzione e buona serata.
Grazie a te, sei stato gentilissimo
;-)