Ir para conteúdo
Fórum Script Brasil

Jaime Bezerra

Membros
  • Total de itens

    9
  • Registro em

  • Última visita

Posts postados por Jaime Bezerra

  1. Bom dia a todos.

     

    Tenho um arquivo excel que extrai dados do BD SQL através de uma macro em VBE, esta macro calcula o "saldo atual" do item consultado na Query, o que preciso é que quando o resultado desta soma for igual a 0 (zero) não seja apresentado o resultado da Query.

     

    Não sei se fui claro, não sou programador, sou apenas apaixonado por Excel e VBA, vou exemplificar o que preciso:

     

    Resultado atual da minha query:

     

    Item          Descrição            Saldo

    abcd          Item1                       43,65

    bcd            Item2                        0,00

    dcba          Item3                        1,00

     

    Resultado desejado:

    Item          Descrição            Saldo

    abcd          Item1                       43,65

    dcba          Item3                        1,00

     

    A instrução SQL que estou utilizando é:

     

    StrQuery = "SELECT distinct a.cd_item,c.descricao,sdoatual=(a.qt_entrada - a.qt_saida) FROM (vSaldoItem a INNER JOIN vSaldoItemdia b ON a.cd_item = b.cd_item AND a.cd_deposito = " & "'" & dep & "'" & ") INNER JOIN Item c ON a.cd_item = c.cd_item order by a.cd_item"

     

    Agradeço a ajuda

     

    Dúvida postada, sob o mesmo título, nos forums:

    Comunidade do Hardware – hardware.com.br

    Guru do Excel – gurudoexcel.com

  2. Boa tarde!!

    O Osvaldo me deu uma macro que funcionou perfeitamente, abaixo esto postando a macro:

    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    If Not Intersect(Target, Range("B4:B" & Cells(Rows.Count, 2).End(3).Row)) Is Nothing Then
      MsgBox "você aplicou duplo clique em uma célula da coluna 'B' da tabela"
      'se o resultado for o esperado substitua a linha acima pelo nome da Macro1
      Cancel = True
    ElseIf Not Intersect(Target, Range("C4:C" & Cells(Rows.Count, 3).End(3).Row)) Is Nothing Then
      MsgBox "você aplicou duplo clique em uma célula da coluna 'C' da tabela"
      'se o resultado for o esperado substitua a linha acima pelo nome da Macro2
      Cancel = True
    End If
    End Sub

     

    Resposta postada nos fóruns:

    http://www.hardware.com.br

    e

    https://gurudoexcel.com/forum/

    Grato

  3. Bom dia!!

    Preciso que ao clicar duas vezes em uma área específica da planilha seja executada uma determinada macro, o problema é que tenho duas áreas distintas que deverão executar macros distintas.

    Com o doubleclick consigo acionar a macro em apenas uma área, por exemplo área ("B4:B" & Lastrow), ocorre que preciso utilizar a área ("C4:C" & Lastrow) para executar outra macro.

    Já tentei utilizar SELECT CASE com o Doubleclick e não funcionou, meu conhecimento de VBA é limitado e não sei como resolver este caso.

    Utilizei o Doubleclick por pura analogia de necessidade, clicar duas vezes em uma área específica para acionar outra macro, mas se para o meu caso a solução for outra agradeço se me orientarem.

    Abaixo segue a macro que estou utilizando:

     

    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

    Dim LastRow As Long
       
        With ActiveSheet
            LastRow = ActiveSheet.Cells.SpecialCells(xlLastCell).Offset(-1, 0).Row
        End With
        
    If Intersect(Target, Range("B4:B" & LastRow)) Is Nothing Then
    Else
    MsgBox ("CR Funcionou")
    End If

    Application.SendKeys "{ESCAPE}"

    End Sub

    Anexo estou enviando a imagem da planilha do excel onde tenho as informações onde será executado o doubleclick, posso enviar o arquivo que é simples e pequeno, na verdade este arquivo é parte de outro maior com outras macros mas que para facilitar deixei apenas a planilha e a macro que estou com dificuldades.

    Grato

    Tela.jpg

  4. Bom dia!!

     

    Resolvi o problema de outra forma, com a mesma macro que cria o BD Excel (titulocli) criei outro BD Excel (transcli), ambos estão no mesmo arquivo e são planilhas distintas deste arquivo.

    Com os dois BD's criados montei outra macro que, através da função SUMIFS do VBA calcula os débitos e créditos do BD transcli com um critério sendo o ID_TITULO, presente em ambas as planilhas, e outro o termo "D" ou "C".

     

    Estou disponibilizando abaixo a macro para utilização de outros que por ventura tenham a mesma necessidade.

     

    Sei que existe a possibilidade de se fazer o somatório diretamente do BD SQL, mas como não sou programador não tenho conhecimento suficiente para isto, vou continuar pesquisando e tentando o somatório diretamente do BD SQL com VBA e descobrindo a forma disponibilizarei aqui.

     

    Macro:

     

    Sub somacondsloop()

     

    '

     

    ' Macro somacondsloop

     

    '

     

     

    '

     

    Dim I As Integer

     

    Dim Dsoma, Csoma, TotMovID As Double

     

    Dim Minharange As String

     

    Dim Arg1 As Range

     

    Dim Arg2 As Range

     

    Dim Arg3 As Range

     

    Dim Arg4 As Range

     

     

    'Congela a tela para evitar o "pisca-pisca" durante a execução da macro

     

    Application.ScreenUpdating = False

     

     

     

      Sheets("transcli").Select

     

      Range("a1").Select

     

     

    'Posiciona para preencher a formula

     

      Sheets("titulocli").Select

     

      I = 2

     

      Do While Range("A" & I).Value <> ""

     

     

     

    'Posiciona para selecionar o primeiro critério de soma

     

      Range("A" & I).Select

     

      Minharange = ("A" & I)

     

     

     

    'Posiciona para inserir o resultado das soma

     

      Range("F" & I).Select

     

     

     

    ' Os argumentos de range foram passados considerando apenas as colunas pois a range é variável

     

      Set Arg1 = Sheets("transcli").Range("D:D")

     

      Set Arg2 = Sheets("transcli").Range("A:A")

     

      Set Arg3 = Sheets("titulocli").Range(Minharange)

     

      Set Arg4 = Sheets("transcli").Range("E:E")

     

     

     

    'Faz a soma com os critérios passados por argumentos

     

      Dsoma = WorksheetFunction.SumIfs(Arg1, Arg2, Arg3, Arg4, "D")

     

      Csoma = WorksheetFunction.SumIfs(Arg1, Arg2, Arg3, Arg4, "C")

     

      TotMovID = (Dsoma - Csoma)

     

     

    'Transfere o total da soma para a célula ativa

     

    ActiveCell.Value = TotMovID

     

     

    I = I + 1

     

    Loop

     

     

    'Descongela a tela

     

    Application.ScreenUpdating = True

     

    End Sub

  5. Boa tarde!!

     

    Criei uma macro que extrai uma série de dados do meu BD SQL através de uma Query e grava em uma planilha do Excel (que vou chamar de BD Excel), até aí sem problemas está funcionando corretamente.

     

    O que preciso agora é um pouco mais complicado:

    Considerando que o meu BD Excel possui no primeiro campo o ID_TITULO preciso fazer um somatório dos débitos e créditos de outra tabela do BD SQL e inserir o resultado da soma no BD Excel para cada um dos títulos.

     

    Ou seja, após criar o BD Excel com uma Query da tabela titulocli preciso somar os débitos e créditos da tabela transcli e inserir o resultado em nova coluna respeitando o ID_TITULO.

     

    Exemplo anexo.

    Obs.: a coluna em amarelo é a coluna para se incluir o resultado do somatório.

     

    Grato

    Exemplo_BD_Excel.png

  6. Boa tarde!!

     

    Após garimpar bastante na internet encontrei a solução para esta questão, estou anexando abaixo a macro que funciona com perfeição:

     

    Obs.: Lógicamente o nome de usuário, senha, servidor, e banco deverão ser ajustados para a realidade de cada um.

     

    Sub extraidadosSQL()

     

     

    ' habilite a ref. Microsoft ActiveX Data Objects X.XX Library

     

    Dim cnn As ADODB.Connection

     

    Dim rst As ADODB.Recordset

     

    Dim wrkst As String

     

    Dim StrQuery As String

     

     

    Set cnn = New ADODB.Connection

     

    cnn.ConnectionString = "driver={SQL Server};server=dsrv03;uid=usuário;pwd=senha;database=EverestTeste"

     

     

    cnn.CommandTimeout = 30

     

    cnn.Open

     

     

    Set rst = New ADODB.Recordset

     

     

    StrQuery = "SELECT * FROM transcli " & "WHERE sinal like 'D'"

     

     

    rst.Open StrQuery, cnn

     

     

    Sheets("transcli").Range("A1").CopyFromRecordset rst

     

     

    rst.Close

     

     

    cnn.Close

     

     

    End Sub

  7. Bom dia,

    Não sou programador, trabalho em contabilidade e financeiro por isso utilizo muito o excel e como seria de se esperar cheguei ao VBA.

    Estou tentando extrair informações específicas do Banco de dados do meu ERP (SQL), pesquisei e copiei uma macro com esta finalidade, fiz as correções mais óbvias para um leigo, BD, Servidor, ID, etc... .
    Quando rodo a macro esta retorna um erro de SQL Server inexistente ou acesso negado, conforme print abaixo:

    upload_2017-5-10_19-19-55.png 

    Utilizo o pacote Office 2007, o ID, senha, Servidor, BD, Tabela, tudo isto está correto pois vez ou outra acabo importando via conexão de Dados externos do próprio excel, poderia até seguir nesta linha, se não fosse a quantidade de tabelas e campos que preciso extrair e mais ainda, o tamanho atual de cada uma das tabelas, por isso preciso trazer apenas alguns campos específicos com filtros.

    Agradeço o auxílio, segue abaixo a macro:

    Código (Text):
    Sub ImportardadosSQL()

    ' habilite a ref. Microsoft ActiveX Data Objects 2.8 Library

    Dim cnn As New ADODB.Connection

    Dim rst As New ADODB.Recordset

    Dim ConnectionString As String

    Dim StrQuery As String, PASS As String, UserName As String, REMOTE_IP_ADDRESS As String, DATABASE As String


    ' insira os dados (entre aspas), abaixo:

    PASS = ""

    UserName = ""

    REMOTE_IP_ADDRESS = ""

    DATABASE = ""

    cnn.ConnectionString = "Provider=SQLOLEDB.1;Password=PASS;Persist Security Info=True;User ID=UserName;Data Source=REMOTE_IP_ADDRESS;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Use Encryption for Data=False;Tag with column collation when possible=False;Initial Catalog=DATABASE"


    cnn.Open

    cnn.CommandTimeout = 900


    StrQuery = "SELECT * FROM transcli " & "WHERE sinal like 'D'"


    rst.Open (StrQuery), cnn



    'rst.Open StrQuery, cnn


    'insere os dados em plan1


    Sheets("transcli").Range("A1").CopyFromRecordset rst


    End Sub
×
×
  • Criar Novo...