Como programar spinbutton para alterar entre planilhas com uma característica comum?
-
sábado, 4 de agosto de 2012 21:46
Olá,
Possuo algumas planilhas que possuem em seus nomes uma palavra em comum. Por exemplo, em "Médicos (Sorocaba)", "Médicos (Manaus)", "Dentistas (Sorocaba)", a cidade de "Sorocaba" aparece duas vezes.
Assim, a partir de um formulário em que o usuário digitasse "Sorocaba", as planilhas referentes a essas cidades seriam abertas, sendo que haveria um spinbutton para alterar entre elas.
Abrir uma planilha com um determinado nome é relativamente simples
digitado = textbox1.text For i = 1 To Sheets.count If Sheets(i).name = digitado Then sheets(i).select End If Next iComo as planilhas possuem nomes maiores que simplesmente a cidade digitada, acredito que eu deva usar a função InStr(1, digitado, sheets(i).name, 1) para verificar se "digitado" pertence ao nome da planilha, assim:
digitado = textbox1.text For i = 1 To Sheets.count If InStr(1, digitado, sheets(i).name, 1) <> 0 and InStr(1, digitado, sheets(i).name, 1) <> Null Then planilhas_encontradas(j) = i j = j+1 End If Next i sheets(planilhas_encontradas(0)).select
Minha pergunta fica em relação ao uso de spinbutton para alterar entre cada "planilhas_encontradas(j)"
Todas as Respostas
-
terça-feira, 7 de agosto de 2012 00:27
Eu reescreveria sua primeira rotina como mostrado abaixo:
Sub Exemplo() digitado = textbox1.Text For i = 1 To Sheets.Count If Sheets(i).Name = digitado Then On Error Resume Next Sheets(i).Select Sheets(i).Activate On Error GoTo 0 'É uma boa prática sair de um laço após termos satisfeito a condição: Exit Sub End If Next i End SubNão entendi muito bem sua pergunta final, mas tente isso:
Sub Exemplo2() digitado = textbox1.Text For i = 1 To Sheets.Count If InStr(1, digitado, Sheets(i).Name) > 0 Then On Error Resume Next Sheets(i).Select Sheets(i).Activate On Error GoTo 0 Exit For End If Next i End Sub
Felipe Costa Gualberto - http://www.ambienteoffice.com.br
-
terça-feira, 7 de agosto de 2012 23:17
Obrigado, acho que dei menos atenção à pergunta e mais à parte anterior.
Tentarei descrever melhor o problema:
Primeiramente encontramos a lista de planilhas contendo em seu nome um termo digitado em uma textbox (para isto, uso o InStr() na verificação, da forma como apresentou e salvo em um vetor, por exemplo, o número das planilhas que contém o que foi digitado).
planilhas_encontradas(j) = i
A princípio, bastava abrir a primeira planilha encontrada (aliás, neste caso, tem diferença entre .Select e .Activate?).
Sheets(i).Select
No entanto, pode haver mais de uma planiha contendo em seu nome o valor digitado na textbox. Por isso, o que pretendo fazer é abrir um novo userform que reunirá as respostas da busca acima. Isto é, haverá um label e um spinbutton que, conforme é rolado (Up e down), vão se abrindo as planilhas contendo em seu nome o que havia sido digitado lá no userform anterior.
Como não tenho experiência com SpinButton, pensei em criar dois botões. Porém travei novamente, pois não sei como faço para enviar variáveis de um formulário para outro (no caso,o vetor planilhas_encontradas(j)).
-
terça-feira, 7 de agosto de 2012 23:37
Seja Lista_de_Plan() o vetor que guarda os números das planilhas que contêm uma palavra digitada em um textbox.
Bem, no form seguinte, há um spinbutton, no qual inseri a seguinte função:
Private Sub SpinButton1_SpinUp() Sheets(Lista_de_Plan(SpinButton1.Value)).Select End SubDeveria estar funcionando, porém alerta para o seguinte erro: "Erro de compilação, sub ou function não definida". Ou seja, o novo formulário parece não estar reconhecendo Lista_de_Plan().
Para resolver isso, declarei "Lista_de_Plan()" em Módulo 1, mesmo assim não está funcionando.
==========================================
Uma outra solução seria, ao invés de exportar Lista_de_Plan() para o novo userform, exportar apenas o que foi digitado na textbox e refazer a busca no novo userform, mas também não consegui "exportar" textbox1.caption para outro form.
- Editado marlon2s terça-feira, 7 de agosto de 2012 23:56 adicionar dúvida sobre uma outra solução
- Sugerido como Resposta Hezequias VasconcelosModerator terça-feira, 11 de setembro de 2012 15:40
-
quarta-feira, 8 de agosto de 2012 01:34
Crie um formulário com:
1 TextBox (Caixa de Texto)
1 SpinButton (Botão de Rotação)
1 Label (Rótulo)
Cole o código abaixo:
Dim vlLista() As Long Private Sub SpinButton1_Change() AtualizarLabel End Sub Private Sub TextBox1_Change() AtualizarPlanilhas End Sub Private Sub UserForm_Initialize() Erase vlLista AtualizarPlanilhas End Sub Private Sub AtualizarPlanilhas() Dim lCont As Long Dim lPlan As Long With ActiveWorkbook For lPlan = 1 To .Sheets.Count If .Sheets(lPlan).Name Like "*" & TextBox1 & "*" Then lCont = lCont + 1 ReDim Preserve vlLista(1 To lCont) vlLista(lCont) = lPlan End If Next lPlan End With If lCont > 0 Then SpinButton1.Enabled = True SpinButton1.Min = 1 SpinButton1.Max = lCont SpinButton1 = 1 AtualizarLabel Else SpinButton1.Enabled = False Label1 = "" End If End Sub Private Sub AtualizarLabel() Label1 = Sheets(vlLista(SpinButton1)).Name End Sub
Felipe Costa Gualberto - http://www.ambienteoffice.com.br
- Sugerido como Resposta Hezequias VasconcelosModerator terça-feira, 11 de setembro de 2012 15:40
- Marcado como Resposta Hezequias VasconcelosModerator quarta-feira, 12 de setembro de 2012 11:07
-
quarta-feira, 8 de agosto de 2012 01:35O código acima diferencia maiúsculas de minúsculas, é isso o que quer?
Felipe Costa Gualberto - http://www.ambienteoffice.com.br

