2001年1月26日 Wordでのマクロとの非互換を追加
  関谷トップページへ アビリティ授業トップページへ

No.31 「ExcelVBA <補足>フォーム、図形描画、エラー処理など」

2001.1.29 関谷

フォーム

採点表ブックを開いたら、自動的にフォームを開くには

11−1では、ブックを閉じる前に上書きをするプロシージャを作ったが、ここでは、ブックを開くと、自動的にフォームを開く方法を紹介する。(「VBテックラボ&瀬戸遥著、10日でおぼえるExcel VBA入門教室(2000対応)、翔泳社刊、1999、pp.348-349)を参照した。へルプでは見つからなかった。その理由は古いバージョンらしい。「Auto_Openプロシージャは標準モジュールに作成する必要があります。」とある。 「Excel VBA FAQ トラブル編」参照)

1)「採点用フォームを開く」プロシージャの名前を、Sub Auto_Open()プロシージャに変更する。
2)フォームの初期化プロシージャで、最初のセルの選択を追加すれば、現在のActiveセルがどこにあっても、第1レコードの得点セルを指せる。

 		Private Sub UserForm_Initialize()
 			・・・
			Range("C8").Select	' レコード1の得点の選択(Auto_Open()内でも可)
    			データの読み込み
		End Sub

図形描画

上の画面は、Excelでのマクロ実行結果で、下の画面は、ExcelのコードをWordのコードにコピーして、オブジェクトの変更と非互換の変更(「コメント」プロシージャの削除を含む)後に実行したものを示す。

 以下は、「VBテックラボ&瀬戸遥著、10日でおぼえるExcelVBA入門教室(2000対応)、翔泳社刊、1999、pp.213-250)を参照した。

 図形描画の機能は、WordやExcel,PowerpointなどMS Officeで共通の標準機能である。従って、オブジェクト名をActiveSheetからActiveDocumentに変えれば、WordのVBAでも動作するが、一部メソッドやプロパティに非互換がある。(テキストボックスの文字列の扱い、色の指定方法がRGBなど)
 オンラインヘルプでは、「Microsoft Visual Basicのヘルプ」の「Visual Basicの使い方」の「イベント、ワークシート関数、および図形」の「図形で作業する (描画オブジェクト)」に概要の説明がある。それぞれのオブジェクトなどにはハイパーリンクがあるので、クリックして参照できる。

図形描画の実習

 実習では、新しいブックを開き、マクロの記録により、図形描画とそのプロパティ変更を行う。その後、記録されたコードの学習をする。コードが記録された結果のマクロ(VB Editorでのプロシージャ内をクリックし)を「ステップイン」(F8)して、別の並べたワークシートでの動作を確認しながら、図形描画のオブジェクト、メソッド、プロパティとプログラムの方法を学習する。必要に応じて、調べたいオブジェクト名やプロパティ名をクリックしてF1キーを押せば、VBのヘルプ画面が出るので、それで詳細の仕様や使用例、オブジェクトの構造(「対象」をクリック)を確認すること。

3次元の柱体の作り方は、以下の手順による

  1. 4角形を描く
  2. 内部を塗りつぶす
  3. 図形の描画線を破線に変える
  4. 線の太さを変える
  5. 線の色を変える
  6. 図形を多角形にする(オートシェイプの変更)
  7. 図形を円にする(オートシェイプの変更)
  8. 図形に影を付ける
  9. 図形を3D(立体)に変える

 コードのそれぞれの詳細は、ヘルプやオブジェクトブラウザを使って、前述のようにして調べることができる。

    ・・・  
    ActiveSheet.Shapes.AddShape(msoShapeRectangle, 53.25, 121.5, 108#, 80.25). _
        Select
    Selection.ShapeRange.Fill.ForeColor.SchemeColor = 10
    Selection.ShapeRange.Fill.Visible = msoTrue
    Selection.ShapeRange.Fill.Solid
    Selection.ShapeRange.Line.DashStyle = msoLineDash
    Selection.ShapeRange.Line.Weight = 0.25
    Selection.ShapeRange.Line.Visible = msoTrue
    Selection.ShapeRange.Line.Style = msoLineSingle
    Selection.ShapeRange.Line.ForeColor.SchemeColor = 17
    Selection.ShapeRange.Line.Visible = msoTrue
    Selection.ShapeRange.AutoShapeType = msoShape8pointStar
    Selection.ShapeRange.AutoShapeType = msoShapeOval
    Selection.ShapeRange.ScaleWidth 1.01, msoFalse, msoScaleFromTopLeft
    Selection.ShapeRange.ScaleHeight 1.32, msoFalse, msoScaleFromTopLeft
    Selection.ShapeRange.Shadow.Type = msoShadow6
    Selection.ShapeRange.ThreeD.SetThreeDFormat msoThreeD14
    ・・・

コメント

 セルのコメントは、セルをポイントすると、説明のコメント ボックスが表示されるものである。

コメントのプログラミング実習

 図形描画と同じシートでよいが、マクロ記録により、コメントの作成とそのプロパティの変更を行う。この確認(ステップ実行)で、VBAのコードとの関係を学習する。
 なお、コメントの追加では、すでにコメントがあるとエラーになる。その時(エラーを出した後で)、コードの変更を行うとよい。エラーでも続行するようにしたい。このようなエラー対策として、後で説明しているが、On Error 文がある。
 そのほかにコメントの選択などの追加がある。

    On Error GoTo TRAP			'エラー処理で、止まらないようにする。
    Range("C2").Select
    Range("C2").AddComment			'コメントを追加する
TRAP:					'既に有るときにも、エラーとしないため
    Range("C2").Comment.Visible = True  'False 枠を表示しておく。このプロシージャの最後で消す
    Range("C2").Comment.Text Text:="九州職業能力開発大学校:" & Chr(10) & "アビリティ情報コース"
    Range("C2").Comment.Shape.Select	'選択する
    ・・・

ワードアート

 ワードアートも、WordやExcel,PowerpointなどMS Officeで共通の標準機能である。これは、Wordでは、オブジェクト名をActiveSheetからActiveDocumentに変え,最後のRange("I6").Selectを削除したのみで、そのまま動いた。

ワードアートのプログラミング実習

 実習は、図形描画と同じシートでよい。マクロ記録により、ワードアートの作成とそのプロパティの変更を行う。その後、記録されたコードの学習をする。コードの確認は、記録したシートと別のシートでステップ実行をして確認する。

 コードの変更など:オブジェクト.AddTextEffect()メソッドの戻り値は、ワードアートオブジェクトであるので、これを受け取って、オブジェクトのnameプロパティに名前を付けて、疎の後では、shape(名前)で参照する。

    Set NewArt = ActiveSheet.Shapes.AddTextEffect(msoTextEffect17, "Excell 2000 VBA", "MS P明朝", _
        36#, msoTrue, msoFalse, 146.25, 118.5)
    NewArt.Name = "WordArt 18"
    ActiveSheet.Shapes("WordArt 18").Select
    ・・・

エラー処理

エラーが発生したときの処理

 オンラインヘルプ(コメントのプロシージャのerror文字列のなかでクリックしてf1キー、あるいは、VBのヘルプ→目次→ステートメント→M-Z→On Error ステートメント)で、「On Error ステートメント」と「On Error ステートメントの使用例」などを参照のこと。(『On Error ステートメントを使用していない場合に実行時エラーが発生すると、そのエラーは致命的エラーになり、エラー メッセージが表示されてプログラムの実行が停止します。エラー処理ルーチンを指定して、対処します。』)

 上のコメントのエラー処理が例である。

 (「VBテックラボ&瀬戸遥著、10日でおぼえるExcel VBA入門教室(2000対応)、翔泳社刊、1999、pp.391-395などを参照。)


Excel VBA に関するWebページの利用

 たくさんの関連するページがある。それらを参照できれば、役に立つものがある。検索エンジンで検索したもののリンク集を作ったが、個別のキーワード(例えば、auto_open()など)で検索してもよいし、Excel VBA FAQ 一覧などの特定のWebサイトのページ内で検索してもよい。

以上