Validando os “resultados” da barra de rolagem no Excel

0

Pesquisei alto e baixo, mas não achei nada que pudesse me ajudar.

Aqui está o meu problema:

Eu preciso definir um intervalo de datas com dois controles deslizantes. Um controle deslizante define a data inicial do período examinado, o segundo define a data final. Isso em si não é um problema, mas preciso validá-lo. Por exemplo. quando o usuário quiser definir a data inicial depois da data final (ou vice-versa), o programa não deve permitir.

O que tentei até agora:

Uma simples lista de validação seria legal. Eu poderia selecionar as datas de uma outra lista para usar esses valores. Mas eu preciso usar uma lista de rolagem com um valor apresentado no momento e com duas setas, e não um drop down.

Eu tentei definir a validação nas células onde as datas são representadas, mas isso só funciona se eu as inserir manualmente e não reagir aos valores fornecidos pelos sliders.

Eu tentei configurar uma macro que define o valor máximo do início-data-setter-scroll para o valor do fim-data-setter-scroll, mas falhei miseravelmente (e eu acho que a resposta é muito mais mais simples que isso.

Eu até usei IF (= IF (A2 > A1; A1; "ERROR")), mas novamente: isso não impede que o usuário insira os dados errados. E o valor real dos sliders ainda pode ser aumentado, então, se eu quiser me corrigir e diminuir seu valor, talvez tenha que pressioná-lo mais de uma vez.

    
por Letokteren 16.11.2014 / 20:15

1 resposta

0

Você pode atribuir uma macro a cada barra de rolagem que verificará se a data final é uma data válida. Use a mesma macro para ambas as barras de rolagem. Neste exemplo de código, C3 tem a data de início, G3 tem a data final. Sempre que a data de término for anterior à data de início, a macro exibirá uma mensagem e, em seguida, definirá a data de término igual à data de início.

Sub ScrollBar_Change()
Dim ws As Worksheet
Set ws = ActiveWorkbook.Worksheets("Sheet1")
    If ws.Range("G3") < ws.Range("C3") Then
        MsgBox "End date cannot be earlier than Start Date. Adjusting End date"
        ws.Range("G3") = ws.Range("C3")
    End If
End Sub
    
por 17.11.2014 / 04:14