Ir ao conteúdo
  • Cadastre-se
andersillopes

Excel Executar DOS no Excel

Recommended Posts

Pessoal, bom dia.

 

Gostaria de saber como incorporar o comando \ DOS : ping IP -a a algum botão no excel.

Sei que da pra fazer isso utilizando linguagem VBA que chama a .BAT , mas sou iniciante em programação VBA.

Teriam um código fonte padrão VBA que chama .BATS no windows explorer.

Eu tenho uma planilha em excel com a coluna IPS onde listo todos os ips dinamicos das máquinas , por serem DHCP, vou criar um botão ATUALIZA IP para buscar o novo ip que aquele desktop tem no momento.

Obrigado a todos.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Basole não teria um exemplo mais simples cara, tipo com o Código : ping IP -a dentro de um botão, porque eu não conseguir identificar o comando DOS dentro do código VBA

Compartilhar este post


Link para o post
Compartilhar em outros sites

A função que faz este comando, no exemplo que postei é essa:

Function sPing(sHost) As String
 
    Dim oPing As Object, oRetStatus As Object
 
    Set oPing = GetObject("winmgmts:{impersonationLevel=impersonate}").ExecQuery _
      ("select * from Win32_PingStatus where address = '" & sHost & "'")
 
    For Each oRetStatus In oPing
        If IsNull(oRetStatus.StatusCode) Or oRetStatus.StatusCode <> 0 Then
            sPing = "Status code is " & oRetStatus.StatusCode
        Else
            sPing = "Pinging " & sHost & " with " & oRetStatus.bufferSize & " bytes of data:" & Chr(10) & Chr(10)
            sPing = sPing & "Time (ms) = " & vbTab & oRetStatus.ResponseTime & Chr(10)
            sPing = sPing & "TTL (s) = " & vbTab & vbTab & oRetStatus.ResponseTimeToLive
        End If
    Next
End Function

Cole esta função em um módulo padrão

 

E na célula digite =sPing("192.168.0.1") ou =sPing(A1), referenciando o valor da celula A1 que tenha o ip

 

Ou ainda se preferir chamar a função em uma sub-rotina

Sub TestPing()
    MsgBox sPing("192.168.0.1")
End Sub

 

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Basole então man eu olhei o codigo mas não consigo adaptar esse código man, sei que é pedir muito cara mas tem como adaptar esse codigo ou mostrar onde faço, conforme esse exemplo:

 

Tenho 3 máquinas com IP DINÂMICO, gostaria de clicar em um BOTÃO que executasse o comando: PING [HOSTNAME] -A

como por exemplo:        ping 01L19106D730503 -a     e trouxesse o resultado na célula ao lado, como por exemplo:

 

HostName                    IP ATUAL 

image.png.1d7e8f82812d1fcf53e80169c1f5e38f.png

 

Todos os dias preciso acessar algumas máquinas via \\IP ATUAL\C$ ou \\IP ATUAL\\D$ e tenho que ficar identificando o IP da máquina.

 

Valeu.

image.png

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia,

 

Veja se esse código te ajuda.

 

Public Function GetPingResult(Host)
On Error GoTo ErrTrap
Dim objPing     As Object
Dim objStatus   As Object
Dim strResult   As String
Dim msg As String

   Set objPing = GetObject("winmgmts:{impersonationLevel=impersonate}"). _
       ExecQuery("Select * from Win32_PingStatus Where Address = '" & Host & "'")

   For Each objStatus In objPing
      GetPingResult = objStatus.ProtocolAddress
   Next

ExitProcedure:
    On Error Resume Next
    Set objPing = Nothing
    Set objStatus = Nothing
    Exit Function
    
ErrTrap:
    Select Case Err.Number
        Case Is <> 0
            GetPingResult = Err.Description
            Resume ExitProcedure
        Case Else
            Resume ExitProcedure
    End Select
    
End Function

Nesse exemplo você coloca os IP's desejados em uma célula, e utiliza a fórmula criada "=GetPingResult(célula)"

Compartilhar este post


Link para o post
Compartilhar em outros sites
Em 29/05/2018 às 10:20, R0DR1G0_CWB disse:

Bom dia,

 

Veja se esse código te ajuda.

 


Public Function GetPingResult(Host)
On Error GoTo ErrTrap
Dim objPing     As Object
Dim objStatus   As Object
Dim strResult   As String
Dim msg As String

   Set objPing = GetObject("winmgmts:{impersonationLevel=impersonate}"). _
       ExecQuery("Select * from Win32_PingStatus Where Address = '" & Host & "'")

   For Each objStatus In objPing
      GetPingResult = objStatus.ProtocolAddress
   Next

ExitProcedure:
    On Error Resume Next
    Set objPing = Nothing
    Set objStatus = Nothing
    Exit Function
    
ErrTrap:
    Select Case Err.Number
        Case Is <> 0
            GetPingResult = Err.Description
            Resume ExitProcedure
        Case Else
            Resume ExitProcedure
    End Select
    
End Function

Nesse exemplo você coloca os IP's desejados em uma célula, e utiliza a fórmula criada "=GetPingResult(célula)"

Valeu @R0DR1G0_CWB mas como faço pra STARTAR esse código , você tem um botão ou alguma planilha pré-configurada que faça isso , porque ai eu so mudo para os meus IPs aqui .

Valeu man

Compartilhar este post


Link para o post
Compartilhar em outros sites

Man perfeito era isso mesmo. mas voce eu vi que ele pega o Status do Ping mas o que ocorre eu precisava acrescentar um argumento ao PING que seria o -A para me trazer o IP da máquina com base no HOSTNAME dela.

 

Porque quando eu coloco o HOSTNAME na planilha que voce me mandou ocorre o seguinte:

Aparece ::1 se eu conseguir colocar o parametro -A ai me traria o IP do hostname, sabe onde eu coloco o parametro -A ao codigo que voce me mandou ?

image.png.d3ebe43cf7f77822405c87729a1dcec0.pngimage.png.655dc621a13c5d34da2ce7cfe2bcd906.png

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não vou conseguir analisar agora, após eu sair do trabalho vejo para você, mas tente nessa parte...

ExecQuery ("Select * from Win32_PingStatus Onde Address = '" & Host & "' -a")

só uma dúvida, via prompt está funcionando normalmente correto?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia @R0DR1G0_CWB sim no prompt o resultado funciona normal segue evidencia de exemplo:

 

image.png.11639d5a5579c56a60c8d15e95a595b2.png

 

adicionado 13 minutos depois

man deu certo , os que não deram certo é porque os Desktops estavam suspensos e por alguma razão não respondia pelo prompt e consequentemente pela planilha.

 

Valeu @R0DR1G0_CWB obrigado pela solução.

Obrigado @Basole pelo apoio tambem.

 

Valeu pessoal

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×