Hola:
Este problema se produce porque en tu código muestras el mensaje por cada lectura, deberías utilizar un indicar para saber si encontraste registros o no a fin mostrar el mensaje si es necesario.
Te copio tu código y te modifico como lo haría yo.
Código:
Private Sub Command5_Click()
On Error GoTo Errores
For i = 1 To MSFlexGrid1.Rows - 1
If Year(MSFlexGrid1.TextMatrix(i, 6)) = Combo1 Then
Mes = Month(MSFlexGrid1.TextMatrix(i, 6))
Mensuales(Mes) = Mensuales(Mes) + MSFlexGrid1.TextMatrix(i, 9)
Text2(Mes) = Mensuales(Mes)
HalladoAlguno = True ' Aunque sólo se halle 1 esta variable sera True
end if
Next i
if Not HalladoAlguno then MsgBox "No hay registros para el período seleccionado"
Exit Sub
Errores:
MsgBox "Se ha producido error al procesar la fecha " & MSFlexGrid1.TextMatrix(i, 6)
End Sub
Respecto a lo que te comentaba de cargar en el Combo sólo los años que tengan valor, puedes crear la siguiente rutina que es ademas reutilizable para cualquier combo:
Código:
' Si se cree oportuno, definir estas 2 propiedades en el combo así
' Style = 2 'DropDown List ' Para forzar a elegir un elemento de la lista
' Sorted = True ' Para que salgan Ordenados los Items
Private Sub ComboAdd(Combo As ComboBox, Dato As String)
' Añade Dato al Combo si ya no está en el
Dim Item As Integer
For Item = 0 To Combo.ListCount - 1
If Combo.List(Item) = Dato Then Exit Sub
Next
Combo.AddItem Dato
End Sub
Previamente en un bucle puedes poner asi de facil en el combo los años que encontrarás en el Grid
For i = 1 To MSFlexGrid1.Rows - 1
ComboAdd Combo1, str$(Year(MSFlexGrid1.TextMatrix(i, 6)))
Next
Cualquier duda me comentas y por cierto gracias por tus halagos, pero personalmente pienso que en esto de la programación como en muchas otras cosas lo importante es que te guste lo que estás haciendo.
Saludos