ACESSAR O SAP COM MACRO VBA
Boa tarde,
Estou necessitando criar uma solução que basicamente vai logar, acessar, inserir informações e fazer algumas ações no SAP. Tudo isso por macro VBA.
Antes que digam que não tem como, quem duvidar veja esse video: http://www.vbasystems.com.br/solucoes.aspx?id=3
Bom, em quase 3 dias de pesquisa achei vários códigos em sites americanos a alguns copiei e até consegui, com o SAP aberto criar umas ações e tals. Até um deles, esboçou de abrir e logar mas deu erro, claro por falta de alguma outra informação.
Alguém aÃ, sabe como posso resolver, ou pelo menos mandar algum arquivo, ou dar uma luz sobre esses códigos.
Valeu.
Código que achei para Logar:
Sub ed_baker_login()
[ô]Declaration
[ô]
Dim objBAPIControl As Object [ô]Function Control (Collective object)
Dim sapConnection As Object [ô]Connection object
Set objBAPIControl = CreateObject([Ô]SAP.Functions[Ô])
Set sapConnection = objBAPIControl.Connection
sapConnection.client = [Ô]100[Ô]
sapConnection.user = [Ô]ebaker[Ô]
sapConnection.Language = [Ô]EN[Ô]
sapConnection.hostname = [Ô]Thermo[Ô]
sapConnection.Password = [Ô]ladeeladee[Ô] [ô]Fake password
sapConnection.SystemNumber = [Ô]4[Ô]
sapConnection.Destination = [Ô]DE1[Ô]
sapConnection.logon
If sapConnection.logon(1, True) <> True Then
MsgBox [Ô]No connection to R/3![Ô]
Exit Sub [ô]End program
End If
End Sub
Código que achei para gerar as ações:
Option Explicit
Public SAP As Object
Public SAPGui As Object
Public SAPCon As Object
Public SAPSession As Object
[ô]run saplogon if it is not running
Sub OpenSAP()
Dim SAPTaskID As Double
Dim SAPLogonPad As String
SAPLogonPad = [Ô]C:\Program Files\SAP\FrontEnd\SAPgui\saplogon.exe[Ô]
On Error Resume Next
AppActivate [Ô]SAP Logon 720[Ô]
If Err <> 0 Then
Err = 0
SAPTaskID = Shell(SAPLogonPad, vbMinimizedNoFocus)
If Err <> 0 Then
MsgBox [Ô]Cannot start SAPLOGON[Ô], vbCritical, [Ô]SAPLOGON FAILED[Ô]
Else
MsgBox [Ô]SAP Logon activated [Ô] & SAPTaskID, vbInformation, [Ô]SAP Running[Ô]
End If
End If
End Sub
Sub SAPLogon()
Call OpenSAP
AppActivate (ThisWorkbook.Name)
Static sapID As String
Static sapPassword As String
If sapID = [Ô][Ô] Or sapPassword = [Ô][Ô] Then
With loginSAP [ô]a userform to get the sap id and password
.Show
sapID = .SAPuser
sapPassword = .SAPPass
End With
End If
If SAPGui Is Nothing Then
Set SAP = GetObject([Ô]sapgui[Ô])
Set SAPGui = SAP.GetScriptingEngine
End If
If SAPCon Is Nothing Then
Set SAPCon = SAPGui.OpenConnectionByConnectionString([Ô]xxx.xxx.xxx.xxx[Ô], True)
Else
[ô](what should I put here to call the SAPCon object already declared from previous run?)
End If
If SAPSession Is Nothing Then
Set SAPSession = SAPCon.Children(0)
With SAPSession
.findById([Ô]wnd[0]/usr/txtRSYST-MANDT[Ô]).Text = [Ô]200[Ô]
.findById([Ô]wnd[0]/usr/txtRSYST-BNAME[Ô]).Text = sapID
.findById([Ô]wnd[0]/usr/pwdRSYST-BCODE[Ô]).Text = sapPassword
.findById([Ô]wnd[0]/usr/txtRSYST-LANGU[Ô]).Text = [Ô]EN[Ô]
.findById([Ô]wnd[0][Ô]).sendVKey 0
End With
Else
[ô](how do I call the Session already running from previous call to this script?)
End If
End Sub
Estou necessitando criar uma solução que basicamente vai logar, acessar, inserir informações e fazer algumas ações no SAP. Tudo isso por macro VBA.
Antes que digam que não tem como, quem duvidar veja esse video: http://www.vbasystems.com.br/solucoes.aspx?id=3
Bom, em quase 3 dias de pesquisa achei vários códigos em sites americanos a alguns copiei e até consegui, com o SAP aberto criar umas ações e tals. Até um deles, esboçou de abrir e logar mas deu erro, claro por falta de alguma outra informação.
Alguém aÃ, sabe como posso resolver, ou pelo menos mandar algum arquivo, ou dar uma luz sobre esses códigos.
Valeu.
Código que achei para Logar:
Sub ed_baker_login()
[ô]Declaration
[ô]
Dim objBAPIControl As Object [ô]Function Control (Collective object)
Dim sapConnection As Object [ô]Connection object
Set objBAPIControl = CreateObject([Ô]SAP.Functions[Ô])
Set sapConnection = objBAPIControl.Connection
sapConnection.client = [Ô]100[Ô]
sapConnection.user = [Ô]ebaker[Ô]
sapConnection.Language = [Ô]EN[Ô]
sapConnection.hostname = [Ô]Thermo[Ô]
sapConnection.Password = [Ô]ladeeladee[Ô] [ô]Fake password
sapConnection.SystemNumber = [Ô]4[Ô]
sapConnection.Destination = [Ô]DE1[Ô]
sapConnection.logon
If sapConnection.logon(1, True) <> True Then
MsgBox [Ô]No connection to R/3![Ô]
Exit Sub [ô]End program
End If
End Sub
Código que achei para gerar as ações:
Option Explicit
Public SAP As Object
Public SAPGui As Object
Public SAPCon As Object
Public SAPSession As Object
[ô]run saplogon if it is not running
Sub OpenSAP()
Dim SAPTaskID As Double
Dim SAPLogonPad As String
SAPLogonPad = [Ô]C:\Program Files\SAP\FrontEnd\SAPgui\saplogon.exe[Ô]
On Error Resume Next
AppActivate [Ô]SAP Logon 720[Ô]
If Err <> 0 Then
Err = 0
SAPTaskID = Shell(SAPLogonPad, vbMinimizedNoFocus)
If Err <> 0 Then
MsgBox [Ô]Cannot start SAPLOGON[Ô], vbCritical, [Ô]SAPLOGON FAILED[Ô]
Else
MsgBox [Ô]SAP Logon activated [Ô] & SAPTaskID, vbInformation, [Ô]SAP Running[Ô]
End If
End If
End Sub
Sub SAPLogon()
Call OpenSAP
AppActivate (ThisWorkbook.Name)
Static sapID As String
Static sapPassword As String
If sapID = [Ô][Ô] Or sapPassword = [Ô][Ô] Then
With loginSAP [ô]a userform to get the sap id and password
.Show
sapID = .SAPuser
sapPassword = .SAPPass
End With
End If
If SAPGui Is Nothing Then
Set SAP = GetObject([Ô]sapgui[Ô])
Set SAPGui = SAP.GetScriptingEngine
End If
If SAPCon Is Nothing Then
Set SAPCon = SAPGui.OpenConnectionByConnectionString([Ô]xxx.xxx.xxx.xxx[Ô], True)
Else
[ô](what should I put here to call the SAPCon object already declared from previous run?)
End If
If SAPSession Is Nothing Then
Set SAPSession = SAPCon.Children(0)
With SAPSession
.findById([Ô]wnd[0]/usr/txtRSYST-MANDT[Ô]).Text = [Ô]200[Ô]
.findById([Ô]wnd[0]/usr/txtRSYST-BNAME[Ô]).Text = sapID
.findById([Ô]wnd[0]/usr/pwdRSYST-BCODE[Ô]).Text = sapPassword
.findById([Ô]wnd[0]/usr/txtRSYST-LANGU[Ô]).Text = [Ô]EN[Ô]
.findById([Ô]wnd[0][Ô]).sendVKey 0
End With
Else
[ô](how do I call the Session already running from previous call to this script?)
End If
End Sub
Pô! NÃnguém? Nenhum [Ô]tecla[Ô] sabe sobre isso?
Tópico encerrado , respostas não são mais permitidas