web-dev-qa-db-ja.com

SAPからデータを引き出すためのVBAの一般的な方法

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

SAPからExcelにデータをエクスポートし、それをレポートにフォーマットする必要がある日次レポートが多数あります。フォーマットを行うVBAマクロを既に作成しました。データを手動で抽出し、各レポートマクロを個別に実行する必要があります。私のマクロがSAPに移動し、レポート#1のデータを取得し、フォーマットし、レポート#2のデータを取得するなど、時間を大幅に節約できます。

SAP NetWeaver(Release 730、バージョン7300.1.3.1079)を使用しています。レポートは、Excelのピボットテーブルとチャートです。

ありがとう!

11
S M Perron

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

ただし、原則として、この種の回答を探している人々は、IT部門がSAPシステムのカスタマイズに数か月を費やす必要のない即時解決策を探しています。

その場合、おそらくSAP GUIスクリプトを使用する必要があります。 SAP GUIスクリプトを使用すると、Excelを自動化するのとほぼ同じ方法でWindows SAP GUIを自動化できます。実際、Excel GUIから直接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]_などの要素の名前を見つけるために、スクリプト記録を使用できます。 [ローカルレイアウトのカスタマイズ]ボタンをクリックすると、おそらく次のようになります。 Customize Local Layout
[スクリプトの記録と再生]メニュー項目を見つけます。
Script Recording and Playback
その内Moreボタンをクリックすると、それは、レコード、VBスクリプトがに記録されていること。出力形式は、ビット厄介であるファイルを変更/確認することができますテキストの選択、テキストフィールド内のクリックなど。

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

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

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

30
AndASM