SAPデータを.XLSXファイルにエクスポートしてから、このファイルをExcelにインポートするVBAコードがあります。ファイルがインポートされた後、私は多くの他のアクションを実行するコードを持っています(例えば、データの解析や整理、セル数のカウントなど)。マクロが終了した後、エクスポートされたSAP .XLSXファイルが開きます。マクロが完了した後にエクスポートされたファイルが開かれます。不要です。
正常に終了するKill関数を使用しようとしましたが、マクロの最後にファイルを開く代わりに、見つからないファイルに関するメッセージが表示されます。
マクロが完了する前にファイルを閉じようとしましたが、ファイルが実際に開かれていないのでエラーになります。
マクロを完了する前にファイルを開いて閉じようとしましたが、正常に終了しましたが、マクロの最後に再びファイルが開きます。
しかし、コードを壊してステップスルーすると、ファイルは最後に開かれません。
私はいくつかの他のさまざまなタイマー機能、DoEventsなどを試しましたが、まだ運がありません。 1.エクスポートされたファイルがコードの最後に開かないようにするか、 を開きません。2.ファイルが見つからないように「ファイルが見つかりません」というメッセージが表示されないようにします。マクロ中に。
サンプルコード
'Opens SAP connection
Dim SAPGUI
Dim Applic
Dim connection
Dim Session
Dim WSHShell
Application.DisplayAlerts = False
Shell "C:\Program Files (x86)\SAP\FrontEnd\SAPgui\saplogon.exe", vbNormalFocus
Set WSHShell = CreateObject("WScript.Shell")
Do Until WSHShell.AppActivate("SAP Logon ")
Application.Wait Now + TimeValue("0:00:01")
Loop
Set WSHShell = Nothing
Set SAPGUI = GetObject("SAPGUI")
Set Applic = SAPGUI.GetScriptingEngine
Set connection = Applic.OpenConnection("04. R3 PRD []", True)
Set Session = connection.Children(0)
' Session.findById("wnd[0]").iconify
Session.findById("wnd[0]/usr/txtRSYST-MANDT").Text = "100"
Session.findById("wnd[0]/usr/txtRSYST-BNAME").Text = Environ("Username")
Session.findById("wnd[0]/usr/pwdRSYST-BCODE").Text = sysstart.psswrd
Session.findById("wnd[0]").sendVKey 0
Session.findById("wnd[0]").maximize
Session.findById("wnd[0]/tbar[0]/okcd").Text = "/nZUI_SELECTION"
Session.findById("wnd[0]").sendVKey 0
''Performs some filters and opens data
' Export from SAP to .xlsx file.
Session.findById("wnd[0]/usr/cntlGRID1/shellcont/shell").contextMenu
Session.findById("wnd[0]/usr/cntlGRID1/shellcont/shell").selectContextMenuItem "&XXL"
Session.findById("wnd[1]/tbar[0]/btn[0]").press
Session.findById("wnd[1]/usr/ctxt[0]").Text = "C:\Users\" & Environ("Username") & "\Downloads"
Session.findById("wnd[1]/usr/ctxt[1]").Text = "SAP_export.XLSX"
Session.findById("wnd[1]/tbar[0]/btn[11]").press
'Closes SAP connection
Set Session = Nothing
connection.CloseSession ("ses[0]")
Set connection = Nothing
'Clear table from SMS Input
ThisWorkbook.Worksheets("SMS Input").Select
Cells.Select
Selection.ClearContents
'Insert .xlsx file data
Cells.Select
Selection.Delete Shift:=xlUp
Range("A6").Select
With ActiveSheet.ListObjects.Add(SourceType:=0, Source:=Array(_
"OLEDB;Provider=Microsoft.ACE.OLEDB.12.0;Password="""";User ID=Admin;Data Source=C:\Users\" & Environ("Username") & "\Downloads\SAP_export.XLSX;Mode=Share Deny None" _
, _
";Extended Properties=""HDR=YES;"";Jet OLEDB:System database="""";Jet OLEDB:Registry Path="""";Jet OLEDB:Database Password="""";Jet OL" _
, _
"EDB:Engine Type=37;Jet OLEDB:Database Locking Mode=0;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Je" _
, _
"t OLEDB:New Database Password="""";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don't Copy Lo" _
, _
"cale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False;Jet OLEDB:Support Complex Data=False;Je" _
, "t OLEDB:Bypass UserInfo Validation=False"), Destination:=Range("$A$6")). _
QueryTable
.CommandType = xlCmdTable
.CommandText = Array("Sheet1$")
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.PreserveColumnInfo = True
.SourceDataFile = "C:\Users\" & Environ("Username") & "\Downloads\SAP_export.XLSX"
.ListObject.DisplayName = "Table_export3"
.Refresh BackgroundQuery:=False
.MaintainConnection = False
End With
ファイルがインポートされた後、私はいくつかの列を解析し、ワークシート全体で情報を整理。
コードの最後に、私は上記のようにさまざまなバリエーションを試しました。まず
'Open the export and then close to avoid it opening at end of macro.
Workbooks.Open Filename:="C:\Users\" & Environ("Username") & _
"\Downloads\SAP_export.XLSX"
Workbooks("SAP_export.XLSX").Close savechanges:=False
Application.Wait Now + TimeValue("0:00:01")
Kill "C:\Users\" & Environ("Username") & "\Downloads\SAP_export.XLSX"
は、私は、これはそれがOLEDBを使用して.XLSXをインポートセクションの問題だと思ったが、そうではありません。 SAP接続終了後にコードを終了すると、ファイルは自動的に最後に開きます。 私はこの同じ問題を持つ他の投稿を見ましたが、確かな答えはありません。うまくいけば、これは...私はコメントで説明し何をしようとした任意のフィードバックを事前に
おかげで、
あなたはドン何かをやっているコードを持っている場合、」 "私はいくつかのVBAコードを持っています"そのコードの[関連する部分]を共有すると便利かもしれません。あなたがしていることを推測するように私たちに依頼しないでください。 –
こんにちはティム、申し訳ありません。わかりやすくするために関連するコードを追加しました。エクスポートされた.XLSXファイルをSAPから開く自動機能のようですが、マクロが完了するまでは表示されません。これは私が把握しようとしていると起こるのを防ぐためにしようとしているものです。ありがとう! – jmeddy
こんにちは、私はSAPからデータをインポートするいくつかのことを行います。私は複数の関数とサブルーチンに分割しました。それは私のプロセスがSAPからファイルをエクスポートしてからファイルデータをインポートしてファイルを強制終了して成功したと私はクローズすることができましたが、私の場合は一時ファイルだけです。たぶんあなたの問題のセクションを囲んで次のOn Error ResumeとOn Error Goto 0を囲むかもしれません。私はファイルのオープンやエラーに関して、onエラーコードがなくても問題はありません。元のシートの何かがSAPエクスポートで何かを参照している可能性はありますか?ステップ実行して、どうやって行くか見てみてください。 –