Una famiglia di software per fogli di calcolo Microsoft con strumenti per l'analisi, la creazione di grafici e la comunicazione dei dati.
Ciao Danilo,
Ma come fai!, ma!., comunque grazie mille perché ogni altro commento è inutile(ok:-)).
L'ultima, se vuoi, un piccolo commento è possibile? vorrei capire di più.
Mi hai reso per l'ennesima volta una persona felice. BRAVO.
In verità si potrebbe scrivere un intero libro sui i moduli Classe e un altro su gli eventi di applicazione!
Tuttavia, tenendo sempre conto del mio esecrabile italiano, ci proverò a spiegare l'implementazione in questo caso.
Abbiamo creato um modulo classe e abbiamo dichiarato, al livello del modulo, un oggetto MyLabel come un controllo Label:
Cliccando sulla casella a discesa sinistra, possiamo selezionare la voce MyLabel
A questo punto se vedrà un elenco di tutti gli eventi disponibile al nuovo oggetto MyLabel
Selezionando l'opzione Click, se crea automaticamente una procedura vuota per l'evento click del nostro nuovo oggetto MyLabel:
Volendo utilizzare l'evento click per ricercare il nome di un oggetto Label nei fogli del workbook, aggiugiamo il necessario codice:
'--------->>
Private Sub MyLabel_Click()
Dim WB As Workbook
Dim SH As Worksheet
Dim Rng As Range
Dim sStr As String
Dim bTrovato As Boolean
sStr = MyLabel.Name
Set WB = ThisWorkbook
For Each SH In WB.Sheets(Array("Foglio1", "Foglio2", "Foglio3"))
With SH.Cells
.Interior.ColorIndex = xlNone
Set Rng = .Find(What:=sStr, _
LookIn:=xlValues, _
LookAt:=xlWhole, _
SearchOrder:=xlByRows, _
SearchDirection:=xlNext, _
MatchCase:=False)
If Not Rng Is Nothing Then
bTrovato = True
Exit For
End If
End With
Next SH
If bTrovato Then
Rng.Interior.Color = RGB(255, 0, 0)
Call MsgBox( _
Prompt:="Il testo " & sStr _
& " è stato trovato sul foglio " _
& SH.Name & " nella cella " _
& Rng.Address(0, 0), _
Buttons:=vbInformation, _
Title:="REPORT")
Application.Goto Rng
End If
End Sub
'<<=========
A questo punto abbiamo creato un oggetto MyLabel e abbiamo creato un evento click legato a questo oggetto. Tuttavia, finora, le 15 label sulla nostra Userform non sanno nulla del modulo classe, l'oggetto MyLabel o l'evento click che abbiamo appena creato.
Quindi, torniamo ora al modulo di codice della Userform per completare il compito!
Nella procedura modulo di codice della Userform, utilizziamo la procedura UserForm_Initialize per effettuare il lovoro pendente. Pertanto, credo che sia opportuno considerare il suo codice con commenti in linea:
'=========>>
Option Explicit
Dim m_colLabels As Collection
'--------->>
Private Sub UserForm_Initialize()
Dim clsLab As Class1
Dim Ctrl As msforms.Control
Set m_colLabels = New Collection
For Each Ctrl In Me.Controls
\ Cicliamo tra tutti i controlli sulla Userform e utilizziamo
\ la funzione TypeNameper individuare i controlli Label:
If TypeName(Ctrl) = "Label" Then
\ Avendo individuato un controllo Label , creamouna nuova
**** \instanza del nostroClass1*:*
Set clsLab = New Class1
\ Ora, assegniamo il controllo label che abbiamo appena
\ individuata a questa nuova istanza del nostroClass1e,
\ quindi all’oggetto MyLabelche abbiamo creato li dentro
Set clsLab.MyLabel = Ctrl
\ Adesso aggiungiamo la nuova istanza delClass1 alla
\ collectionm_colLabels
m_colLabels.Add clsLab, CStr(m_colLabels.Count + 1)
End If
Next Ctrl
End Sub
'<<=========
Nota che abbiamo dichiarato la collection m_colLabels al livello del modulo della Userform in modo che sia sempre accessibile alla Userform.
Sperando di non essere stato del tutto incomprensibile e di averti stuzzicato l'appetito per gli event dell'applicatione e i moduli class, per una discussione più approfondita della materia, ti consiglio la lettura dei due articoli (in inglese) Application Events e **Introduction To Classe**s di Chip Pearson.
===
Regards,
Norman