Comando Select Case com intervalos nomeados no combobox

Caros, Boa Tarde,

Tenho uma dúvida sobre o seguinte trecho de código:

Private Sub SelectRegion( pEvent )

Dim sRegiao() As String
Dim nCount as string

Select Case txtIDEnt.Text
	Case "1.FALCHI"
		nCount = txtEntid.getItemCount()
		txtEntid.removeItems(0,nCount)
		sRegiao() = Array("25.ASSOC. ACECTS", "65.SAGRADO CORAÇÃO DE JESUS", "")
		For i = LBound(sRegiao() ) To UBound(sRegiao() )
			txtEntid.addItem(sRegiao(i), (0), 50)
		Next i
	Case "2.FEITAL"
		nCount = txtEntid.getItemCount()
		txtEntid.removeItems(0,nCount)
		sRegiao() = Array("27.ASSOC. AMIGOS DO INGA", "31.ASSOC. JD. FEITAL", "")
		For i = LBound(sRegiao() ) To UBound(sRegiao() )
			txtEntid.addItem(sRegiao(i), (0), 50)
		Next i
End Select	

End Sub

Este código vai em duas combobox. A primeira trata as regiões, enquanto que a segunda trata as entidades nestas regiões, conforme segue:

FALCHI = 25.ASSOC. ACECTS ou 65.SAGRADO CORAÇÃO DE JESUS
FEITAL = 27.ASSOC. AMIGOS DO INGA ou 31.ASSOC. JD. FEITAL

As regiões são fixas, não mudam, pq são regiões que seguem o mapeamento urbano da cidade. Já as entidades podem variar, pois acompanham o sabor de custos dos locais onde estão instaladas (aluguel, outros custos)

Como posso fazer para, em vez de colocar os nomes das entidades no código da macro, eu trabalhar com intervalos nomeados, até para tratar mais facilmente as mudanças?

Obrigado desde já.

Seria algo semelhante ou igual a resposta dada aqui?

.
----------COMPLEMENTO----------

Com base nisso, alterei a Caixa de Combinação CRAS para Caixa de Lista. Fica melhor para trabalhar.
.

Fiz alteração na nomeclatura de ambas as variáveis, mas apliquei para tudo. Só vi que era para aplicar única e exclusivamente para o dlgCadastro depois de ter feito. Ou seja, pode dar algum erro de leitura em dlgPesquisa. (suposição, não testei)
.

.
Segue sugestão:

Private Sub SelectRegion( pEvent )

	Dim sCriterio As String
	Dim sEntidade As String
	Dim oNamedRange As Object
	Dim sItem As Variant
	Dim j As Long
	
	sEntidade = "EntidBenef"

	REM Obtem o texto/item da primeira comboBox
	sCriterio = lstIDEnt.getSelectedItem()

	REM Limpa a comboBox Entidade
	cbbEnt.Model.removeAllItems()
	
	REM Obtem os intevalos nomeados de Planilha específica (PARA OBTER TODOS OS INTERVALOS NOMEADOS, ESCOPO DEVE SER GLOBAL EM TODOS)
	REM Se escopo global, utilizar:
	REM oNamedRange = ThisComponent.NamedRanges
	oNamedRange = ThisComponent.Sheets.getByName("Database").NamedRanges
	
	REM Compara o intervalo nomeado com o criterio
	REM Se corresponder, obtem os dados em matriz
	REM Alimenta a Caixa de Combinação
	For i = 0 To oNamedRange.Count-1
		If oNamedRange.ElementNames(i) = sEntidade Then
			sItem = oNamedRange.getByName(sEntidade).getReferredCells(i).DataArray
			For j = 0 To UBound(sItem())
				cbbEnt.addItem(sItem(j)(0), 50) '''	Manter valor do parâmetro posição alto para ordenar crescente
			Next j
		End If
	Next i
End Sub

.
Arquivo Exemplo:
Ask_CadClientes.ods (271,9,KB)
.
Para as caixas funcionarem com dependência uma da outra, usando intervalos nomeados, o ideal é separar as entidades por região.
.
Dê uma olhada no último arquivo do tópico citado no início da resposta para entender.

1 Like

Felipe, Bom dia,

Sim, na ideia do projeto. Mas eu trabalho com uma caixa de diálogo (e combobox), que já foi iniciada em macro anterior, e estes exemplos que vc mencionou trabalham com caixa de lista, diretamente na planilha.

Este código que postei no início, eu ajustei da primeira planilha que vc me indicou, lá no começo das minhas interações aqui, a Projeto_ModeloCRUD.ods. Estamos falando aqui da mesma planilha de cadastro de clientes que tratamos anteriormente. Continuo trabalhando nela, e aprimorando novas solicitações dos usuários.

Este ajuste é apenas no módulo mCadastro, na função (Sub) SelectRegion que age em cima das Combos txtIDEnt e txtEntid da caixa de diálogo dlgcadastro

Segue a planilha:
00.Cadastro de Clientes (Para o AskLibreOffice).ods (274.0 KB)

Felipe, Bom dia,

Irei estudar suas considerações e os arquivos. Por enquanto, só posso agradecer pelas sugestões.

Uma excelente e abençoada semana.

Att,

@FelipeAle , Bom dia,

Apenas um pequeno adendo sobre o trecho onde vc diz 'Com base nisso, alterei a Caixa de Combinação CRAS para Caixa de Lista. Fica melhor para trabalhar".

Baseado na planilha exemplo que vc disponibilizou (eu já a tinha, mas até então não havia entendido o código), após mudar o campo no diálogo, de caixa de texto para caixa de lista, ele passa a dar erro justamente no método de entrada dos dados:

Metodo

E dada a minha pouca intimidade com programação, pois ainda estou aprendendo, eu demoro a perceber / compreender a razão dos erros e suas possíveis soluções. Mas eu consegui o resultado que queria, na questão dos intervalos nomeados, apesar deste atual contratempo com a caixa de lista

Faz parte… rsrsrs

Obrigado

1 Like

Desculpe o atraso!

Fiz um remendo no código para resolver rápido.

----------EDIT----------

Corrigido. O problema era o diálogo de pesquisa no qual não havia feito alteração anteriormente.

Porém, ainda vai receber diálogos de erro na busca , pois é necessário indicar se a busca da Entidade será por índice ou por nome.
Teria que ajustar a planilha exemplo, antes de ajustar o código. (Fiz um comentário no código)
.

Funcionando normal aqui.
LibO: 7.4
SO: Linux Xubuntu.
.
Essa inclusão não foi minha. Foi o próprio @clauhmonteiro que criou. Pelo o que entendi, foi feita apenas para acesso mais fácil as planilhas, para eventuais ajustes. Mas não retorna ao modo tela cheia. Apenas se fechar e abrir novamente o arquivo.
.
Ask_CadClientes.v1.1.ods (284,6,KB)

1 Like

Ola @FelipeAle , ao clicar no Botão “Pesquisar Beneficiário” da este erro:

erro6

E o Botão “Editar Base de Dados”, não faz nada!