10

VBA を使用して SAP Netweaver からデータをプルする方法を知っている人はいますか?

SAP から Excel にデータをエクスポートし、レポートにフォーマットする必要がある日次レポートが多数あります。書式設定を行う実用的な VBA マクロを既に作成しています。データを手動で抽出し、各レポート マクロを個別に実行する必要があります。私のマクロが SAP に入り、レポート #1 のデータを取得し、フォーマットし、レポート #2 のデータを取得するなどの作業を行うことができれば、非常に多くの時間を節約できます。

SAP NetWeaver (リリース 730、バージョン 7300.1.3.1079) を使用しています。レポートは、Excel のピボット テーブルとグラフだけです。

4

1 に答える 1

32

これはすべて、SAP システムへのアクセスの種類によって異なります。データをエクスポートする ABAP プログラムや、マクロが呼び出してデータを直接取得したり、SAP にファイルを作成させたりできる RFC がおそらく最適です。

ただし、原則として、この種の回答を探している人は、IT 部門が SAP システムのカスタマイズに何ヶ月も費やす必要のない即時のソリューションを探しています。

その場合、おそらく SAP GUI スクリプトを使用する必要があります。SAP GUI スクリプトを使用すると、Excel を自動化するのとほぼ同じ方法で Windows SAP GUI を自動化できます。実際、Excel マクロから SAP GUI を直接呼び出すことができます。詳しくはこちらをご覧ください。SAP GUI には、Excel と同様のマクロ記録ツールがあります。Excel VBA とほぼ同じ VBScript でマクロを記録し、通常は直接 Excel マクロにコピーして貼り付けることができます。

サンプルコード

これは、私がアクセスできる SAP システムに基づく簡単な例です。

Public Sub SimpleSAPExport()
  Set SapGuiAuto  = GetObject("SAPGUI") 'Get the SAP GUI Scripting object
  Set SAPApp = SapGuiAuto.GetScriptingEngine 'Get the currently running SAP GUI 
  Set SAPCon = SAPApp.Children(0) 'Get the first system that is currently connected
  Set session = SAPCon.Children(0) 'Get the first session (window) on that connection

  'Start the transaction to view a table
  session.StartTransaction "SE16"

  'Select table T001
  session.findById("wnd[0]/usr/ctxtDATABROWSE-TABLENAME").Text = "T001"
  session.findById("wnd[0]/tbar[1]/btn[7]").Press

  'Set our selection criteria
  session.findById("wnd[0]/usr/txtMAX_SEL").text = "2"
  session.findById("wnd[0]/tbar[1]/btn[8]").press

  'Click the export to file button
  session.findById("wnd[0]/tbar[1]/btn[45]").press

  'Choose the export format
  session.findById("wnd[1]/usr/subSUBSCREEN_STEPLOOP:SAPLSPO5:0150/sub:SAPLSPO5:0150/radSPOPLI-SELFLAG[1,0]").select
  session.findById("wnd[1]/tbar[0]/btn[0]").press

  'Choose the export filename
  session.findById("wnd[1]/usr/ctxtDY_FILENAME").text = "test.txt"
  session.findById("wnd[1]/usr/ctxtDY_PATH").text = "C:\Temp\"

  'Export the file
  session.findById("wnd[1]/tbar[0]/btn[0]").press
End Sub

スクリプトの記録

wnd[1]/tbar[0]/btn[0]スクリプトの記録を使用して、要素の名前を見つけることができます。[ローカル レイアウトのカスタマイズ] ボタンをクリックします。おそらく次のように なります。ローカル レイアウトのカスタマイズ
次に、[スクリプトの記録と再生] メニュー項目を見つけます。
スクリプトの記録と再生
その中でMoreボタンを使用すると、VB スクリプトが記録されているファイルを表示/変更できます。出力形式は少し乱雑で、テキストの選択、テキスト フィールド内のクリックなどを記録します。

編集:アーリーバインディングとレイトバインディング

提供されたスクリプトは、VBA マクロに直接コピーすると機能するはずです。これは遅延バインディングを使用し、行Set SapGuiAuto = GetObject("SAPGUI")は SapGuiAuto オブジェクトを定義します。

ただし、使用しているオブジェクトのプロパティとメソッドが VBA エディターに表示されるように事前バインディングを使用する場合はsapfewse.ocx、SAP GUI インストール フォルダーに への参照を追加する必要があります。

于 2013-10-18T18:29:36.503 に答える