Combinando Excel UDF e validação condicional de dados personalizados na entrada de dados

Combinando Excel UDF e validação condicional de dados personalizados na entrada de dados

Portanto, com base na pesquisa, isso pode não ser possível sem o uso do código VBA, mas, mesmo assim, acho que vale a pena perguntar. Quero permitir que um usuário insira dados em uma célula apenas se e somente se o adjacente anterior for um valor específico.

Por exemplo, você tem uma lista suspensa em A1 com os seguintes valores; Staff, Student, Manager, Board. Se o usuário selecionar Staff, Student, ManageremA1, então o valor emB1é gerado automaticamente usando umUDF IFFórmula, mas se o valor selecionado em A1 for Board, o usuário poderá inserir um valor numérico específico emB1.

Como a validação personalizada deve retornarverdadeiroouFALSOnão existe nenhuma fórmula que possa ser inserida na guia de fórmula dovalidação de dados personalizadajanela.

Então, existe uma solução alternativa onde a fórmula pode ser inserida na célula e então a fórmula não existirá se a escolha emA1é Board.

Espero que isso seja bastante compreensível.

Se não houver, alguém pode ajudar com alguma construção de código para me permitir superar esse problema? Como meu conhecimento em VBA ainda é muito amador.

Então, pelo que sei, acredito que um código nesse tipo de construção seria aplicável;

If Select Case Range(A1).Value = "Staff" Then B1 = Application.WorksheetFunction. (Since a Match function is employed) ElseIf Select Case Range(A1).Value = "Student" Then B1 = Application.WorksheetFunction. ElseIf Select Case Range(A1).Value = "Manager" Then B1 = Application.WorksheetFunction. ElseIf Select Case Range(A1).Value = "Board" Then (My knowledge fails me here) Else B1 ="" End If

Se possível, eu realmente não quero empregar o uso deInputBox

Obrigado pela sua resposta.

Responder1

A menos que esteja faltando alguma coisa, a UDF está escrita em VBA, então você já tem algum código em sua pasta de trabalho.

Além disso, presumo que sua pasta de trabalho esteja bloqueada para evitar que pessoas insiram dados em células que não deveriam.

Com base nessas suposições, e limpando um pouco seu pseudocódigo, modifique sua UDF existente com algumas linhas de código adicionais:

Dim refCell as Range
refCell = ThisWorkbook.Worksheets(mySheet).Range("A1")
Dim targetCell as Range
targetCell = ThisWorkbook.Worksheets(mySheet).Range("B1")
With refCell
  If .Value = "Staff" or .Value = "Manager" or .Value = "Board" then
    targetCell.Locked = True
    'Call your existing UDF code here to generate the value
  Else
    targetCell.Locked = False
  End If
End With

Isso deve começar.

informação relacionada