VBA調用RFC

  1. 創建sap.functions對象使用的是wdtfuncs.ocx文件(在gui的安裝目錄下也有)
  2. 運行到createObject(sap.functions)報activex 429”不能創建對象的錯誤“,是因爲用的是64位的excel,wdtfuncs.ocx文件是32位的,使用64位環境訪問不到。可以換32位excel或通過修改註冊表解決,後者比較麻煩,不推薦。
  3. rfc.call 返回 true表示調用成功,返回false表示調用失敗,如果失敗了,可以查看rfc.exception。exception “system_fialure”表示RFC運行時錯誤,可以用ST22查看錯誤。有時直接執行RFC沒有問題,但遠程調用卻可能出錯,比如RFC中調用了屏幕。

Sub A()
'查詢SAP表數據並輸出到EXCEL,VBA中不區分大小寫(保存後會自動把代碼、變量轉換大小寫)
 
Dim iData As Integer
Dim nField As Integer
Dim nData As Integer
Dim Result As Boolean
Dim vRow As Variant
MsgBox "程序開始"
'初始化登陸信息
Set SAP = CreateObject("SAP.functions.unicode") '使用SAP.FUNCTIONS時會出現中文字符從RFC傳過來之後亂碼的問題(變成#),使用SAP.FUNCTIONS.UNICODE就可以解決
SAP.Connection.System = "ED1" '此處爲系統標示
SAP.Connection.SystemNumber = "00" '系統(實例)編號
SAP.Connection.client = "999" '客戶端
SAP.Connection.User = "CHENYL" '用戶名(不知道爲什麼CHENYLO1連不上)
SAP.Connection.Password = "110110" '密碼
SAP.Connection.Language = "ZH" '語言
SAP.Connection.ApplicationServer = "16.1.1.10" '服務器地址
'連接SAP
If SAP.Connection.logon(0, True) = True Then
MsgBox "連接成功"
Else
MsgBox "連接失敗"
End If
'call function
Set RFC = SAP.Add("RFC_READ_TABLE")
 
Set it_fields = RFC.Tables("FIELDS") '查詢字段(輸入FIELDNAME),字段名(輸出FIELDTEXT)
Set it_options = RFC.Tables("OPTIONS") '查詢條件
Set it_data = RFC.Tables("DATA") '輸出表
'查詢表名
RFC.exports("QUERY_TABLE").Value = "MAKT" ' my table in SAP
'輸出字段名
'it_fields.Rows.Add.Value("FIELDNAME") = "MATNR" '
it_fields.Rows.Add.Value(1, 1) = "MATNR"
it_fields.Rows.Add.Value("FIELDNAME") = "MAKTX"
'選擇條件
'it_options.Rows.Add.Value("TEXT") = "MATNR = '300000255'"
'輸出字段分隔符
RFC.exports("DELIMITER").Value = ","
'call RFC
Result = RFC.Call
nFields = it_fields.RowCount
nData = it_data.RowCount
For iField = 1 To nFields
Cells(1, iField) = it_fields.Rows(iField).Value("FIELDTEXT") '字段名
Next
For iData = 1 To nData '字段值
vRow = Split(it_data(iData, 1), ",")
Cells(iData + 1, 1) = vRow(0)
Cells(iData + 1, 2) = vRow(1)
Next
 
MsgBox "程序結束"
End Sub
發佈了45 篇原創文章 · 獲贊 8 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章