Una famiglia di software per fogli di calcolo Microsoft con strumenti per l'analisi, la creazione di grafici e la comunicazione dei dati.
Ciao MecFala.
Ho aggiornato il tuo file come segue:
- Sul foglio Clienti, ho esteso l'elenco di clienti a 75 clienti e ho convertito l'elenco in una tabella di Excel, Tabella2
- Ho creato il nome ElencoClienti per la seconda colonna della tabella, cioe' i nomi delle ditte
- Ho ordinato la tabella in modo alfabetico
- Ho utilizzato questo nome, ElencoClienti, per alimentare la convalida dati sul foglio Giornale
- Nel modulo di codice del foglio Giornale ho incollato il seguente codice:
'=========>>
Option Explicit
'--------->>
Private Sub ComboBox1_KeyDown(ByVal _
KeyCode As MSForms.ReturnInteger, _
ByVal Shift As Integer)
Select Case KeyCode
Case 9 '\ Tab key
ActiveCell.Offset(0, 1).Activate
Case 13 '\ Enter key
ActiveCell.Offset(1, 0).Activate
Case Else
'\ Do nothing
End Select
End Sub
'--------->>
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim SHconvalida As Worksheet
Dim sStr As String
Dim cBox As MSForms.ComboBox
Set cBox = Me.ComboBox1
Set SHconvalida = ThisWorkbook.Sheets("Clienti")
On Error GoTo XIT
If Target.Validation.Type = 3 Then
Cancel = True
End If
On Error Resume Next
With cBox
.ListFillRange = vbNullString
.LinkedCell = vbNullString
.Visible = False
End With
On Error GoTo XIT
If Target.Validation.Type = 3 Then
Application.EnableEvents = False
sStr = Target.Validation.Formula1
sStr = Right(sStr, Len(sStr) - 1)
With cBox
.Visible = True
.Left = Target.Left
.Top = Target.Top
.Width = Target.Width + 15
.Height = Target.Height + 5
.ListFillRange = SHconvalida.Range(sStr).Address(External:=True)
.LinkedCell = Target.Address
.Activate
.SelStart = 0
.SelLength = Len(.Text)
.DropDown
End With
End If
XIT:
Application.EnableEvents = True
End Sub
'--------->>
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim cBox As MSForms.ComboBox
Dim sStr As String
Set cBox = Me.ComboBox1
On Error Resume Next
With cBox 'Me.ComboBox1
If .Visible = True Then
.Top = 10
.Left = 10
.ListFillRange = ""
.LinkedCell = ""
.Visible = False
.Value = ""
End If
End With
XIT:
With Application
.ScreenUpdating = True
.EnableEvents = True
End With
End Sub
'<<=========
In questo modo, si può utilizzare sia la normale convalida dei dati o, facendo doppio clic su una cella, utilizzare la ComboBox.
Con l'uso della ComboBox, digitando una o più lettere, viene visualizzato il nome corrispondente; se l'elenco di convalida dati sia ordinato in sequenza alfabetica, verrà selezionato il nome corrispondente e le 7 nomi seguenti verranno visualizzati al di sotto.
Ho caricato il file aggiornato MecFala3_20151122.xlsm a:
===
Regards,
Norman