2015-06-22 360 views
-1

大家早上好!用VBA登錄SAP

我一直在尋找最後的日子裏的解決方案,但我真的沒有設法成功:我試圖讓一個vba代碼:1登錄到SAP,2-運行一些交易3-出口到Excel中。

但即使是「登錄SAP」部分也不行!

我試了幾個代碼,在一個下面打開SAP登錄屏幕,但在任何領域不填。我曾經CreateObject("Sapgui.ScriptingCtrl.1")

Sub Entrar_SAP() 

If Not IsObject(SAPguiApp) Then 
    Set SAPguiApp = CreateObject("Sapgui.ScriptingCtrl.1") 
End If 
If Not IsObject(Connection) Then 
    Set Connection = SAPguiApp.OpenConnection("xxxxxxx)", True) 
End If 
If Not IsObject(session) Then 
    Set session = Connection.Children(0) 
End If 
session.findById("wnd[0]/usr/txtRSYST-MANDT").Text = "100"  
session.findById("wnd[0]/usr/txtRSYST-BNAME").Text = "user"  
session.findById("wnd[0]/usr/pwdRSYST-BCODE").Text = "pass" 
session.findById("wnd[0]/usr/txtRSYST-LANGU").Text = "PT" 
session.findById("wnd[0]/usr/txtRSYST-LANGU").SetFocus  
session.findById("wnd[0]/usr/txtRSYST-LANGU").caretPosition = 2 
session.findById("wnd[0]").sendVKey 0 

一個又一個,與CreateObject("SAP.Functions"),顯示: 「獲得RFC錯誤沒有對功能模塊RFC PING RFC授權。」

代碼:

'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 = "xxxxx" 
sapConnection.User = "xxxxxx" 
sapConnection.Language = "PT" 
sapConnection.hostname = "xxxxx" 
sapConnection.Password = "xxxxxxxx" 'Fake password   
sapConnection.SystemNumber = "4" 
sapConnection.System = "xxxxxx)" 
sapConnection.Logon 
If sapConnection.Logon(1, True) <> True Then 
    MsgBox "No connection to R/3!" 
Exit Sub 'End program 
End If 

人請幫幫我?謝謝!!

+0

請編輯您的問題,以便代碼可讀。在代碼前留下一個空行,並將每行縮進4個空格,如果要顯示縮進的代碼塊,則更多。 – ChipsLetten

+0

謝謝,我剛剛編輯! –

回答

0

我假設你通過RFC讀取表拉。這個連接將爲那些工作正常。

Dim LogonControl As Object 
Dim conn As Object 
Dim retcd As Boolean 

Set LogonControl = CreateObject("SAP.LogonControl.1") 
    Set conn = LogonControl.NewConnection 
conn.System = "strSystemName" 
conn.Client = "100" 
conn.Language = "EN" 
conn.User = "sUserName" 
conn.Password = "strPassword" 
retcd = conn.Logon(0, True) 'True = No logon GUI 'False = logon GUI 

If retcd <> True Then 
    MsgBox "Login failed for- " & strSystemName & " -UserName or Password are incorrect, check them and run try again ." 
    Exit Sub 
End If 
Set funcControl = CreateObject("SAP.Functions") 
funcControl.Connection = conn 

從這一點上你可以讓你的RFC調用沒有任何問題。

但是說實話,以上幾乎就是你的第二個例子。你的RFC你的錯誤看起來像你沒有SAP的安全設置,無論你從哪個表上拉取,都不會對你的登錄代碼造成問題。

免責聲明:RFC_READ_TABLE是通過SAP不支持,更後門的那麼日常方法提取數據。

EDIT1:覆蓋註釋,而不是把它變成一個討論,我會嘗試在這裏總結一下他們。

首先

彈出:如果你想彈出日誌中,那麼你需要這行代碼更改

retcd = conn.Logon(0, True) 

retcd = conn.Logon(0, False) 'This one DISPLAYS the pop-up 

其次

權限:RFC_Read_Table使用非常不同的安全設置,然後SAP T代碼使用,技術差異很難解釋,但根據經驗法則,如果您不能訪問SAP表(t代碼SE16),您很可能不會能夠從RFC讀表拉

第三

如果你的公司有多個SAP盒(DEV,生產,試驗)的SYSTEMNAME將EXACTLY的框選屏幕上顯示的內容SAP名下。假設您從第二個代碼塊中獲得RFC錯誤,那麼您在該代碼中使用的框名稱將是正確的。

+0

謝謝你的回答,吉米!你有什麼可以解決這些安全問題的建議嗎?除了使用VBA之外,我對SAP和RFC的瞭解還很少。 PS:我試過你的代碼,但它顯示msgbox就好像登錄不正確,但我知道它不是。 –

+0

對於不同的組織,SAP安全訪問可能會非常不同, 您是否可以通過t代碼「se16」訪問您從SAP中提取的表? 如果您不能以這種方式查看您的數據,那麼您需要獲得來自誰設置您的SAP訪問權限的許可,以便您可以擁有「SAP Table Access」或類似的東西。 可能是因爲貴公司的IT已禁用所有人的RFC讀取表,因爲它被認爲是安全風險如果是這樣,然後有樂趣說服他們讓你進入。 –

+0

不幸的是,我沒有訪問。這是否意味着我將永遠無法使用任何類型的程序登錄SAP,直到我設法訪問?你知道爲什麼有些代碼設法打開SAP登錄屏幕嗎?感謝您再次回答! PS:我正在使用Excel做到這一點 –

1

首先,RFC是與SAP進行交互的完美方法。它不是沒有支持。

其次,你沒有足夠的授權,所以即使你的語法正確,你的代碼也不會工作。 「收到RFC錯誤,沒有RFC功能模塊RFC PING的RFC授權」。要求您的SAP團隊爲您提供遠程執行RFC的權限。詢問SAP_S_RFCACL

在附註上,運行某些事務並導出到Excel的主要對象在SAP中很容易實現。也許你應該讓你的SAP團隊爲你做,而不是在VBA中開發它?

+0

感謝您的回答,Mikael!重點是:如果我與SAP團隊合作,將會有很高的成本。所以我想自己做一個免費的解決方案! –

+0

有沒有辦法在VBA中做到這一點?再次感謝! –

+0

您需要授權才能繼續。 –