Ir ao conteúdo
  • Cadastre-se

FASP

Membro Júnior
  • Posts

    8
  • Cadastrado em

  • Última visita

posts postados por FASP

  1. @osvaldomp Aqui em casa dá esse erro assim que eu abro a planilha:
     

    ---------------------------
    Microsoft Visual Basic for Applications
    ---------------------------
    Erro de compilação:

    O código desse projeto deve ser atualizado para uso em sistemas de 64 bits.  Analise e atualize as instruções Declare e, em seguida, marque-as com o atributo PtrSafe.
    ---------------------------
    OK   Ajuda   
    ---------------------------
     

    Alguma ideia do que poderia ser?

     

  2. @osvaldomp Ficou quase perfeito.

     

    Eu estava apanhando porque algumas células da planilha estão bloqueadas e isso estava impedindo o Macro.

    Me arrisquei a fazer um pequeno ajuste, de forma que o resultado final foi esse:

     

     

    #If VBA7 Then
        Public Declare PtrSafe Sub Sleep Lib "kernel32" _
          (ByVal dwMilliseconds As LongPtr)
    #Else
        Public Declare Sub Sleep Lib "kernel32" _
          (ByVal dwMilliseconds As Long)
    #End If

    Const WM_CLOSE = &H10

    Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long

    Sub CalculaCoeficientes()

        Sheets("Plan1").Select
        ActiveSheet.Unprotect

      Dim cell As Range, hCalc As Long, cw
      [C3:C18] = ""
      cw = Shell("C:\windows\system32\calc.exe", vbNormalFocus)
      Sleep 500
      For Each cell In Range("B3:B18")
        On Error GoTo out
        cell.Copy
        Sleep 100
        SendKeys "^v", True
        DoEvents
        Sleep 200
        Application.CutCopyMode = False
        SendKeys "^c", True
        DoEvents
        cell.Offset(, 1).Select: ActiveSheet.Paste
        ActiveCell.Value = ActiveCell.Value / (10 ^ Right(ActiveCell.Value, 2)): ActiveCell.NumberFormat = "General"
        Next
    out:
     SendKeys "{NumLock}", True
      hCalc = FindWindow(vbNullString, "Calculadora")
      If hCalc <> 0 Then PostMessage hCalc, WM_CLOSE, 0&, 0&

        Sheets("Plan1").Select
        ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True

    End Sub

     

    Agora atualiza os valores diariamente sem a necessidade de outros programas e mais rápido.

    Agradeço muito pela colaboração!

    valeu mesmo! ❤️

  3. @osvaldomp Parece promissor.

    Mas deu esse erro ao tentar executar:

    ---------------------------
    Microsoft Visual Basic for Applications
    ---------------------------
    Erro de compilação:

    'Sub' ou 'Function' não definida
    ---------------------------
    OK   Ajuda   
    ---------------------------

     

    Ao aparecer a mensagem de erro acima ele também deixa em evidência o termo "FindWindow" na linha:

    hCalc = FindWindow(vbNullString, "Calculadora").

     

    Não entendo nada do assunto.

    Como proceder?

    *OBS: Aqui o SO é W7 Ultimate, SP1 de 32 Bits.

    E o Excel é o 2010

  4. @deciog Sim, eu coloquei lá.

     

    Me indicaram o xlPrecision, um suplemento bem bacana.

     

    O problema é que ele tem uma parte chata, onde aparece uma caixa de diálogo toda vez que ele calcula, o que me obriga a digitar um CAPTCHA de até 12 dígitos. Ao atualizar uma célula que alimenta as fórmulas ele recalcula todas as 900 células e para cada um desses cálculos sou obrigado a digitar o CAPTCHA. O que para mim é completamente inviável... 

     

    Tem a versão paga sem os captchas, mas sai por 90 dólares (R$ 361,42).

    O suplemento é ótimo e as funcionalidades vão muito além das minhas necessidades. 

    O valor é justo, mas a relação custo-benefício, no meu caso, não são viáveis.

     

    Continuo em busca de uma solução alternativa... 

     

    Por hora, estou utilizando a calculadora do windows em conjunto com o MACRO RECOVER, que copia um conjunto de ações e replica quantas vezes eu quiser em alta velocidade. Isso me permite: 

     

    Copiar a formula (Ctrl+C), Alternar para a calculadora do Windows (Alt+Tab), Colar a fórmula (Ctrl+V), Copiar o resultador (Ctrl+C), Retornar a planilha (Alt+Tab), Selecionar a célula ao lado (KeyRight), Colar o resultado (Ctrl+V), Deixar selecionada a próxima linha a ser calculada (KeyDown, KeyLeft). 

     

    Keyboard : ControlLeft : KeyDown
    DELAY : 1
    Keyboard : C : KeyPress
    Keyboard : ControlLeft : KeyUp
    Keyboard : AltLeft : KeyDown
    DELAY : 1
    Keyboard : Tab : KeyPress
    Keyboard : AltLeft : KeyUp
    Keyboard : ControlLeft : KeyDown
    DELAY : 1
    Keyboard : V : KeyPress
    DELAY : 50
    Keyboard : C : KeyPress
    Keyboard : ControlLeft : KeyUp
    Keyboard : AltLeft : KeyDown
    DELAY : 1
    Keyboard : Tab : KeyPress
    Keyboard : AltLeft : KeyUp
    Keyboard : Right : KeyPress
    Keyboard : ControlLeft : KeyDown
    DELAY : 1
    Keyboard : V : KeyPress
    Keyboard : ControlLeft : KeyUp
    Keyboard : Down : KeyPress
    Keyboard : Left : KeyPress

     

    Daí eu coloco para repetir o procedimento 900 vezes e ABRACADABRA! 

    Em 15 minutos ele resolve todas as 900 células comigo AFK.

     

    Não é o ideal... mas quebrou o galho e reduziu bastante o tempo de execução.

  5. @osvaldomp

    Não sei se entendi, mas vamos lá... 

     

    Bem, como eu disse acima, na "linguagem de cálculo do Excel", o conteúdo da célula B3 ficaria da seguinte forma:

    =(A3 ^ (1 / ($B$20 + (((((($B$21 * (A3 - 1)) / $B$22) ^ (1 / 0,38685))*18000) - $B$23) / $B$24))))

     

    As células B21, B23 e B24 no formato "##e##" não são expressões. São apenas valores em notação científica aceitos no formato da calculadora do windows. O Excel também reconhece valores em notação científica, mas apenas até 1e308 devido a limitação.

     

    Exemplos:

    30 = 3*(10^1) = 3e10 

    Na linguagem aceita pelo excel ficaria 3E+10

     

    80.000.000 = 8*(10^7) = 8e7

    Na linguagem aceita pelo excel ficaria 8E+50

     

    O excel resolveria a formula que coloquei acima facilmente, se não fosse pela limitação de valor máximo a 1e308. Daí o meu problema.

     

    Mas se não é essa a informação de que precisa, pode tentar colocar novamente com outras palavras. É que eu sou meio lento mesmo kkk

     

    Agradeço a paciência.

    adicionado 35 minutos depois

    @deciog Agradeço, mas devido as limitações do meu "espanglês" (kkk) precário eu prefiro aguardar por aqui alguns dias antes de recorrer aos gringos. 

     

    E acredito que meu problema nem seja assim tão complexo.

    Eu só preciso que o Excel reconheça e execute cálculos com valores MUITO altos (como 10^500 por exemplo).

    Basicamente, meu sofrimento se resume a isso.

     

    Se alguém me der um exemplo de como fazer isso com alguma célula, acredito que talvez eu consiga replicar a aplicação na minha planilha com as células que eu preciso.

     

    Não conhecia esse Chandoo, vou deixar salvo aqui para utilizar como ultimo recurso.

    Obrigado.

  6. 11 horas atrás, osvaldomp disse:

     

    Talvez seja possível efetuar os cálculos via macro, mas para isso precisamos saber que cálculos são feitos com os conteúdos de B21, B23 e B24.

     

    @osvaldomp

     

    Os campos B20:24 são os valores referentes a Tcurrent, Fcurrent, Pbonus, Gcurrent e Gh.
    São dados que sofrem alteração diariamente e precisam ser alimentados manualmente.

    Os quais são apenas as "variáveis" no cálculo da seguinte equação:

    CV = (M^(1/(Tcurrent + ((((((Fcurrent*(M-1))/Pbonus)^(1/0,38685))*18000) - Gcurrent) / Gh)))) 

     

    A3:18 são valores referentes a variável "M" nessa mesma equação.

     

    No Excel, a fórmula, está como texto: 

     

    ="("&A3&" yroot (1/("&$B$20&" + (((((("&$B$21&"*("&A3&"-1))/"&$B$22&") yroot (1/0,38685))*18000) - "&$B$23&") / "&$B$24&"))))"

     

    O resultado é um "texto" que eu copio e colo na calculadora do Windows, que executa o calculo. 

    Atualmente, tenho que realizar o procedimento linha por linha em B3:18, colando cada resultado obtido na linha correspondente em C3:18 

     

    Na forma "original" o Excel não consegue executar o calculo, mas B3 ficaria assim:

     

    =(A3 ^ (1 / ($B$20 + (((((($B$21 * (A3 - 1)) / $B$22) ^ (1 / 0,38685))*18000) - $B$23) / $B$24))))

     

    De forma que o ideal para mim seria obter de forma automática todos os valores de M entre 1,01 ~ 10 com intervalo de 0,01, pois como eu disse atualmente eu faço isso de forma intuitiva dentro de determinado intervalo com ajuda da calculadora do Windows utilizando os campos A3:18.

     

    A finalidade da planilha é apenas descobrir o valor de M para o qual a equação retorna o MAIOR CV.

     

    CV é um coeficiente determinado pela equação inicial:

    CV = (M^(1/Ttotal))

     

    A grande dificuldade se encontra no fato de Ttotal ser uma variável de cálculo bem trabalhoso e que se altera diariamente.

     

    Caso seja de alguma ajuda, o desmembramento da equação de forma bem detalhada segue abaixo:

     

    Ttotal = (Tcurrent + Tmissing)

    Portanto: CV = (M^(1/(Tcurrent + Tmissing)))

     

    Tmissing = (Gmissing / Gh)

    Portanto: CV = (M^(1/(Tcurrent + (Gmissing / Gh))))

     

    Gmissing = (Ggoal - Gcurrent)

    Portanto: CV = (M^(1/(Tcurrent + ((Ggoal - Gcurrent) / Gh))))

     

    Ggoal = (((Fgoal/Pbonus)^(1/0,38685))*18000)

    Portanto: CV = (M^(1/(Tcurrent + (((((Fgoal/Pbonus)^(1/0,38685))*18000) - Gcurrent) / Gh))))

     

    Fgoal = (Fcurrent*(M-1))

    Portanto: CV = (M^(1/(Tcurrent + ((((((Fcurrent*(M-1))/Pbonus)^(1/0,38685))*18000) - Gcurrent) / Gh))))  

     

    E é isso... 

    Me coloco a disposição para qualquer esclarecimento e agradeço a sua atenção.

  7. Devido as limitações de valor máximo do Excel não consigo realizar os calulos que eu preciso.
    Felizmente, a calculadora do windows tem me ajudado com isso.

    Em B20:B24 eu tenho o valor das variáveis que alimentam a fórmula.
    Eu preciso atualizar C3:18 diariamente conforme a alteração dessas variáveis.

    Então eu tenho várias linhas (B3:18) com a fórmula:
    ="("&A3&" yroot (1/("&$B$20&" + (((((("&$B$21&"*("&A3&"-1))/"&$B$22&") yroot (1/0,38685))*18000) - "&$B$23&") / "&$B$24&"))))"

    Onde A3:18 são 16 valores de 1,25 a 5 em ordem crescente com intervalo de 0,25 (1; 1,25; 1,5; 1,75; etc...).

    Que retornam o resultado como texto:
    (1,25 yroot (1/(0,9167 + ((((((8,68e178*(1,25-1))/1217160) yroot (1/0,38685))*18000) - 5,5e450) / 2,4e451))))

    *OBS: "yroot" é na calculadora do windows o equivalente ao símbolo de potenciação, que no Excel é "^".

    Daí eu copio esse conteúdo e colo na calculadora científica do windows, que me retorna o resultado que eu jogo na linha correspondente da coluna C3:18.

    Por ser apenas 16 linhas, tem sido fácil realizar o cálculo e fazer a comparação.
    A finalidade é encontrar o maior resultado (em C3:C18), e tem funcionado bem até o momento, apesar de trabalhoso.

    O problema é que agora eu preciso fazer a mesma coisa, só que com 400 linhas, (valores de 1-5 com intervalos de 0,01)
    E da forma atual é impraticável, devido a necessidade de atualização diária.

    Gostaria de saber se tem alguma forma de simplificar esse trabalho, seja com macro, VBA ou qualquer coisa do gênero.

    O ideal seria um "botão" que fizesse a mágica de calcular todas as linhas e colocar cada resultado na linha correspondente da coluna C3:C18.

    Mas qualquer coisa já ajuda.

    Desde já agradeço a colaboração da comunidade.

    PS: A planilha está com células de fórmula "Bloqueadas" para proteção de dados. Mas está sem senha.

     

    PS2: Como solução alternativa tentei apelar para o "CAS Máxima" (programa especializado em calculos complexos) para tentar encontrar o vértice da função plotando o gráfico para (X = 1,1 ~10), mas ele não reconhece a função devido a erros que eu não soube interpretar, devido a minha total falta de experiência com o programa. Não sei se estou fazendo algo errado, com as variáveis já substituídas pelos valores numéricos de hoje a função seria essa: 

    f (x) := (x ^ (1/(3,1666666666666666666666666666667 + ((((((5,24e189*(x-1))/1217160) ^ (1/0,38685))*18000) - 9e478) / 1,44e479))))
    Se alguém tiver experiência com o programa citado ou com qualquer outro que me ajude com esse calculo, já resolveria o problema também.

    FT - WORKING.xlsx

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!