VB6.0用掲示板の過去のログ(No.2)−VBレスキュー(花ちゃん)
[記事リスト] [新規投稿] [新着記事] [ワード検索] [管理用]

投稿日: 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


- 関連一覧ツリー (★ をクリックするとツリー全体を一括表示します)

- 返信フォーム (この記事に返信する場合は下記フォームから投稿して下さい)

- VBレスキュー(花ちゃん) - - Web Forum -