Salve a tutti.
Sto cercando di creare delle combobox per filtrare dei dati su un file excel. La tabella origine dei dati è su un foglio chiamato "data"; su il secondo foglio "View" dello stesso file ho creato 3 pulsanti con 2 combobox dove filtrare i dati e avere ciò che mi serve.
Premetto che ho APPENA iniziato a vedere il codice VBA di excel e non ho assolutamente competenze in programmazione. Tutto quello che so è perchè dalla scorsa settimana ho trovato un po di esempi di codice su internet e li ho in qualche modo cercati di capire per riprodurli.
Copio qui il codice che ho scritto relativo ai pulsanti "Upload", doce carico i valori nella combobox; e il pulsante "Show data", che mi filtra i dati che cerco. (il terzo tasto è reset ma è inutile che ve lo copio)
La connessione tra la tabella origine dei miei dati e il foglio "View" la faccio in un modulo a parte che copio qui:codice:Private Sub cmdShowData_Click() strSQL = "SELECT * FROM [data$] WHERE" If cmbStatus.Text <> "" Then strSQL = strSQL & " [Status]='" & cmbStatus.Text & "'" End If If cmbSO.Text <> "" Then If cmbStatus.Text <> "" Then strSQL = strSQL & " AND [SO]='" & cmbSO.Text & "'" Else strSQL = strSQL & " [SO]='" & cmbSO.Text & "'" End If End If If cmbStatus.Text <> "" Or cmbSO.Text <> "" Then closeRS OpenDB rs.Open strSQL, cnn, adOpenKeyset, adLockOptimistic If rs.RecordCount > 0 Then Sheets("View").Visible = True Sheets("View").Select Range(Selection, Selection.End(xlDown)).ClearContents ActiveCell.CopyFromRecordset rs Else MsgBox "I was not able to find any matching records.", vbExclamation + vbOKOnly Exit Sub End If End If End Sub Private Sub cmdUpload_Click() strSQL = "Select distinct [Status] from [data$] Order by [Status] " closeRS OpenDB cmbStatus.Clear rs.Open strSQL, cnn, adOpenKeyset, adLockPessimistic If rs.RecordCount > 0 Then Do While Not rs.EOF cmbStatus.AddItem rs.Fields(0) rs.MoveNext Loop Else MsgBox "I was not able to find any unique Products.", vbCritical + vbOKOnly Exit Sub End If '---------------------------------------------------------------------------------- strSQL = "Select distinct [SO] from [data$] Order by [SO] " closeRS OpenDB cmbSO.Clear rs.Open strSQL, cnn, adOpenKeyset, adLockPessimistic If rs.RecordCount > 0 Then Do While Not rs.EOF cmbSO.AddItem rs.Fields(0) rs.MoveNext Loop Else MsgBox "I was not able to find any unique Products.", vbCritical + vbOKOnly Exit Sub End If End Sub
Ho 2 domande da fare. La prima: Ora le 2 combobox sono tra loro indipendenti, cioè indipendentemente dalla voce che seleziono nella combobox1, mi compaiono nella combobox2 tutte le voci possibili che ci sono nella tabella origine dati. Invece io voglio che nella combobox 2 mi compaia la lista filtrata in base alla selezione della combobox1 e viceversa. Ho letto su altri post che bisogna cambiare la proprietà RowSource dopo che si verifica l'evento "selezione della combobox1". Giusto? Se si come si fa?codice:Option Explicit Public cnn As New ADODB.Connection Public rs As New ADODB.Recordset Public strSQL As String Public Sub OpenDB() If cnn.State = adStateOpen Then cnn.Close cnn.ConnectionString = "Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};DBQ=" & _ ActiveWorkbook.Path & Application.PathSeparator & ActiveWorkbook.Name cnn.Open End Sub Public Sub closeRS() If rs.State = adStateOpen Then rs.Close rs.CursorLocation = adUseClient End Sub
Un altro modo è utilizzando "SelectedIndexChanged" ma ancora se giusto non so come farlo.
Posso rompere le scatole a qualcuno e chiedere se me lo spiega in modo telegrafico?
Seconda domanda: Se il foglio "data" (dove c'è la tabella fonte dei miei dati) fosse su un altro file Excel, come dovrei fare?
Grazie in anticipo

Rispondi quotando
