2017-07-12 6 views
1

Excelスプレッドシートを開き、Excelテーブルにデータをコピーした後、メッセージボックスを表示するExcelファイルに格納されたサブを実行してから、グラフ(または少なくとも、それは!)。MS Access - > Excel MsgBoxが2回表示される

これは、アクセスコードです:

Option Compare Database 
Option Explicit 

Sub QueryExportMod() 

'variable initilizations and definitions --------------------------------------------------------------------------------------- 



Dim db As DAO.Database 
Set db = CurrentDb 

Dim totalFindingsQuery As String 
Dim breakdownFindingsQuery As String 
totalFindingsQuery = 'SQL text 
breakdownFindingsQuery = 'SQL text 

Dim tempQ1 As DAO.QueryDef 
Dim tempQ2 As DAO.QueryDef 
Set tempQ1 = db.CreateQueryDef("tempQ1", totalFindingsQuery) 
Set tempQ2 = db.CreateQueryDef("tempQ2", breakdownFindingsQuery) 

Dim rs1 As Recordset 
Dim rs2 As Recordset 
Set rs1 = db.OpenRecordset("tempQ1") 
Set rs2 = db.OpenRecordset("tempQ2") 

Dim xlApp As Excel.Application 
Dim wb As Excel.Workbook 
Dim ws As Excel.Worksheet 
Set xlApp = New Excel.Application 
Set wb = xlApp.Workbooks.Open(CurrentProject.Path & "\ExportExcelTest.xlsm") 
Set ws = wb.Worksheets("Sheet1") 

Dim table As ListObject 
Set table = ws.ListObjects("Table1") 



'Modifying files and data ------------------------------------------------------------------------------------------------------ 


ws.ListObjects("Table1").DataBodyRange.Rows.Delete 

ws.Range("A2") = "Total Findings" 
ws.Range("B2").CopyFromRecordset rs1 
ws.Range("A3").CopyFromRecordset rs2 

'Call autoGraph, the Excel sub 
xlApp.Run "autoGraph()" 

xlApp.Visible = True 

Set xlApp = Nothing 
Set wb = Nothing 
Set ws = Nothing 

DoCmd.DeleteObject acQuery, "tempQ1" 
DoCmd.DeleteObject acQuery, "tempQ2" 

End Sub 

'to be able to run the sub from a macro 
Function KGQueryExportCall() 
Call QueryExportMod 
End Function 

そして、ここでは、Excelのサブです:私はアクセスサブQueryExportModを実行すると

Sub autoGraph() 

'AppActivate Application.Caption 
MsgBox " <message> " 

Dim tb1Range As Range 
Set tb1Range = ActiveSheet.Range("Table1") 

Range("Table1").Select 
ActiveSheet.Shapes.AddChart2(201, xlColumnClustered).Select 
ActiveChart.SetSourceData Source:=Range("Table1") 


End Sub 

、メッセージボックスが生成されます(私は別の問題がありますそれは常に他のウィンドウの後ろにあります。誰かが現在のウィンドウに強制する方法を知っていますか?私はAppActivate Application.Captionを試しましたが、コードが壊れました)、メッセージボックスで「OK」を押すと、メッセージボックスが再び表示されます。この複製で「OK」を押すと、Excelスプレッドシートが開き、他のすべてが正常に機能します。この複製をどのように取り除くことができますか?あなたの助けのための

おかげ

EDIT:私はそうのように、Excelのサブで2デバッグ行を追加して置く:

DeBug.Print("1") 
MsgBox " <message> " 
DeBug.Print("2") 

とイミディエイトウィンドウで

1 2 1 2を得ることになりましたアクセスモジュールを実行したので、今Excelサブが2回実行されていることを知っていますが、それでも何が原因か分かりませんt。私はExcelの内部から右Excelのモジュールを実行すると、私は、私はそれが二回、実際のアプリケーションの開口部としなければならないことと信じて

1 2

を取得しますか?私はメッセージボックスラインなしで実行すると、私は吃音を参照して、ウィンドウは、その後ほとんどすぐに開閉するように、そしてあなたがここに括弧を追加しないでください再び

答えて

2

を再オープンします。Accessそれで

xlApp.Run "autoGraph()"

Application.Runでカッコを追加するとランタイムエラーが発生しますが、Excelでは明らかに2回実行します。

これらを削除すると修正されます。

+1

Wah。だから余計な懲罰は余計なものではなく、積極的に有害である*! #TIL –

+0

返事ありがとう、Erik!私は引用符を削除し、それは完全に動作します、ありがとう!私はOLEオートメーションが何であるか分かりませんが、代わりにMsgBoxを呼び出すことをどうお勧めしますか? また、私はAccessからデータをコピーしてExcelサブを実行した直後に 'xlApp.Visible = True'を持っています。これは実際のスプレッドシートを表示するために働いています。私は 'xlApp.UserControl = True'を' xlApp.Run "autoGraph"の前と後の両方に置いていますが、問題は依然として続き、何も影響を与えていないようです。 –

+0

@Calカッコ(引用符ではありません)。引用符は*必須*です。 –

関連する問題