Search the Community
Showing results for tags 'vba'.
-
Nesta planilha eu faço o registro dos serviços realizados nos clientes. Sendo que estes serviços sofrem alterações diariamente: 1 - À realização: quando planejo visitar um cliente; 2- Realizada: Quando o serviço foi realizado; 3 - Reagendada: Quando planejo a visita porém ela não é feita por algum motivo. Nesse caso preciso reagendar. O reagendamento não exclui o registro original, ele cria um novo registro com o status À Realizar. O registro original muda de realização para reagendada. 4- Cancelado: quando ele não é feito de forma alguma se torna cancelado. Todos os registros registrados na planilha BD são visualizados pela planilha Cro. Porém por lá não consigo editar senão bagunçará as fórmulas. Então preciso criar um VBA. Eu gostaria de poder EDITAR (mudar status, pesquisar, excluir, inserir um novo serviço, etc) os registros desta planilha por uma tela que já criei porém não consegui programar o VBA sem precisar sair da planilha CRO. Através do botão de controle. A planilha Cro está em formato de calendário. Toda informação que é exibida aqui (NA PLANILHA CRO) é puxada da planilha BD. eNTÃO QUALQUER ALTERAÇÃO QUE EU QUEIRA FAZER AQUI TEREI QUE IR NA OUTRA PLANILHA. Através do botão de controle é exibida uma janela onde eu gostaria de fazer todas as alterações que for necessário sem a necessidade de ir na planilha BD. Na janela controle gostaria de poder filtrar por dados, por cliente, por técnico, por código etc. Gostaria de poder pesquisar, excluir, inserir um novo e salvar. Ficaria imensamente grato se os amigos pudessem me ajudar. Link do Arquivo: https://docs.google.com/spreadsheets/d/1foKCksbiPFzGPUAazgGc9nrk_dA40k5d/edit?usp=drive_link&ouid=108249309679913943005&rtpof=true&sd=true
-
Tenho uma pasta com varias macros e 5 userform. Quando aciono uma das macros no botão de um userform ela não funciona O que pode estar ocorrendo ?
-
boa noite. tenho um formulario em excel vba , e estou a tentar gravar os dados mas quando um campo esteja vazio ele não mude os valores desse campo na folha excel. o codigo que utilizo é este: private Sub botao_gravar_Click() 'CODIGO PARA GRAVAR VALORES NA FOLHA MAPA MENSAL' On Error GoTo error Dim Plan As Worksheet Dim Numero 'As Integer Dim linha Set Plan = Sheets("Mapa Mensal") linha = 2 Numero = cboMatricula 'codigo Plan.Select linha = Plan.Range("B:B").Find(Numero).Row With Plan .Cells(linha, 4) = UserForm.TxtKmRevisao.Text .Cells(linha, 5) = UserForm.TxtDiaRevisao.Text .Cells(linha, 11) = UserForm.TxtDistribuicao.Text .Cells(linha, 18) = UserForm.cmb_pneus.Text .Cells(linha, 19) = UserForm.TxtKmPneus.Text .Cells(linha, 20) = UserForm.TxtDiaPneus.Text END WITH END SUB e o que acontece é que ele grava bem os valores nas suas celulas, mas as vezes existe campos que nao preencho e ele grava na celula ficando vazia, e eu queria adaptar o codigo para se ele tiver o campo vazio deixar estar o valor da celula igual, isto é, se o campo do formulario nao estiver preenchido ele nao mudifica a celula. espero que lguem me onsiga dar uma dica e ajudar, obrigado
-
Ola Pessoal, Tenho 2 listiview (ListDisponivel ListCautelar). Eu seleciono o checkbox dentro do ListDisponivel e clicando em um botão item marcado é exportado ao ListCautelar, e após confirmação(usando outro botão) esse item tem uma coluna alterada dentro da Planilha(de Disponível para o Nome de quem cautelou o equipmanto), mas enquanto esse botão não é executado essa célula não é alterada(e essa Célula que possui o critério da busca). Usei a rotina de excluir a linha ao exportar, e funciona mas ao realizar a busca de novo o item volta ao listDisponivel. O que preciso então seria de uma rotina que pesquisasse os IDs já inseridos no listCautelar e após realizasse uma pesquisa desses ID's no ListDisponivel e não tornasse visível esse item. Empaquei nessa parte e não consigo sair disso, me falta conhecimento para resolver isso. Agradeço desde já quem puder me dar uma forma Private Sub btnTransCautelar_Click() 'Exporta linhas do ListDisponivel para listCautelar e exclui Linhha do ListDisponivel Dim x, y As Integer Dim Li As Object Dim sItem As Long ''Exporta Linhas For y = 1 To listDisponivel.ListItems.Count If listDisponivel.ListItems.Item(y).Checked Then Set Li = listCautelar.ListItems.Add(Text:=listDisponivel.ListItems.Item(y)) Li.ListSubItems.Add Text:=listDisponivel.ListItems.Item(y).SubItems(1) Li.ListSubItems.Add Text:=listDisponivel.ListItems.Item(y).SubItems(2) Li.ListSubItems.Add Text:=listDisponivel.ListItems.Item(y).SubItems(3) Li.ListSubItems.Add Text:=listDisponivel.ListItems.Item(y).SubItems(4) Li.ListSubItems.Add Text:=listDisponivel.ListItems.Item(y).SubItems(5) Li.ListSubItems.Add Text:=listDisponivel.ListItems.Item(y).SubItems(6) End If Next y lblTotalDisponivel.Caption = listDisponivel.ListItems.Count End Sub http://get2.imglarger.com:8889/results/oD86RzXy_2x.jpg http://get2.imglarger.com:8889/results/j7f3025G_2x.jpg Link da Planilha https://drive.google.com/file/d/1AwBE6-htyCu1Ja842s4oUMJWjRlqwQsf/view?usp=share_link
-
Na sequência do meu tópico Ordenar uma coluna numa listbox encontrei na net a seguinte função: ' Esta função ordena um array multidimensional ' Parametros ' @TheArray - Array - Array que será ordenado ' @Column - Integer - Por qual coluna o array será ordenado ' @ColumnCount - Integer - O número de colunas do array Public Function SortArrayMulti(ByRef TheArray As Variant, _ Column, _ ColumnCount) 'Variaveis '---------- Dim temp() Dim x, i, y, linhaCabecalho As Integer Dim sorted As Boolean 'Dimensões do array '------------------ ReDim Preserve temp(1 To UBound(TheArray, Column), 1 To ColumnCount) 'Repetição para ordenar até o final do array '-------------------------------------------- Do While Not sorted 'No inicio ele está ordenado '-------------------------- sorted = True 'Laço que percorre as linhas '---------------------------- For x = linhaCabecalho + 1 To UBound(TheArray, Column) - 1 'Faz a comparação '---------------- If (TheArray(x, Column) > TheArray(x + 1, Column) And TheArray(x + 1, Column) <> Empty) Then 'Ando por todas as colunas '------------------------- For y = 1 To ColumnCount temp(x, y) = TheArray(x + 1, y) Next y 'Ando por todas as colunas '------------------------- For y = 1 To ColumnCount TheArray(x + 1, y) = TheArray(x, y) Next y 'Ando por todas as colunas '------------------------- For y = 1 To ColumnCount TheArray(x, y) = temp(x, y) Next y 'Passou pelo if, então não está ordenado '--------------------------------------- sorted = False End If Next x Loop End Function que a chamo com o seguinte Sub: ' Esta Sub Limpa e Preenche a ListBox ProdEfeitos Ordenada ' -------------------------------------------------------------- Private Sub LblBD_DblClick(ByVal Cancel As MSForms.ReturnBoolean) ' Limpa a ListBox ProdEfeitos ' --------------------------- ListBoxProdEfeitos.Clear ' Passa a Tabela ArrayVarlistBoxProdEfeitos para ser Ordenada pela coluna 1 ' com 10 colunas pela função SortArrayMulti ' ------------------------------------------------------------------------- ListBoxProdEfeitos.List() = SortArrayMulti(ArrayVarListBoxProdEfeitos, 1, 10) End Sub A qual dá-me o seguinte erro : Run time error "381" Could not set the list property Invalid property array index que eu penso que tenha a ver com o TheArray da Função que começa no Index 1 e o ArrayVarListBoxProdEfeitos que começa no Index 0 Como faço para conseguir que o código funcione? Ou seja eu quero chamar a função que me ordena a Listbox clickando na label.
-
Olá amigos; No meu sistema em Access eu tenho um botão para exportar um relatório em pdf para uma determinada pasta. O que eu queria, era que além de ter o nome, como tem agora, acrescentasse a data e a hora. Agora está a funcionar muito bem, só não tem a data e a hora como eu queria. Deixo abaixo o código, para ver se me podem ajudar a acrescentar o código que falta. Obrigado Joaquim DoCmd.SetWarnings False ' aqui ele exporta direto na pasta DoCmd.OutputTo acOutputReport, "Rt_VendasPorCliente", acFormatPDF, "C:\LimaSoftware\Relatorios\Vendas por Cliente entre Datas.pdf" MsgBox "Relatório guardado ", vbInformation, "LimaSoftware"
-
Pessoal Boa tarde! Preciso da ajuda de vocês!!! Preciso que uma determinada célula do excel (E27) com valor (D+1) possa ser copiada para celula seguinte (F27) com valor (D+2)....sucessivamente sempre que acionado acionado por uma botão seja incrementado a proxima celula (G27) com valor (D+3) assim por diante! Sub Teste() ' Criar_Coluna_Cabeçalho Range("E27").Select Selection.AutoFill Destination:=Range("E27:F27"), Type:=xlFillDefault Range("A1").Select End Sub Para a Macro acima para que a proxima celular apareca o D+(valor) é necessário mudar a celula na mão, preciso automatizar isso! peço desculpas se nao ficou claro!
-
Olá pessoal O código Application.EnableCancelKey = xlDisabled permite-me desabilitar a opção Ctrl+Break no Excel, o que até é bom pois assim não permite que terceiros parem o código e vejam o que está por detrás de um programa VBA. Se juntarmos o código Application.Visible = False ainda melhor melhor, pois assim nem a a folha de excel onde se realizam algumas operações. Só que eu também deixo de ter acesso ao código pois não consigo abrir o editor do código VBA deste Livro em particular. Há alguma maneira de aceder ao código mantendo o Ctrl+Break e a folha de Excel desabilitada?
-
Segundo diz a Decreto-Lei n.º 59/2021, devia constar a informação do tipo de rede telefónica, como exemplo 271 555 666 ( Chamada para rede móvel nacional ) 92 555 6665 ( Chamada para rede móvel nacional ) Alguém tem mais alguma informação... ? ou será que podemos contornar esta lei, fazendo assim
-
Ola galera, tudo bem? Eu gostaria de saber se é possível ou alguém sabe se é possível fazer com o VBA, e conseguiria me ajudar com uma macro com esse arquivo que eu estou tentando fazer: Na coluna "J" eu tenho que colocar BITREM, BITREM2, CARRETA e CARRETA2. Quando colocado essa informação nesse coluna ele alimenta a Gestão visual nas colunas T:X. As fórmulas na Gestão Visual funcionam assim: * "Bitrem" deve ter até 40 paletes com até 23 toneladas. (Podendo ser apenas de uma cidade, ex: Sumaré ou Itapetininga). * "Bitrem2" deve ter até 60 paletes com até 16.1 toneladas. (deve ser da mesma cidade do Bitrem) * "Carreta" deve ter até 60 paletes com até 23 toneladas. (Podendo ser apenas de uma cidade, ex: Sumaré ou Itapetininga). * "Carreta2" deve ter até 60 paletes com até 23 toneladas. (Podendo ser apenas de uma cidade, ex: Sumaré ou Itapetininga). Que eu gostaria de fazer é uma macro para colar as informações de BITREM, BITREM2, CARRETA e CARRETA2 nessa sequência e verificar se as condições acima não passam do limite especificado, se for passar, ele muda para fazer uma colagem na sequência. Ex: se estiver colando o BITREM e passar de 40 paletes ou passar do peso de 23 toneladas, ele pula para completar informações novas no Bitrem2, onde ele utiliza a Coluna J e vai colando novas informações até preencher todos itens da lista, assim checando os campos que estão faltando. É possível fazer uma macro dessa forma com o excel? Att,
-
Boas Um problema complexo para o meu nivel de conhecimento Fotografia do formulário e folha de excel para ajudar a compreensão Eu introduzo valores na caixa de texto 252, 253 , 255, 256 and 267 e elas retornam valores na folha4.range(a2:e2) depois click no commandbutton8 e tenho uma macro que armazena os valores na folha5.$a:$e 1- como configuro a textbox 253,255,256 e 257 para ter valores de moeda 2- como fazer para que os valores dessas textbox que estão a ser mostrados sejam apagados apos carregar no commandbutton8 apos terem sido armazenados na folha5 Private Sub TextBox252_Change() Folha4.Range("a2").Value = TextBox252 End Sub Private Sub TextBox253_Change() Folha4.Range("b2").Value = TextBox253 End Sub Private Sub TextBox255_Change() Folha4.Range("c2").Value = TextBox255 End Sub Private Sub TextBox256_Change() Folha4.Range("d2").Value = TextBox256 End Sub Private Sub TextBox257_Change() Folha4.Range("e2").Value = TextBox257 End Sub Private Sub TextBox258_Change() Folha5.Range("h2").Value = TextBox258 End Sub Private Sub CommandButton8_Click() Call grava End Sub 3- a Combobox1 está a mostrar os valores armazenados na folha5 quando clico em commandbutton8 mas apenas os últimos valores antes de carregar o formulário, como fazer para ele mostrar os valores recentemente inseridos quando clico no button8 4- Quando clico commandbutton9 queria que agarra-se nos valores que selecionei na combobox1 e os ponha na folha5.range(h2:L2) que retorna os valores na textbox262, 261 , 260, 259 Private Sub ComboBox1_Change() End Sub Private Sub CommandButton9_Click() Me.TextBox262.Text = Folha5.Range("i3").Text Me.TextBox260.Text = Folha5.Range("j3").Text Me.TextBox261.Text = Folha5.Range("k3").Text Me.TextBox259.Text = Folha5.Range("l3").Text End Sub Outra questão, é possivel por o formulário a maximizar ou a fazer scroll? como? visto que em monitores com menos resolução não aparece todo? Obrigado antecipadamente desculpem a newbice
-
Private Sub TextBox1_change() Folha2.Range("K5").Value = TextBox1 End Sub Private Sub TextBox10_Change() If CheckBox1 = True Then UserForm1.TextBox10 = Folha2.Range(L5).Value Else UserForm1.TextBox10 = Folha2.Range(P5).Value End If End Sub Boas, estou a iniciar me a programar alguns formularios em vba... mas... percebo muito pouco disto.... lol desculpem a franqueza. tenho uma text box onde insiro um valor (textbox1) e ao inserir o valor nessa text box e, eu queria que foste mostrada na text box 10 um valor de uma célula e que não desse para alterar. Grato pela atenção dispensada Tiago Duarte
-
Boas, estou com um problema para o qual não encontro solução. Tenho um formulário com 3 botões (FormMenu) que quando carrego num deles (por exemplo Consultar/Alterar) executa o seguinte código: Private Sub CmdBtConsultarAlterar_Click() VarTipoMovimento = 3 Me.Hide FormMenuConsulta.Show End Sub Todos os botões executam esta rotina, apenas muda a VarTipoMovimento para 1 ou para 4 conforme o botão carregado for Instaurar ou Movimentar O Formulário FormMenuConsulta.Show tem mais 3 botões para se consultar por nº da base de dados, nº do processo ou por nome, e cada botão corre uma sub-rotina para encontrar a linha no excel que contém os dados. até aqui tudo bem, sempre que carrego num dos botões deste último Formulário eles fazem o pretendido, consultar a folha de excel e retornar a respectiva linha O problema é quando neste formulário faço o Terminate dele ou seja quando carrego na cruz no canto superior direito ele volta-me para o FormMenu correndo o seguinte código: Private Sub UserForm_Terminate() Me.Hide FormMenu.Show End Sub Aqui é que reside o problema, quando no FormMenu faço o click no Botão Movimentar outra vez, indo para o formulário FormMenuConsulta, os seus botões não funcionam (simplesmente não fazem nada, como não tendo neles código) nem o Terminate ficando o programa suspenso. Espero que me tenha feito entender, agradecendo qualquer ajuda.
-
Boas, Percebo pouco de programação e acabo muito por usar numa base tentativa/erro mas faltam-me as bases de VBA. Pretendo com base no valor de uma célula esconder ou mostras linhas ocultas e que seja dinâmico....O que acontece no código é que o mesmo só é executado quando abro a janela do VBA. Executei os seguintes pontos: > abri o Visual Basics atravês do Developer; > executei modulo na sheet que pretendo; > código: Private Sub Worksheet_Change(ByVal Target As Range) If "$A$13" = "Not Ok" Then Rows("15:100").Hidden = True Else Rows("15:100").Hidden = False End If End Sub > gravei Sucede que quando mudo a célula A13 o excel não está dinâmico. Alias quando corro o run no próprio VBA pede-me para gravar o nome da Macro e dá entender que crio uma nova... Espero ter sido claro. Obrigado.
-
Boa tarde, Estou a tentar resolver uma questão e pesso ajuda aos amigos. Gostaria de inserir uma variável dentro de uma pesquisa sql, alguém pode me ajudar? Segue o código Sub Consultar() Dim cn As Object 'Variável de conexão com o Access Dim rs As Object 'Variável de consulta de registro no Access (Record Set) Dim strSql As String 'Variável de código SQL Dim strConnection As String 'Variável de conexão com a aplicação Access Dim sh_capa As Worksheet 'Variável da aba "Capa" Dim i, j As Long Application.DisplayAlerts = False 'Desabilitar os alertas Application.ScreenUpdating = False 'Desabilitar a atualização de tela 'Salvar a planilha ActiveWorkbook.Save 'Configura a variável com a aba "Capa" Set sh_capa = Sheets("Capa") 'Realiza a conexão com a aplicação Access Set cn = CreateObject("ADODB.Connection") 'Código de conexão com o Access desejado strConnection = "Provider=Microsoft.ACE.OLEDB.12.0;" & _ "Data Source = \\CARLOS_GOMES\Users\Public\Excel com BD\Tesouraria IPB\Consultas bd\Aula 4 - Banco de dados.accdb" 'Variável para pesquisa de acordo com ano Dim Ano_Anterior As Double Dim Ano_Atual As Double Ano_Anterior = Plan1.Cells(1, 1).Value Ano_Atual = Plan1.Cells(2, 1).Value 'Código SQL de consulta strSql = "SELECT tbl_vendas.Ano, tbl_vendas.Mês, tbl_vendas.Auxiliar, tbl_vendas.Vendedor, tbl_vendas.[Código 1], tbl_vendas.[Código 2], tbl_vendas.Produto, tbl_vendas.Preço " & _ "FROM tbl_vendas WHERE tbl_vendas.Mês = 12 And tbl_vendas.Ano = Ano_Anterior Or tbl_vendas.Mês = 1 And tbl_vendas.Ano = Ano_Atual or tbl_vendas.Mês = 2 And tbl_vendas.Ano = Ano_Atual or tbl_vendas.Mês = 3 And tbl_vendas.Ano = Ano_Atual or tbl_vendas.Mês = 4 And tbl_vendas.Ano = Ano_Atual or tbl_vendas.Mês = 5 And tbl_vendas.Ano = Ano_Atual or tbl_vendas.Mês = 6 And tbl_vendas.Ano = Ano_Atual or tbl_vendas.Mês = 7 And tbl_vendas.Ano = Ano_Atual or tbl_vendas.Mês = 8 And tbl_vendas.Ano = Ano_Atual or tbl_vendas.Mês = 9 And tbl_vendas.Ano = Ano_Atual or tbl_vendas.Mês = 10 And tbl_vendas.Ano = Ano_Atual or tbl_vendas.Mês = 11 And tbl_vendas.Ano = Ano_Atual;" 'Abre a conexão com o access desejado cn.Open strConnection 'Executa a consulta no access através do código SQL preenchido na variável strSql Set rs = cn.Execute(strSql) 'Copiar para o Excel as informações resultantes da consulta no Access i = 0 If Not (rs.EOF And rs.BOF) Then 'Verifica se existem alguma informação na consulta 'Conta quantas linhas existem no Banco de Dados j = 0 Do While sh_capa.Cells(5 + j, "B").Value <> "" j = j + 1 Loop 'Apaga o banco de dados no excel sh_capa.Range("B5:I" & j + 6).ClearContents rs.MoveFirst Do Until rs.EOF = True 'Roda linha a linha até chegar no Fim do Arquivo (EOF = End of File) 'Colocar o nome dos campos inseridos na tabela do Access sh_capa.Cells(5 + i, "A").Value = rs("Ano") sh_capa.Cells(5 + i, "B").Value = rs("Mês") sh_capa.Cells(5 + i, "C").Value = rs("Auxiliar") sh_capa.Cells(5 + i, "D").Value = rs("Vendedor") sh_capa.Cells(5 + i, "E").Value = rs("Código 1") sh_capa.Cells(5 + i, "F").Value = rs("Código 2") sh_capa.Cells(5 + i, "G").Value = rs("Produto") sh_capa.Cells(5 + i, "H").Value = rs("Preço") 'Pula de linha no Access rs.MoveNext 'Pula de linha no Excel i = i + 1 Loop 'Avisa ao usuário que as informações foram copiadas 'MsgBox i & " Registros copiados com sucesso!" 'Else 'Avisa ao usuário que nada foi copiado 'MsgBox "Nenhum informação disponível!" End If 'Fecha todas as conexões com o Access Set rs = Nothing cn.Close Set cn = Nothing End Sub Muito grato!!!
-
Olá! Tenho uma planilha de centro de custos aparentemente simples que ao mesmo tempo, dado a quantidade de dados, acaba ficando um pouco complexa sua análise por isso, minha necessidade é criar formas alternativas de somar esses centros de custos em suas mais variadas categorias e subcategorias baseadas no período inicial e período final. Vou explicar como funciona a planilha e qual minha dificuldade e espero poder contar com o apoio da comunidade a encontrar uma fórmula de solução. Exemplo: LINHA 1 estão cadastrados os CÓDIGOS LINHA 2 estão cadastrados as DESCRIÇÕES LINHA 3 estão cadastrados as CATEGORIAS LINHA 4 estão cadastrados as SUB-CATEGORIAS COLUNA A estão cadastrados o PERIODO (Meses) COLUNA CO retorna o TOTAL das RECEITAS dos CENTRO DE CUSTO naquele período COLUNA CQ retorna o TOTAL das DESPESAS dos CENTRO DE CUSTO naquele periodo ANALISANDO CENTRO DE CUSTOS Minha necessidade é uma fórmula (ou codigo VBA) que retorne na célula G440 a SOMATORIA de todas as RECEITAS (Categorias que estão na linha 3) COMUNS (Sub-Categorias que estão na linha 4) lançadas no período inicial C440 e período final D440. Encontrando esse código o mesmo deverá ser aplicado nas linhas e colunas retornando as somas das demais. Feito isso, criarei uma tabela dinâmica que me permita explorar mais as análises dos números. Deixo anexo, a planilha em questão. https://docs.google.com/spreadsheets/d/1DvuSN34rWWV7YrNYg9FueUvt2h4QNQwo/edit?usp=sharing&ouid=109509961137052622741&rtpof=true&sd=true Conto com a ajuda de vocês. Obrigado. Guilherme Santos
-
excel Não consigo mudar ou excluir os títulos do ListView
Gleyson posted a topic in Microsoft Office
Olá. Por favor me ajudem. Preciso mudar os títulos da ListView e não consigo. Após nomear os títulos com .ColumnHeaders.Add Text:="Nome", Width:=100........ (Etc), eu nunca consigo trocar ou excluir esses títulos. Caso eu tente limpar ListView1.Clear.... ao carregar de novo, os títulos SOMAM, ou seja, aumentam em quantidade, um título após o outro. Enfim, como apgar os títulos, modificá-los ou mesmo excluí-los? -
Boa Tarde Arranjei há cerca de 1 ano, um emprego para melhorar alguma folhas de excel, que faziam a gestão dos recursos humanos, logística, entre outras coisas da empresa. Na altura tudo se baseava em Excel, pelo que, numa situação provisória, foi preciso melhorar os processos já existentes. Neste momento através do VBA, já se consegui incrementar bastantes funções e automatismos, no entanto, tudo ainda se baseia 100% em ficheiros excel colocados no Onedrive. Isto trás imensos problemas ao nível de multi-utilizadores, bem como da estabilidade das bases de dados em folhas de excel. Agora que tudo funciona, mais ou menos bem e de forma estável, foi-me proposto passar para uma segunda fase, usando uma linguagem de programação mais sólida. E aqui deparo com alguns problemas. Programei bastante quando ainda se utilizava programas de bases de dados que hoje já pouco se usa, por isso, vejo-me na necessidade de escolher uma via, que me seja confortável e que não me exija ter de aprender uma ou mais linguagens de raíz. Neste momento estou confortável com a sintaxe VBA e estou a dar uma olhada para o MySQL, que apesar de ser novo para mim, o conetio de base de dados e relacionamentos, não me é novo. Sei que neste momento de crise, não gostaría de perder esta oportunidade de emprego, por isso peço a vossa ajuda para poder saber qual o melhor caminho a tomar, nas seguintes escolhas: 1ª Qual a linguagem e a base de dados que me permita desenvolver um novo programa, com a menor curva de aprendizagem possível e semelhante ao VBA que já utilizo hoje em dia ?. 2º Penso que o ideal sería o PHP que permite utilização online, mas sería uma aprendizagem do zero e bastante dificil nesta altura em que continuo a ter de dar apoio ás folhas de Excel 3º A principal necessidade será a capacidade do programa poder ser usado por mais de 1 utilizador, que podem não estar no mesmo espaço físico. Neste momento a opção foi colocar o ficheiro no Onedrive. 4º É fácil arranjar alguém que possa acompanhar o projecto e que esteja disponível quando for preciso resolver algum problema que não consiga resolver, explicando-me a solução? Obrigado pela ajuda que me possam dar e se for preciso mais algum tipo de informação, o interesse em explicar melhor será meu 🙂
-
Bom Dia Queria ordenar uma tabela de 3 colounas, através de duas combobox num formulário, em que o utilizador escolhe as opções que deseja, para ordenar por 2 colunas. Quando tento associar uma variável á coluna escolhida pelo utilizador, dá um erro "Referência inválida ou não qualificada". Como poderei fazer que funcione? Obrigado Private Sub Btn_Imprimir_Click() Dim v_Sorting1 As String Dim v_Sorting2 As String If Form_Imprimir.ComboBox1.Value = "Tipo" Then v_Sorting1 = ".ListColumns(1)" If Form_Imprimir.ComboBox1.Value = "Equipamento" Then Set v_Sorting1 = .ListColumns(2) If Form_Imprimir.ComboBox1.Value = "Data Fabrico" Then v_Sorting1 = ".ListColumns(3)" If Form_Imprimir.ComboBox2.Value = "Tipo" Then v_Sorting2 = ".ListColumns(1)" If Form_Imprimir.ComboBox2.Value = "Equipamento" Then v_Sorting2 = ".ListColumns(2)" If Form_Imprimir.ComboBox2.Value = "Data Fabrico" Then Set v_Sorting2 = .ListColumns(3) Folha3.Sort.SortFields.Clear With Folha3.ListObjects(1) .Range.Sort Key1:=v_Sorting1, Key2:=v_Sorting2, Header:=xlYes, Order1:=xlAscending, Order1:=xlAscending End With End Sub
-
Boas a todos como consigo ultrapassar este erro no excell 2016 obrigado pelas dicas
-
Através da seleção de um "OptionButton", pretendo criar um caminho para uma pasta, cujo nome é a "Caption" do "OptionButton", para depois serem listados os nomes dos ficheiros e visualizadas as imagens. Os botões de opção estão numerados de 65 a 87 e de acordo com o botão selecionado, fará a leitura dos ficheiros dentro da respetiva pasta. Pretendo qualquer coisa do género: for x=65 to 87 if Me.Controls("OptionButton" & x).value=true then SEARCH_PATH=ThisWorkBook_Path & "\FOTOS\" & (("OptionButton" & x).caption) & "\" iDir=Dir(SEARCH_PATH & ListBox2.text & "-*.jp*g") Desta forma não teria que introduzir código em todos os botões de opção. Qual a sintaxe correta para a variável "SEARCH_PATH? Agradecido.
-
boa tarde forum, á uns tempos tomei o gosto por criar um formulário excel vba , com ajuda da net, la consegui criar um ficheiro com formulário excel vba, mas agora queria me aventurar no ficheiro mas com Base dados Access. ja vi vários filmes, procurei na net e ate ja fiz download de alguns ficheiros com base de dados para tentar adaptar os códigos ao meu formulário, mas estou com erros que me estão a dar dores de cabeça passo a explicar: tinha uma conexão ao banco de dados simples, mas os vários ficheiros que fazia download vinham com outro código para conexão, por isso como não conseguia adaptar os códigos á minha conexão, decidi substituir os códigos de conexão. o estranho é que colando os codigos de um exemplo ou outro ficheiro no meu formulário e trocando nomes das combobox, textboxs, tabelas Banco de dados, dá sempre erro. neste momento diz me sempre que "erro de correspondência entre tipos" Alguém me podia dar umas luzes ou ajuda com o código para perceber o que está mal? os meus códigos sao estes: '################################### 'CLASSE PARA CONEXÃO COM BANCO DE 'DADOS ACCESS , este codigo esta numa CLASS MODULE '################################### Public Conn As New ADODB.Connection 'DECLARAÇÃO DA VARIÁVEL DE CONEXÃO Public Sub Conectar() '***************************' 'VARIÁVEL STRING QUE INDICA ' 'PROVEDOR E LOCAL DO BANCO ' 'DE DADOS ACCESS ' '***************************' Dim nConectar As String nConectar = "Provider=Microsoft.ACE.OLEDB.12.0;" & "Data Source=" & ThisWorkbook.Path & "\Base_dados_Mapa_Viaturas.mdb" Conn.ConnectionString = nConectar Conn.Open 'CONEXÃO ABERTA MsgBox "banco aberto" End Sub Public Sub Desconectar() Conn.Close 'CONEXÃO FECHADA End Sub ' e depois fiz um codigo que tentava preencher as comboboxs com dados da tabela, isto colando o codigo do exemplo que tirei da net e adaptando ao meu formulario Sub CarregaDados_Manutencoes() 'Variável de Conexão e Armazenamento Dim Cx As New ClasseConexao Dim Rs As ADODB.Recordset Dim sql, sql2, sql3, sql4, sql5, sql6 As String Dim Rs2 As ADODB.Recordset ' 'Visualizar página 1 ao abrir formulário ' Me.MultiPage1.Value = 0 sql = "SELECT Estado FROM Dados" Set Rs = New ADODB.Recordset Cx.Conectar Rs.Open sql, Cx.Conn 'Loop para carregar combobox ESTADO Do Until Rs.EOF UserForm_Menu.ComboBoxEstado.AddItem Rs!Estado Rs.MoveNext Loop sql2 = "SELECT Matriculas FROM Dados" Set Rs2 = New ADODB.Recordset Rs2.Open sql2, Cx.Conn 'Loop para carregar combobox MATRICULAS Do Until Rs2.EOF UserForm_Menu.ComboBoxMatriculas.AddItem Rs2!Matriculas Rs2.MoveNext Loop 'Liberar Memória Set Rs = Nothing Set Rs = Nothing Cx.Desconectar End Sub o erro é na parte "UserForm_Menu.ComboBoxEstado.AddItem Rs!Estado " aqui é que faz geral o erro de conexão. Alguém consegue dar uma ideia do que se passa? estes sao os codigos originais do formulario que corre correctamente '################################### 'CLASSE PARA CONEXÃO COM BANCO DE 'DADOS ACCESS '################################### Public Conn As New ADODB.Connection 'DECLARAÇÃO DA VARIÁVEL DE CONEXÃO Public Sub Conectar() '***************************' 'VARIÁVEL STRING QUE INDICA ' 'PROVEDOR E LOCAL DO BANCO ' 'DE DADOS ACCESS ' '***************************' Dim nConectar As String nConectar = "Provider=Microsoft.ACE.OLEDB.12.0;" & "Data Source=" & ThisWorkbook.Path & "\Base_dados_Mapa_Viaturas.mdb" Conn.ConnectionString = nConectar Conn.Open 'CONEXÃO ABERTA MsgBox "banco aberto" End Sub Public Sub Desconectar() Conn.Close 'CONEXÃO FECHADA MsgBox "banco fechado" End Sub ' 'Variável de Conexão e Armazenamento Dim cx As New ClasseConexao Dim banco As ADODB.Recordset Dim sql, sql2 As String Dim banco2 As ADODB.Recordset 'Visualizar página 1 ao abrir formulário Me.MultiPage1.Value = 0 sql = "SELECT cargo FROM cargo" sql = sql & " ORDER BY cargo" 'Ordenar coluna Set banco = New ADODB.Recordset cx.Conectar banco.Open sql, cx.Conn 'Loop para carregar combobox dos cargos Do While Not banco.EOF Me.ComboBox2.AddItem banco!cargo Me.ComboBox4.AddItem banco!cargo Me.ComboBox5.AddItem banco!cargo Me.ComboBox7.AddItem banco!cargo banco.MoveNext Loop sql2 = "SELECT setor FROM setor" sql2 = sql2 & " ORDER BY setor" Set banco2 = New ADODB.Recordset banco2.Open sql2, cx.Conn 'Loop para carregar combobox dos setores Do While Not banco2.EOF Me.ComboBox1.AddItem banco2!setor Me.ComboBox3.AddItem banco2!setor Me.ComboBox6.AddItem banco2!setor Me.ComboBox8.AddItem banco2!setor banco2.MoveNext Loop 'Liberar Memória Set banco = Nothing Set banco2 = Nothing cx.Desconectar End Sub Fico a aguardar alguma ajuda. Obrigado
-
Boa tarde, Gostaria de ajuda a obrigar que um utilizador quando preenche uma determinada célula tem que obrigatoriamente preencher outra. Exemplo: Se o utilizador disser que está inscrito tem que obrigatoriamente preencher a célula que corresponde à data de inscrição. Obrigado. Cumps
-
Olá tenho uma tarefa, de macro em Excel, para resolver que me ocupa a cabeça já há vários dias... Já fiz e refiz , até achei um código nesta plataforma que me auxiliou muito. Porém, estou com um problema em uma estrutura de repetição nesse código. Vou deixar aqui o exercício, bem como a minha tentativa , na esperança que alguém me possa direcionar no caminho, sinto que estou perto mas alguma coisa falha.. //Exercício Fazer uma macro que possa garantir o preenchimento automático de um dado específico na planilha. Esse dado, que será preenchido automaticamente, depende de outros dados específicos do preenchimento da planilha mas que estão correlacionados à ele. //Código feito Private Sub tbx2_Change() 'Dentro do campo anterior, do dado a ser preenchido automaticamente, comecei o código e chamei a macro relacionada que executará o programa principal. If cx1.Value = "Novo" Then 'Ele terá a opção de não ser "novo", por isso tem esse If. If cx2.Value = "PNM" Then 'Ele terá a opção de não ser "PNM", por isso tem esse If. If tbx2.Value = "001" Then 'Ele terá a opção de não ser "PNM", por isso tem esse If. Call Comparacao 'Chamando a macro End If End If End If End Sub //Macro Sub Comparacao() Dim L As Range For Each L In Range("D5:D100") 'D5:D100 será o tamanho da coluna que a estrutura For Each terá que ler If L.Value <> "001A" Then 'Estou com dificuldades para fazer a estrutura If, pois preciso garantir a fidelidade de que não entre novamente no mesmo If 'quando sair e entrar no formulário para novo cadastro, pois não poderá repetir os valores de preenchimento automático (Valores 'para preenchimento automático serão: 001A, 002A, 003A... UserForm1.tbx3.Value = "001A" ElseIf L.Value <> 002A Then UserForm1.tbx3.Value = "002A" ElseIf L.Value <> 003A Then UserForm1.tbx3.Value = "003A" ElseIf L.Value <>"004A" Then UserForm1.tbx3.Value = "004A" Else: UserForm1.tbx3.Value = "001A" End If Exit Sub Next End Sub //Dificuldades encontrada: Toda que entro no formulário para o preenchimento, o dado a ser preenchido automaticamente, é preenchido com valor repetido. Pois como a estrutura de repetição lê as linhas em vazio ela interpretará como valor diferente. Atenciosamente, Ariane. Fico no aguardo, de uma possível ajuda. Obrigada!