投稿時間:2004/08/09(Mon) 10:29 投稿者名:みっち〜
URL :
タイトル:Re^2: VBからEXCELファイルを作成し、完了後ファイルがうまく開かない
> > このとき、ファイル(複数)の作成が完了したらAPI関数ShellExecuteを使用して > >ファイルの格納先の ディレクトリを画面表示するようにしています。 > > ShellExecute でそのような事できましたか?
説明が言葉不足と私自身の理解不足で申し訳ありません。 こちらの ファイル操作関係 の「指定のフォルダをエクスプローラで表示する」を参考にさせて いただきました。
> > 上記のWindows98SEでは問題ないのですが、OSがWindows2000でEXEを実行すると、EXEを終 了せずに出 > > 力したファイルを開こうとするとファイルがうまく開けません。(EXCELのツールバーのみ が表示され > > る) > > 状況がよく解りません。 非常に説明しづらいのですが… Windows2000のマシンでEXEを実行すると、EXCELのタイトル、ツールバーは表示されるのですが、表 の部分だけが表示されないのです。
> 再現できる(部分ではなく)コードを投稿して下さい。
以下にコードを記述します。 よろしくお願いします。
****************************************************************************** Option Explicit
'拡張子に関連付けられたプログラムを実行する (P699) Private Declare Function ShellExecute Lib "shell32.dll" _ Alias "ShellExecuteA" (ByVal hwnd As Long, _ ByVal lpOperation As String, ByVal lpFile As String, _ ByVal lpParameters As String, ByVal lpDirectory As String, _ ByVal nShowCmd As Long) As Long '指定のウインドウを非表示にし、他のウインドウをアクティブ化 Private Const SW_HIDE = 0 'ウインドウをアクティブ化し表示(元の位置とサイズで復元) Private Const SW_RESTORE = 9 'ウインドウをアクティブ化し最大表示する Private Const SW_SHOWMAXIMIZED = 3 ****************************************************************************** Public Function gfb_PrintData() As Boolean On Error GoTo Err_gfb_PrintData
Dim sFileName As String 'ファイル名(フルパス) Dim iRc As Integer Dim iLp As Integer gfb_PrintData = False gWS.BeginTrans '===データ作成=== If Not gfb_CreateData2() Then If Not gbCancel Then MsgBox "Excelデータの作成に失敗しました", vbCritical + vbOKOnly, gcAP P_TITLE End If gWS.Rollback gfb_PrintData = True GoTo Exit_gfb_PrintData End If gWS.CommitTrans If gfb_OutPutExcel() Then MsgBox "Excelファイルの作成が完了しました。", vbOKOnly + vbInformati on, gcAPP_TITLE 'フォルダを開く ShellExecute frmMain.hwnd, "Open", "D:\出力先", _ vbNullString, vbNullString, SW_RESTORE End If
gfb_PrintData = True
Exit_gfb_PrintData: Exit Function Err_gfb_PrintData: MsgBox Err.Description & " (" & Err.Number & ")" Resume Next Cancel_Error: gfb_PrintData = True Exit Function End Function ****************************************************************************** Public Function gfb_OutPutExcel() As Boolean On Error GoTo Err_gfb_OutPutExcel Dim oExcelApp As Object 'Excelオブジェクト Dim oDataSheet2 As Object 'Excelシートオブジェクト Dim sFileName As String 'Exlce出力ファイル名(フルパス) Dim rsK As Recordset Dim bFlg As Boolean gfb_OutPutExcel = False Set rsK = gDB.OpenRecordset(TB_WEEK, dbOpenSnapshot) flgOpen = False Do Until rsK.EOF bFlg = False If flgOpen = True Then '----- Excelファイルデータ保存 ----- oDataSheet2.SaveAs (sFileName) Dim w For Each w In oExcelApp.Workbooks w.Save Next w oExcelApp.Quit flgOpen = False End If If Dir(App.Path & "\wk_雛型.xls") <> "" Then Kill App.Path & "\wk_雛型" End If '出力ファイル名保存---------- giFIdx = giFIdx + 1 ReDim Preserve GM_FName(giFIdx) sFileName = gsEXL_OUT_PATH & giFIdx & "タイトル.xls" '出力ファイ ル名 GM_FName(giFIdx) = sFileName '--------------------------- '----- 雛形のExcelをコピーする ----- FileCopy App.Path & "\" & gcEXL_IN_FILE, App.Path & "\wk _雛型.xls" '----- Excelを開く ----- Set oExcelApp = CreateObject(Class:="Excel.Application") oExcelApp.Workbooks.Add (App.Path & "\wk_" & gsEXL_OUT_FILE) Set oDataSheet2 = oExcelApp.ActiveWorkbook.Worksheets("sheet1")
flgOpen = True '-----シートへ出力------------------------------------- oDataSheet2.cells(4, 2).Value = "タイトル1" oDataSheet2.cells(4, 4).Value = "タイトル2" rsK.MoveNext Loop If flgOpen = True Then '----- Excelファイルデータ保存 ----- oDataSheet2.SaveAs (sFileName) For Each w In oExcelApp.Workbooks w.Save Next w oExcelApp.Quit End If gfb_OutPutExcel = True
Close_gfb_OutPutExcel: Set oExcelApp = Nothing Set oDataSheet2 = Nothing rsK.Close
Exit_gfb_OutPutExcel: On Error GoTo 0 Exit Function
Err_gfb_OutPutExcel: MsgBox "Excelファイル作成処理エラー " & vbNewLine & _ Err.Description & " (" & Err.Number & ")", vbCr itical, gcAPP_TITLE Resume Close_gfb_OutPutExcel End Function
|