2013-10-18 107 views
6

のためにSAPからデータを引っ張って誰がするSAP NetWeaverからデータをプルするVBAを使用する方法を知っていますか?VBAはダミー

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

私はSAP NetWeaver 7300.1.3.1079)。レポートはExcelのピボットテーブルとチャートだけです。

ありがとうございます!

+1

データをエクスポートする製品は指定しないでください(SAPは膨大な数の製品を出荷している会社です)。どのようなレポートや書式設定の基礎となるレポート手法は指定しません。これ以上の情報なしでこの質問に答えるのは難しいです。 – vwegert

答えて

26

このすべては、あなたのSAPシステムに持っているアクセスの種類をによって異なります。データを直接エクスポートするために呼び出すことができるデータおよび/またはRFCをエクスポートするABAPプログラム、またはSAPがファイルを作成するようにするのがおそらく最適です。

一般的に、この種の回答を探している人は、IT部門が何ヶ月も自分のSAPシステムをカスタマイズする必要はありません。あなたはおそらく、SAP GUIスクリプトを使用したいという場合には

。 SAP GUIスクリプトを使用すると、Excelを自動化するのとほぼ同じ方法でWindows SAP GUIを自動化できます。実際には、Excelマクロから直接SAP GUIを呼び出すことができます。詳しくはhereを読んでください。 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 Scriptが記録されているファイルを表示/変更することができます。初期および後期直接VBAマクロにコピーした場合に提供されたスクリプトは動作するはず

を結合:出力形式は

など、それがテキストフィールド内をクリックし、テキストを選択するようなものを記録、編集少し厄介です。レイトバインディングを使用すると、Set SapGuiAuto = GetObject("SAPGUI")行にSapGuiAutoオブジェクトが定義されます。

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

+0

ありがとう!私は今日、Script Recordingでいくつかの実験をします。私がやろうとしていることは、最良の選択肢のように思えます(特に、私が働くSAP DBは顧客によって所有されており、IT代理店は私のために何もしません)。 –

+0

SAP GUI Scriptingページに提供したリンクは、スクリプトの作成に関する多くの情報を持っていましたが、VBAを使用してSAP GUIを呼び出す方法については何も見つかりませんでした。私は、スクリプトを逐語的にコピー/ペーストすることはできないと仮定しています。有効にする必要がある特定の参照ライブラリはありますか? SapGuiAutoのような変数を宣言する必要がありますか? –

+1

スクリプトをそのままコピーすることができます。スクリプトはレイトバインディングを使用しています。私は、このための早期バインディングと遅いバインディングの詳細を解答に編集します。 – AndASM