Excel を操作 CreateObject("Excel.Application")

-
三流君の [コンビニ系HPへ] [VBA系HPへ] [ASP系HPへ] [愚痴系HPへ]
Access から Excel 連携 関連項目リンク
[No.2 AccessからExcel出力]
[No.7 MDBと同フォルダのExcelファイルを開く]
[No.13 Excel セルに名前を付けてみる]
[No.14 Excel 隣のシートを参照して逃げる]
[No.48 AccessからExcelブックを開き、書式設定を行う]

[No.54 AccessからExcel開いて、処理終了後に閉じたい]
[No.58 Access クエリーを Excel既存シートへ エクスポート]
[No.59 Excelのマクロ付きフォーマットを壊されないように]
[No.64 AccessからExcelファイルを開いて・印刷して・閉じたい]
[No.93 Access2000 ADOでクエリーのレコードを参照 Excelへ出力]

[No.100 AccessからExcel 分類別のシートへデータを転記してみる]

VB,Access から Excel を操作 CreateObject("Excel.Application")

実物を確認したい方は、→021.LZH 38KB をダウンロードして、見てください。
VB,Accessのサンプルが入っています
/*
 * 2.VBやAccessからExcelにデータを書き込む
*/
いろいろな場面で、
VBやAccessからExcelを起動し、
データを書き込みたいと思います。

今回は、そんな時のサンプルになれば、、と思い書いてみます。
*指摘・要望、まってます。

例として、調査したいディレクトリを受け取り、
Excelを起動して、結果を書き込むモジュールを下記に記述します。
* 起動方法 DirListToExcel("C:\windows") など、引数でディレクトリを渡す

----
Public Sub DirListToExcel(strDIR As String)

On Error GoTo Err_DirListToExcel

    Dim MyDirName As String
    Dim MyPath As String
    Dim oApp As Object
    Dim nYLINE As Integer

    '¥を付けるか判断する。
    If Right(Trim(strDIR), 1) <> "\" Then
        strDIR = Trim(strDIR) & "\"  '\を追加する
    End If

    'ディレクトリが存在するか、チェックする。
    If Dir(strDIR, vbDirectory) = "" Then
        MsgBox strDIR & "ディレクトリが見つかりません"
        Exit Sub
    End If
    
    '検索するパターンを渡す
    MyPath = Trim(strDIR)
    MyDirName = Dir(MyPath, vbDirectory)   ' 最初のディレクトリ名を返します。
    If MyDirName = "" Then
        MsgBox "該当ファイルが一件もありません"
        Exit Sub
    End If
    
    'Excel を起動
    ' ↓Accessウイザードで作成されます
    Set oApp = CreateObject("Excel.Application")
    oApp.Visible = True
    'Only XL 97 supports UserControl Property
    On Error Resume Next
    oApp.UserControl = True
    '-------------------------------

    'ここから、がんばって、自分で作成
    oApp.Workbooks.Add '新規のワークシートを追加する
    
    'タイトルを入れる
    oApp.Cells(1, 1) = MyPath & " から下のディレクトリ一覧 " & Date
    
    'ディレクトリの出力
    nYLINE = 2
    Do While MyDirName <> ""   ' ループを開始します。
        ' ビット単位の比較を行い、MyName がフォルダかどうかを調べます。
        If (GetAttr(MyPath & MyDirName) And vbDirectory) = vbDirectory Then
            oApp.Cells(nYLINE, 1) = MyPath & MyDirName    'ディレクトリ名を送信
            nYLINE = nYLINE + 1
        End If
        MyDirName = Dir    ' 次のディレクトリ名を返します。
    Loop

    Set oApp = Nothing

Exit_DirListToExcel:
    Exit Sub

Err_DirListToExcel:
    MsgBox Err.Description
    Resume Exit_DirListToExcel

End Sub
----

/*
 * 3.Excel起動解説
*/

Access,VB 同じ関数で動くみたいなので、
共通して、説明します。

まず、Excelの起動方法です。

    Dim oApp As Object
で、操作用の変数を確保します

    Set oApp = CreateObject("Excel.Application")
    oApp.Visible = True
    'Only XL 97 supports UserControl Property
    On Error Resume Next
    oApp.UserControl = True

CreateObjectを使用し、エクセルのオブジェクトを作成します。
何いってんの、、英単語翻訳しただけジャン?
まぁまぁ、、

oApp.Visible = True で見えるようにして、、、
oApp.UserControl = True でユーザーが操作可能に、、

なんか、自信なさそうだけど、、?

はい、実は、Accessのボタンのウイザードで作成してくれるんですよ。。

あっ、そうなの。
じゃ、Excelを操作するときの決り文句で知っとけばいいの?

ホントは、知らないと、Wordの時は、、など、応用できないので、、、
わかりやすい資料見つけたら、また、解説します。

/*
 * 4.Excelを操作する
*/
Excelの起動が無事にできたところで、
次に、Excelを操作するには?
です。

oApp.Workbooks.Add '新規のワークシートを追加する
で新規のブックを追加します。
    
'タイトルを入れる
oApp.Cells(1, 1) = MyPath & " から下のディレクトリ一覧 " & Date
セルのA1(1,1の座標)にタイトルを入れます。

oApp.Cells(nYLINE, 1) = MyPath & MyDirName    'ディレクトリ名を送信
.Cells(Y, X) でデータをY行X列に入れることができます。

解説途中で悪いけど、
なんで、Workbooks.Add は、新規ブックの追加、
Cells(1, 1)は、、、って知ったの?どこみるの?

えっとですね、下準備で、Excelを起動して、
ツール・マクロの記録で記録して、
それをヘルプで調べたんですよ。

Excelのオブジェクト体系がわかってくると、いろいろできますよ。
(楽しいですよ)

それをもっと知りたいんだけど、、なぁ。。

今回は、
Workbooks.Add と Cells(Y, X) で、、、落ち着いたら、いろいろやりましょう。

じゃ、次回以降って約束で、、、

枠外解説・グチ --- 行儀が悪い書き方です

oApp.Cells(nYLINE, 1) = XXXX
って書き方、行儀が悪い書き方です。
オブジェクト.ブック.シート.セル が よい書き方です。
ExcelのVBAをやるときに、詳しく、解説したいと思います。

/*
 * 5.おわりの挨拶
*/
なんとなく?わかりましたか?(楽しめましたか?)
処理結果をExcelに出力できると、
意外と便利なので、この機会に、、おぼえていただけると、、

オマエの教え方がイマイチ、、だよ、、

そうですか、、、次回はビシット、、なんてね。
マクロ記録


ブックの新規作成ボタンを押す。
マクロの記録を停止し、 Alt+F11で記録されたモジュールを見る
ここれをみて、 .addを勉強する? サンプル実行結果



CreateObject("Excel.Application") Excel操作の関連項目
[No.2 AccessからExcel出力]
http://www.ken3.org/backno/backno_vba01.html#2
で、
・ウィザードを使ってたサンプルを作れることを説明
・マクロ記録でExcelの操作をVBAにする
・頭にオブジェクト変数を付けてAccessからExcelを操作
を簡単に説明しました。

[No.7 MDBと同フォルダのExcelファイルを開く]
http://www.ken3.org/backno/backno_vba02.html#7
では、
CurrentDb.NameからMDBの位置を取りだし、
相対位置(同じパス)のExcelファイルを開きました。

[No.13 Excel セルに名前を付けてみる]
http://www.ken3.org/backno/backno_vba03.html#13
では、
Accessから名前付きのセルにデータをセットして、
変更が少ないシステムについて説明しました。

[No.48 AccessからExcelブックを開き、書式設定を行う]
http://www.ken3.org/backno/backno_vba10.html#48
では、
AccessからExcelブックを開き、
objEXCEL.Selection.Style = "Comma [0]"
objEXCEL.Selection.NumberFormatLocal = "0.00_ "
で書式設定を行うサンプルを解説しました。

[No.54 AccessからExcel開いて、処理終了後に閉じたい]
http://www.ken3.org/backno/backno_vba11.html#54
では、
.RunでExcelのVBA関数を呼び出し、処理後、
oApp.ActiveWorkBook.Close SaveChanges:=False
oApp.Quit で終了する処理を解説しました。

[No.59 Excelのマクロ付きフォーマットを壊されないように]
http://www.ken3.org/backno/backno_vba12.html#59
では、
ActiveWorkbook.SaveAs FileName:="XXXXXX"
と別名に保存して、元ファイルを壊されない小細工を説明しました。


質問や要望、クレームを送る(三流君に連絡する 連絡方法)

質問や要望など連絡方法でお互い確認が取りやすく、便利なのが掲示板なのですが、私の対応のまずさから不定期で荒れてしまい、掲示板は現在封鎖中です。(反省しなきゃ)
感想や質問・要望・苦情など 三流君へメッセージを送る。
時間的余裕のある要望・質問・苦情の場合は、下記のフォームからメッセージを送ることができます。
あなたのお名前(ニックネーム):さん
返信は?: 不用(HP更新を待つ) , E-mail→ アドレス:に返事をもらいたい

(感想や質問・要望・苦情はHPで記事に載せることがあります。)

急ぎで連絡がほしい、そんな時は:[三流君連絡先]に連絡してください。

番外編 愚痴系で書いてた今日の一品 (短いサブ関数など)

2000/05/13 SQL Count関数を使ってみる
2000/05/11 Access97 標準関数Midなどが使えない
2000/05/09 SendObjectのエンコード
2000/05/08 クエリーで〜以外とは
2000/04/27 Imagingコントロールを使ってみた
2000/04/25 Excel97 VBA イベントなど
2000/04/24 Access97で複数のプリンタを切替えて使用
2000/04/20 書式付きエクスポート DoCmd.OutputToで、できます
2000/04/19 Access97でExcel形式へExport時に書式設定を行いたい
2000/04/13 Access97でOutlook97/98とリンクする方法
2000/04/13 VBA Nameステートメント
2000/04/04 Accessでキー取得
2000/04/04 AccessでFile参照ダイアログ?
2000/04/03 縦書用数値変換改良
2000/04/01 Access Err テーブルを消したい
2000/03/31 縦書き数値、どうしてますか?
2000/03/29 VBA 手抜きで、処理後、explorerを開く
2000/03/28 Access --> Word へデータ
2000/03/24 名前一覧Excelの機能で、同じことできました
2000/03/23 Excel97 VBA セルに付けた名前一覧を作成する
2000/03/21 Excel セルに名前付け
2000/02/25 iniFileを読む GetPrivateProfileString
2000/02/15 Excel VBA Rangeオブジェクトとサンプル
2000/02/14 Access97 SizeMode/OLEサイズ で画像調整
2000/02/10 Access97 Pictureプロパティとサンプル
2000/02/09 Access97 集計クエリーで重複値をハジク
2000/02/07 Access97 サブフォームへ値をセット
2000/02/04 Access97 コントロールソース、チョットした使用法
2000/02/01 Access97 フォームフッター
2000/01/18 Access97 now()関数で有効期限処理、、、

←パソコンの技術系の書籍を探しているなら コンピュータ関連の出版社33社(アスキー、インプレス等)が共同運営するコンピュータの本・専門店 種類が豊富で探し易い※在庫ありが48時間以内発送


[三流君(TOP)]へ戻る。