Este fórum está sendo desativado

Depois de 9 anos, este fórum será desativado. Mas calma.... estamos migrando para uma comunidade no DISCORD. Junte-se a nós.

ENTRAR PARA DISCORD

Tópicos relacionados a códigos VBA, gravação de macros, etc.
  • Avatar do usuário
#46398
Boa tarde

Antes de mais, não estou a conseguir colocar aqui uma imagem - http://gurudoexcel.com/forum/viewtopic.php?f=13&t=10066 para ajudar à explicação da minha duvida , usando o Snaggy, pelo que optei por gerar um ficheiro word, já que não é permitido um PDF, e colocar aqui juntamente com o Excel de exemplo.

Caso não seja permitido fazer isto peço que me avisem.

Obrigado
Jorge Cabral
Você não está autorizado a ver ou baixar esse anexo.
#46418
E se quando voce adiciona um DF ou FO eles fossem pra outra Listbox, com duas colunas, uma delas mostrando a %. E um botão do lado pra "mover" um registro pra cima ou pra baixo, assim como excluir. Daí a IstbDF ficaria só pra adição de novos registros... Trabalhar com uma Listbox só fica bem complicado
#46429
É verdade... Talvez então com 2 ComboBox, e 2 Textbox ao lado com a porcentagem. Ai pra modificar o registro basta abrir o combobox e selecionar outro registro. E pra excluir, talvez com o RightClick nele, seria uma boa opção
#46459
Consegui bolar um código, mas como da muito trabalho nao acabei em todos botoes.
Fiz uma nova planilha só para ter como base a "lógica" que pensei... Só está funcionando a funcao atualizar no primeiro ComboBox DF. Ele chama uma Sub chamada Atualizar, na qual voce ja manda junto o nome do botao, e se é pra excluir ou nao (0,1).
Você não está autorizado a ver ou baixar esse anexo.
#46462
Olá, Cabral.

Em relação a este seu comentário " É esta gestão de selecionar/desseleccionar/gravar que não estou a conseguir programar.", veja abaixo se entendi corretamente as duas primeiros demandas.
desmarcar item ~~~> o primeiro código abaixo desmarca na lstbDF o segundo item marcado, ou o único.
marcar item ~~~> o segundo código percorre os itens não marcados na lstbDF e pede confirmação para marcar via MsgBox

Se o resultado for o desejado, similarmente os códigos poderão ser aplicados na lstbFO. Em ambos os casos será preciso acrescentar comandos para que o código verifique se os itens antes marcados já atingiram o limite. No seu projeto já há um código que faz essa contagem que poderá servir de base, é o Private Sub lstbDF_Change().
Código: Selecionar todos
Private Sub CommandButton1_Click()
 Dim i As Long
  For i = lstbDF.ListCount - 1 To 0 Step -1
   If lstbDF.Selected(i) = True Then lstbDF.Selected(i) = False: Exit For
  Next r
End Sub
Código: Selecionar todos
Private Sub CommandButton2_Click()
 Dim i As Long
  For i = 0 To lstbDF.ListCount - 1
   If lstbDF.Selected(i) = False Then
    lstbDF.Selected(i) = True
    If MsgBox("DESEJA MANTER ESTE ITEM SELECIONADO?", vbYesNo + vbQuestion) = vbYes Then Exit Sub
    lstbDF.Selected(i) = False
   End If
  Next i
End Sub

#46465
Boa tarde Osvaldo

Obrigado pela sua resposta, mas não está a fazer o que pretendo, assim:
1) Se eu não selecionar uma tarefa, Listbox1, não devia permitir eu escolher nada em lstbDF
2)Quando eu seleciono NOME_DF_3, pex., ele marca sempre o primeiro da lstbDF
3)Se não está nenhum marcado, quando eu seleciono 2 Nomes, é marcado mais, o primeiro, e depois fica em loop continuo com a mensagem que "Só é possível escolher 2 NOMES";
4)Ou seja devia ser possível escolher dois nomes, carregar em CommandButton2 e aparecer o nome em lblRec1 e lblRec2 para ser possível colocar as percentagens e depois gravar na BD de BDBACK.

Obrigado
Jorge Cabral
#46466
eduardogrigull escreveu:Consegui bolar um código, mas como da muito trabalho nao acabei em todos botoes.
Fiz uma nova planilha só para ter como base a "lógica" que pensei... Só está funcionando a funcao atualizar no primeiro ComboBox DF. Ele chama uma Sub chamada Atualizar, na qual voce ja manda junto o nome do botao, e se é pra excluir ou nao (0,1).
Eduardo

Tenho que ver a implicação que esta grande alteração tem no resto código, que está praticamente pronto, só me faltando esta parte dos recursos que não estou a conseguir.
Fica mais fácil manter tudo o que já fiz e adaptar o código da gestão de recursos, do que alterar todo o outro código para adaptar a esta nova forma.

Obrigado
Jorge Cabral
#46470
Além do seu comentário que eu reproduzi no post anterior você ainda comentou: "A minha dificuldade está na programação dos botões para selecionar/desseleccionar DF/FO e depois gravar na BD em BDBACK".
Então eu postei uma sugestão para resolver as duas primeiras demandas dos seus comentários, aí você respondeu que não é isso que você quer e colocou outras 4 demandas que aparentemente não tem qualquer relação com as primeiras.
Entendi nada ! :?: ;)

Sugestão: elabore uma sequência lógica das ações que o usuário irá executar e das ações requeridas dos códigos.
Algo assim:
1. após carregar o Form o usuário seleciona 1 item na ListBox1
2. após a seleção acima os códigos deverão lançar na ... e ou deverão selecionar na ... (e aí informe origem e destino dos dados). Exemplo: lançar na Label30 (destino) o valor 36,25% (informe qual a origem desse valor)
3. aí o usuário irá selecionar ... blá blá blá
4 . após, os códigos ... blá blá blá
5. ...
6. ...
#46471
Caro Osvaldo

Não sei se leu o ficheiro Word que anexei, lá expliquei tudo direito.
Não coloquei aqui porque não consigo colocar a imagem do userform, dá erro, para explicar direito o que pretendo.
#46472
Sim, eu li, e foi de lá que copiei os seus comentários.

Como com base nos seus comentários no Word eu não consigo lhe ajudar, pois a parte que está mais clara e direta lá não bate com o que você quer, então para tentar entender o que você ainda precisa no seu projeto foi que sugeri a lista com a sequência lógica.
#46473
Osvaldo, o que se passa é que o seu código quando eu seleciono um DF, o três por exemplo, ele escolhe automaticamente o primeiro, e no ficheiro word eu, pelo menos tentei, já fazer um fluxo do que deve acontecer, vou replicar aqui.

A minha dificuldade está na programação dos botões para selecionar/desseleccionar DF/FO e depois gravar na BD em BDBACK;
Para não estar sempre a falar em DF e FO, vou-me só referir aos DF’s sendo que a única diferença é que num posso escolher até 2 (DF) e noutro posso escolher até 4(FO), assim, os critérios são:
1) Tenho sempre que escolher em primeiro lugar uma tarefa para fazer a afetação de um DF; ou seja se selecionar um DF e não tiver uma tarefa selecionada gera mensagem para selecionar primeiro uma tarefa e volta tudo ao principio;
2) Depois de selecionar uma tarefa pode acontecer o seguinte:
a. Se já tenho DF’s escolhidos é mostrado o nome nas label’s e a respetiva % de afetação e posso alterar com as setas, (<-) para desseleccionar e (->) para selecionar , tendo sempre em atenção que , no caso de ter dois DF’s selecionados o primeiro a desseleccionar é sempre, do segundo selecionado para o primeiro , no caso dos FO’s desselecciono primeiro o Nome_FO_4, depois o Nome_FO_3 e por ai fora…, com esta ação tenho que apagar o highlight na respetiva listbox e só depois posso gravar se tiver valor na % de afetação;
b. Caso não haja nenhum DF selecionado, posso escolher o nome na lstbDF digito a respetiva %de afetação e só com este dois “campos” preenchidos é que posso gravar na BD de BDBACK, colunas “O” a “Z”;
3) Ao gravar tenho que fazer também a gestão da gravação ou seja se desseleccionei um DF vou ter de apagar na BD; a escrita também será sempre por ordem ou seja
a. NOME_DF_1 escrevo na Coluna “O” de BDBACK;
b. % de Afetação de NOME_DF_1 escrevo na Coluna “P” de BDBACK;
c. ….e assim sucessivamente.
4) Nunca haverá um NOME_DF_2 sem haver um NOME_DF_1.


Estou a tentar refazer este fluxo de uma forma mais clara
#46475
Osvaldo

Não se assim fica mais claro:

1) Após carregar o Userform RECURSOS, tenho que escolher uma tarefa na Listbox1 – Os dados da Listbox1 são carregados da BD em BDBACK – não sendo permitido escolher nenhum DF/FO (tudo disable).

2) Depois de escolher uma tarefa, duas coisas podem acontecer:
a. Ou já existem DF’s escolhidos (1 ou 2);
b. Ou não está nada escolhido.

3) Se já existem DF’s escolhidos, aparece em lblRec1 o nome e em txtPerc1 a percentagem, para o caso de haver dois DF’s, aparece também o nome e a percentagem em lblRec2 e em txtPerc2;

Posso depois alterar o nome e/ou a percentagem de afetação, ou remover DF’s, apagando-se ou aparecendo o nome e a percentagem na respetiva labels e textbox
a. Para adicionar tenho que escolher um DF em lstbDF e depois carregar na seta (->), sendo que no máximo posso escolher dois, o que já está a fazer
b. Para remover um DF, temo sempre que começar pelo segundo nome e só depois se remove o primeiro (No caso dos FO removo primeiro o Nome4 e depois o Nome3 e assim sucessivamente) bastando para tal carregar na seta (<-);

4) O mesmo procedimento se aplica aos FO;

5) Depois de estarem definidos os DF e FO ao carregar no "cmdGravar" tenho que verificar se existe percentagem de afetação para todos os DF’s e FO’s selecionados e em caso afirmativo então gravar na BD de BDBACK, sendo que a gravação é feita a partir da coluna “O” e nesta ordem DF1, PERCDF1, DF2, PERCDF2, FO1, PERCFO1,…,FO4,PERCFO4, até à coluna “Z”

6) Sempre que houver um DF ou FO tem que haver obrigatoriamente uma afetação;

7) Não é obrigatório haver simultaneamente DF's e FO's, ou seja pode(m) haver só DF's ou só FO's

Se não estiver claro em algum ponto me diga
Obrigado
Jorge Cabral
#46484
Cabral, faltou informar qual a ajuda que você precisa em cada item.
Você escreveu, por exemplo:
6) Sempre que houver um DF ou FO tem que haver obrigatoriamente uma afetação; ~~~> o que você deseja que a macro faça neste item ?
Essa minha pergunta vale para todos os itens que você relacionou.
#46486
Osvaldo
Julgo que assim ficou mais claro o que se pretende para cada ponto.
Só não acrescentei nada no ponto 3 porque acho que já está claro.

1. Após carregar o Userform RECURSOS, tenho que escolher uma tarefa na Listbox1 – Os dados da Listbox1 são carregados da BD em BDBACK – não sendo permitido escolher nenhum DF/FO (tudo DISABLE)
1.1.1.Tudo DISABLE com exceção da Listbox1 e botão para SAIR;

2. Depois de escolher uma tarefa, duas coisas podem acontecer:

2.1. Ou já existem DF’s escolhidos (1 ou 2);
2.1.1.Faz o highlight dos DF’s escolhidos; Escreve os nome(s) e percentagem na Label(s) / Textbox(s); Coloca tudo ENABLE

2.2. Ou não está nada escolhido.
2.2.1.Coloca tudo ENABLE

3. Se já existem DF’s escolhidos, aparece em lblRec1 o nome e em txtPerc1 a percentagem, para o caso de haver dois DF’s, aparece também o nome e a percentagem em lblRec2 e em txtPerc2
Posso depois alterar o nome e/ou a percentagem de afetação, ou remover DF’s, apagando-se ou aparecendo o nome e a percentagem na respetiva labels e textbox
3.1. Para adicionar tenho que escolher um DF em lstbDF e depois carregar na seta (->), sendo que no máximo posso escolher dois, o que já está a fazer
3.2. Para remover um DF, tenho sempre que começar pelo segundo nome e só depois se remove o primeiro (No caso dos FO removo primeiro o Nome4 e depois o Nome3 e assim sucessivamente) bastando para tal carregar na seta (<-)

4. Depois de estarem definidos os DF e FO ao carregar no cmdGravar tenho que verificar se existe percentagem de afetação para todos os DF’s e FO’s selecionados e em caso afirmativo então gravar na BD de BDBACK, sendo que a gravação é feita a partir da coluna “O” e nesta ordem DF1, PERCDF1, DF2, PERCDF2, FO1, PERCFO1,…,FO4,PERCFO4, até à coluna “Z”
4.1.1.Verifico se para cada DF selecionado existe um percentagem, caso não existe, abro uma mensagem a dizer que falta a percentagem e coloco o foco na respetiva Textbox; Se está tudo OK gravo na respetiva linha da BD em BDBACK e de acordo com a sequência referida; Apago todos os highlight; Label’s; Textbox’s e coloco tudo DISABLE exceto Listbox1 e Botão de Sair (O procedimento volta ao principio)

5. Sempre que houver um DF ou FO tem que haver obrigatoriamente uma afetação;
5.1.1. É apenas para reforçar o que se disse no ponto anterior; Não havendo sai mensagem e é colocado o foco na respetiva Textbox;

6. Não é obrigatório haver DF's e FO's, simultaneamente, ou seja pode(m) haver só DF's ou só FO's

7. O mesmo procedimento se aplica aos FO

Se não estiver claro em algum ponto me diga
Obrigado
Jorge Cabral
#46521
Olá, Cabral.

No arquivo anexo acrescentei alguns itens da sua relação, outros dependem de você.
Coloquei na Plan1 os comentários sobre o que fiz e sobre o que falta fazer.
Você não está autorizado a ver ou baixar esse anexo.
#46526
Boa tarde Osvaldo,

Antes de mais obrigado mais uma vez pela sua ajuda.

Relativamente ao ponto 3), e ao seu comentário "Na minha opinião colocar um botão para selecionar é menos prático do que selecionar diretamente, mas ...", eu estou 100% aberto a sugestões para simplificar todo o processo; Por certo da forma que você está a pensar a parte de aparecer o nome e a introdução da percentagem também vai simplificar, assim como a escrita na BD em BDBACK

Continuo a verificar um problema e que é o seguinte, quando abro o userform e carrego p.ex. na "NOME da TAREFA_5" e depois seleciono em lstbDF qualquer nome, com exceção do primeiro, p.ex. NOME_DF_7, é selecionado sempre o primeiro nome, ou seja ficam logo dois selecionados, ou seja o primeiro item da lstbDF fica sempre escolhido.

Vou aguardar o seu comentário, porque se for alterado a forma de selecionar os DF/FO talvez o ponto 4) fique mais simples de implementar.

Obrigado
Jorge Cabral
#46529
JCabral escreveu: "... colocar um botão para selecionar é menos prático do que selecionar diretamente ..."
Eu coloquei um código atrelado ao botão conforme você solicitara, aí fica a critério do usuário selecionar manualmente ou via botão/código.

Por certo da forma que você está a pensar a parte de aparecer o nome e a introdução da percentagem também vai simplificar, assim como a escrita na BD em BDBACK
Repetindo o que comentei na Plan1: no item acima você precisa ajustar os seus códigos, após isso eu farei o código para replicar os dados do Form na planilha BDBACK.

Continuo a verificar um problema ...
Esse problema é uma nova demanda, você não relatou antes. E, como a seleção é feita pelos seus códigos, então eu sugiro que você faça os ajustes que desejar. A propósito, não entendo porque você reporta esse problema ao invés de corrigi-lo, pois os códigos que você elaborou no seu projeto apresentam complexidade bem maior do que a complexidade requerida para efetuar essa correção. Quero dizer que você tem conhecimentos mais que suficientes para efetuar essa correção.
Resumindo, após você efetuar os ajustes nos seus códigos, conforme comentei acima e conforme comentei na Plan1, então disponibilize o arquivo, aí farei o código para replicar os dados do Form na planilha BDBACK. É o que resta fazer de minha parte.
#46533
Boa tarde Osvaldo

Em primeiro lugar esclarecer que a maior parte do código, senão a totalidade, que apresento não foi desenvolvido por mim, mas sim por colegas aqui do forum, julgo que o Babdallas, se eu tivesse o nível de conhecimento para desenvolver aqueles códigos não estaria aqui a pedir ajuda para este caso.

Quanto ao problema que reporto eu já tinha referido ele no post #46465, mais acima, não é um nova demanda, apenas implementei os seus códigos do post #46462 e apareceu aquele problema;

Quanto ao botão para selecionar é certo que foi uma forma minha de pensar o problema; Certamente não foi a melhor opção pelo que você disse, que tem muita mais experiência do que eu, razão pela qual eu disse que estava aberto a sugestões da sua parte para simplificar o problema.

Vou tentar ajustar os códigos do Babdallas.

Obrigado mais uma vez.
Jorge Cabral
long long title how many chars? lets see 123 ok more? yes 60

We have created lots of YouTube videos just so you can achieve [...]

Another post test yes yes yes or no, maybe ni? :-/

The best flat phpBB theme around. Period. Fine craftmanship and [...]

Do you need a super MOD? Well here it is. chew on this

All you need is right here. Content tag, SEO, listing, Pizza and spaghetti [...]

Lasagna on me this time ok? I got plenty of cash

this should be fantastic. but what about links,images, bbcodes etc etc? [...]

Estamos migrando para uma comunidade no Discord