2.VBからエクセルを起動・終了する基本操作例 |
1.VB6.0 から Excel を起動・終了する(基本操作部分) 2.VB6.0 から Excel 操作時の主なエラーと対処法 3. 4. 5. 6. ※ 実行時バインディング(レイトバインディング/参照設定しなくても使用できる方法)での起動方法は、ご自分でコードが書け ないような人が使用するとトラブルの元となり却って時間がかかる事になりかねませんので、私としては理解しないままで使ってほしくないので今回の見直しから紹介をしない事にしました。 |
下記プログラムコードに関する補足・注意事項 動作確認:Windows Vista・Windows 7 (32bit) / VB6.0(SP6) Option :[Option Explicit] 参照設定:Microsoft Excel *.* ObjectLibrary / Microsoft Scripting Runtime 参照設定方法参照 使用 API: その他 :ツール→オプション→全般→エラートラップで[エラー発生時に中断]以外にチェックを入れておいて下さい。 : |
1.VBからExcelを起動・終了する(基本操作部分) |
Option Explicit '--------------------- Private 変数の宣言部分 ---------------------------- Private Fso As New FileSystemObject 'ファイルを扱う場合、FileSystemObject を使った方が便利なので Private WithEvents xlApp As Excel.Application 'Excel のイベントを利用するので、WithEvents 付きで宣言 Private xlBooks As Excel.Workbooks Private xlBook As Excel.Workbook Private xlSheets As Excel.Sheets Private xlSheet As Excel.Worksheet Private frgClose As Boolean 'Excel が起動中のフラグ '--------------------- Excel の起動処理関係 ---------------------------- Private Sub Command1_Click() 'Excel を起動 Call ExcelOpen("", "") '新規ファイルをオープンして、Excel を起動 '既存のファイルをオープンして、Excel を起動する場合 (ファイルのフルパス , シート名) 'Call ExcelOpen(App.Path & "\Test.xls", "Sheet1") End Sub Private Sub ExcelOpen(ByVal FilePath As String, ByVal SheetName As String) 'Excel のオープン処理用プロシージャ If Not xlApp Is Nothing Then Exit Sub 'すでに起動中の場合の処理 frgClose = False '起動中は、ユーザーが Excel を閉じれないように If Len(FilePath) = 0 Then '新規のファイルを開く場合 Set xlApp = New Excel.Application Set xlBooks = xlApp.Workbooks Set xlBook = xlBooks.Add Set xlSheets = xlBook.Worksheets Set xlSheet = xlSheets.Item(1) Else 'ファイルの有無を確認 If Fso.FileExists(FilePath) Then '既存のファイルを開く場合 Set xlApp = New Excel.Application Set xlBooks = xlApp.Workbooks Set xlBook = xlBooks.Open(FilePath) Set xlSheets = xlBook.Worksheets 'シート名の有無の確認 Dim frgShtname As Boolean For Each xlSheet In xlSheets If SheetName = xlSheet.Name Then frgShtname = True End If Next 'シート名が見つかった場合 If frgShtname Then Set xlSheet = xlSheets(SheetName) Else '指定のシート名が見つからない場合は、シートを追加 Set xlSheet = xlBook.Worksheets.Add '追加したシートの名前を変更 xlSheet.Name = SheetName End If Else MsgBox "ご指定のファイルが見つかりません。" Exit Sub End If End If xlApp.Visible = True End Sub '--------------------- Excel の終了処理関係 ---------------------------- Private Sub Command2_Click() 'Excel を終了 'Excelファイルを上書き保存(True 又省略すれば)して終了処理を実行(名前をつけて保存も同じ) Call ExcelClose(Fso.BuildPath(App.Path, "Test.xlsx"), True) 'False の場合保存しないで終了 End Sub Private Sub ExcelClose(ByVal FilePath As String, Optional ByVal CancelSave As Boolean = True) 'Excel の終了処理用プロシージャ If xlApp Is Nothing Then Exit Sub '起動していない場合は処理しない 'ツール→オプション→全般→エラートラップ でエラー処理対象外のエラーで中断にチェックを入れておいて下さい。 On Error Resume Next 'エラーが発生しても解放処理を実行したいので frgClose = True 'True : 閉じる事ができる(プログラムからの終了なので) xlApp.DisplayAlerts = False '保存時の問合せのダイアログを非表示に設定 '保存する場合 If CancelSave Then Dim kts As String Dim fm As String 'Excel ファイルの拡張子を取得 kts = Fso.GetExtensionName(FilePath) kts = LCase(kts) '拡張子を小文字で取得 '拡張子に合せて保存形式を変更 Select Case kts Case "csv" 'CSV (カンマ区切り) 形式 fm = xlCSV Case "xls" 'Excel 97〜2003 ブック形式 fm = xlExcel8 Case "xlsx" 'Excel 2007〜ブック形式 fm = xlOpenXMLWorkbook Case "xlsm" 'Excel 2007〜マクロ有効ブック形式 fm = xlOpenXMLWorkbookMacroEnabled Case Else '必要なものは、追加して下さい。 fm = xlWorkbookDefault MsgBox "ファイルの保存形式を確認して下さい。" End Select xlBook.SaveAs FileName:=FilePath, FileFormat:=fm 'ファイルに保存 End If Set xlSheet = Nothing 'xlSheet を解放 Set xlSheets = Nothing 'xlSheets を解放 xlBook.Close 'Book を閉じる Set xlBook = Nothing 'Book を解放 xlBooks.Close 'Books を閉じる Set xlBooks = Nothing 'Books を解放 xlApp.Quit 'Excel を終了します。 Set xlApp = Nothing 'xlApp を解放 If Err.Number <> 0 Then MsgBox "終了処理中にエラーNo." & Err.Number & " のエラーが発生しましたので確認下さい。" Err.Clear End If End Sub Private Sub Form_Unload(Cancel As Integer) '終了時の処理 'Excel.EXE が起動していたら閉じる If Not xlApp Is Nothing Then Call ExcelClose("", False) End If End Sub Private Sub xlApp_WorkbookBeforeClose(ByVal Wb As Excel.Workbook, ByRef Cancel As Boolean) 'VB6.0 から Excel の WorkbookBeforeClose イベントを監視してユーザーが Excel を閉じれないようにする '(VB6.0 から Excel を操作している途中でユーザーが勝手に Excel を閉じるとエラーが発生するので) If frgClose = False Then Cancel = True 'ユーザーが Excel を閉じようとしたので、処理をキャンセルする Else Cancel = False 'キャンセルしない(閉じる) End If End Sub |
2. |
1.コンパイルエラー:ユーザー定義型は定義されていません。 Microsoft Excel *.* ObjectLibrary への参照設定を忘れていませんか? 2.Sub、Function、または Property が定義されていません。(Error 35) が発生する。 Dim xlCells As Excel.Range のような変数を宣言せずに使用していませんか? 3.オブジェクト変数または With ブロック変数が設定されていません。(Error 91) が発生する。 変数を宣言していても、代入(Set xlCells = xlSheet.Cells)を忘れていませんか? |
3. |
4. |
5. |
6. |
検索キーワード及びサンプルコードの別名(機能名) |