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
, Manager
emA1, então o valor emB1é gerado automaticamente usando umUDF IF
Fó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.