要件
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
ご注意: 掲載コードはあくまで参考としてください。
白崎一哉