要件

EXCEL VBA より サイレントログインで アクセスする。

利用するBAPIは 「 BAPI_COSTELEM_GETLIST 」

管理領域、原価要素タイプ を指定して

その内容を 取得する。取得後 シートに書き出す。

 

**************************************************************

前提ではERP6.0 ユニコードの設定である、PADでのアクセス時は
問題は発生していないが、サイレントアクセスの際に
日本語が#になる症状が発生。
Sapassというサイトで Propertiesを見る事が出来た。
<SAP.Function オブジェクト>.Connection.CodPage = "8000"
※ SAPGuiのINIを確認 8000 になっていた。
このプロパティーの追加で #問題は解消した。
調査の結果 SAP Remote Function Call のActiveXの実態は
wdtfuncs.ocx と推測 レジストリーキーを確認
試しに EXCEL VBAで明示的に参照を設定すると
何気に プロパティーが出現・・・・・ さらに調査必要

Get系のBAPIは VBAより十分利用が可能
トランザクション BAPI SE37(汎用モジュール)で文書を確認し
単体テストでパラメータを与え、確認する。

参考サイト Sapass

 

具体的なコード ( 参考まで )
<事前に Public Type で変数宣言をすませ、 Dim で割り当て済み >
<このコードはBAPIをCALLする物ではありません、あくまでLogOnのサイレントLogonの事例です。>< EXCEL2007 VBA で作成し、EXCEL2000での稼働は確認してます >

 

 

'接続設定 ( 事前に Public Typeで 変数宣言をして ます)

sapcnobj.sapsystem = "KD2"

sapcnobj.sapsysnum = 0

sapcnobj.sapcodep = "8000"  ← コードページを設定

sapcnobj.sapsvadd = ThisWorkbook.Worksheets("config").Cells(9, 5)

sapcnobj.sapclnum = ThisWorkbook.Worksheets("config").Cells(11, 5)

sapcnobj.sapuser = ThisWorkbook.Worksheets("config").Cells(13, 5)

sapcnobj.sappass = ThisWorkbook.Worksheets("config").Cells(15, 5)

sapcnobj.saplang = ThisWorkbook.Worksheets("config").Cells(17, 5)

sapcnobj.sapLogType = True     'True はサイレント Log

 

' TRUEサイレントでアクセスすると 文字が化ける?

 

 

 

'接続オブジェクト作成

 

Set sapcnobj.sapcnect = CreateObject("SAP.Functions")

 

sapcnobj.sapcnect.Connection.System = sapcnobj.sapsystem

sapcnobj.sapcnect.Connection.SystemNumber = sapcnobj.sapsysnum

sapcnobj.sapcnect.Connection.CodePage = sapcnobj.sapcodep
'( Codepage を 割り当ててます )

sapcnobj.sapcnect.Connection.ApplicationServer = sapcnobj.sapsvadd

sapcnobj.sapcnect.Connection.Client = sapcnobj.sapclnum

sapcnobj.sapcnect.Connection.User = sapcnobj.sapuser

sapcnobj.sapcnect.Connection.Password = sapcnobj.sappass

sapcnobj.sapcnect.Connection.Language = sapcnobj.saplang

 

 

 

 

'接続実行

'sapcnobj.sapLogType は事前に True を代入してます。

If sapcnobj.sapcnect.Connection.Logon(0, sapcnobj.sapLogType) <> True Then

Debug.Print "CONECTION FALSE"

Exit Sub

End If

 

 

ご注意: 掲載コードはあくまで参考としてください。

白崎一哉