Office 2007でユーザーインターフェースが変更され、それに伴いボタンの動作も2003までとは異なっていることがあります。
2003までの[標準]ツールバー-[表の挿入]ボタンと、2007の[挿入]タブ-[表]グループ-[表]ボタン-[表の挿入]は、表の挿入を行うという点では同じですが、微妙に動作が異なります。
「word2007 8行×10列を超える表の挿入」
という検索は、そんな微妙な動作の違いに起因する疑問を表しています。
2003までの[標準]ツールバー-[表の挿入]ボタンは、ドラッグすることで相当大きな表の挿入もできますが、2007の[挿入]タブ-[表]グループ-[表]ボタン-[表の挿入]からは、ドラッグしても8行×10列より大きな表を挿入することはできません。
▼操作手順:8行×10列より大きな表を作成する
[挿入]タブ-
[表]グループ
-[表]ボタン
-[表の挿入]をクリック
↓
[表の挿入]ダイアログ
-[表のサイズ]欄
-[列数][行数]を指定
↓
[表の挿入]ダイアログ-[OK]ボタンをクリック
2003までのWordでも、メニュー[罫線]-[挿入]-[表]をクリックすると、[表の挿入]ダイアログが表示され、列数と行数を指定して表を挿入できました。
それと同様の操作を行うことで、Word 2007で8行×10列より大きな表を作成することができるのです。
Q:Accessのプログラムの意味を解説してください。
それではフォームの動作を確認しながら、プログラムの意味を確認します。
【1】作成したAccessのファイルを起動します。
【2】画面が開きますので、オブジェクトの「フォーム」を選択します。
【3】「開く」をクリックし、フォームを実行します。
—3で動いているプログラム—
Option Compare Database ←データベース型で比較。
Option Explicit ←宣言をしないと変数が使えないようにする。
Dim Res As Variant ← Resという変数をバリアント型で宣言する。
*変数とは数値、文字、日付などを一時的に記憶しておくための場所です。変数はどんなデータが入るか、使う前に型を宣言する必要があります。バリアント型は何にでも使える便利な型です。変数名は自由に決められます。
ここであまり難しく考えずに、「AccessのVBAでは最初に書く必要がある」という程度でかまいません。
Private Sub Form_Load() ←フォームを読み込んだ時。
Me.AllowAdditions = False ←レコードの追加をできなくする。
Me.AllowDeletions = False ←レコードの削除をできなくする。
DoCmd.SetWarnings False ←Accessからのメッセージを非表示に。
End Sub ←プログラムの終わり。
*このプログラムは、フォームを開いた時点で、レコードの追加や削除はできなくしています。追加や削除はボタンから行うようにしたいためです。
【4】フォームが開いたら、「新規」をクリックします。
【5】最後の行に新規レコードが追加されました。
—4、5で動いているプログラム—
Private Sub 新規_Click() ←新規をクリックした時。
Me.AllowAdditions = True ←レコードの追加をできるようにする。
DoCmd.GoToRecord acDataForm, “***”, acNewRec ←新規レコードへ移動
Me.***.SetFocus ←***へフォーカスを移動する。
End Sub ←プログラムの終わり
【6】下の図のようにデータを入力します。
更新した瞬間に一番下の空白行が消えます。
—この時動いているプログラム—
Private Sub ***_AfterUpdate() ←***を更新した後。
Me.AllowAdditions = False ←レコードの追加をできなくする。
End Sub ←プログラムの終わり
Private Sub ***_AfterUpdate() ←***を更新した後。
Me.AllowAdditions = False ←レコードの追加をできなくする。
End Sub ←プログラムの終わり
つまり、***か***を更新した後は、新規ボタンをクリックしない限り、レコードの追加をできなくしています。
【7】今入力したレコードを選択し、「削除」をクリックします。
【8】削除確認のメッセージボックスが表示されます。
【9】「はい」をクリックすると、選択したレコードが削除されます。
*「いいえ」をクリックすると、何もせずに元のフォームに戻りますので、試してください。
—7、8、9で動いているプログラム—
Private Sub 削除_Click() ←削除をクリックした時。
メッセージボックスを表示する。
OKがクリックされた時は以下の処理を実行する。
If MsgBox(“削除します。よろしいですか?”, vbOKCancel, “確認”) = vbOK Then
Me.AllowDeletions = True ←削除できるようにする。
On Error GoTo err_削除_click ←エラーが起こった時はラベルへ飛ぶ
DoCmd.RunCommand acCmdDeleteRecord ←レコードを削除する。
Me.AllowDeletions = False ←レコードを削除できないようにする。
Else ←Cancelがクリックされた時は以下の処理を実行する。
←何も処理が書かれていないので、何もしない。
End If ←If条件式の終わり
Exit Sub ←プログラムを抜け出す。
err_削除_click: ←エラーが起こった時はここへ来る。
MsgBox Err.Description ←メッセージボックスでエラーの内容を表示する。
End Sub ←プログラムの終わり
*上記のプログラムは、エラーが起こってもシステムを止めないように、エラー処理を加えています。
【10】今度は「印刷」をクリックします。
【11】印刷確認のメッセージボックスが表示されます。
【12】「はい」をクリックすると、印刷プレビューが表示されます。
*「いいえ」をクリックすると、何もせずに元のフォームに戻りますので、試してください。
—10、11、12で動いているプログラム—
Private Sub 印刷_click() ←印刷をクリックした時。
変数Resに、メッセージボックスの値を代入する。
Res = MsgBox(“印刷してよろしいですか?”, vbYesNo, “印刷の確認”)
Resに「はい」が入っていた時は以下の処理を実行する。
If Res = vbYes Then
レポートをプレビューモードで表示する。
DoCmd.OpenReport “***”, acViewPreview
Else←「いいえ」がクリックされた時は以下の処理を実行する。
←何も処理が書かれていないので、何もしない。
End If ←If条件式の終わり
End Sub ←プログラムの終わり
*今回は変数Resに一度値を代入して、それからIf条件式でどのボタンがクリックされたか判断しています。「削除」ボタンの時のように変数を使わないプログラムの書き方もできます。
13.レポートを確認したら「×」をクリックし、レポートを閉じておきます。
いかがでしたか?動作を見ながらプログラムを確認すると、理解しやすいですね。
業務システムの基本となるのは、データの追加、削除、更新、印刷ですので、ここまで学んだことで基本は習得できています。(Accessは更新は自動で行われます。)
実務で使う時にはもうちょっと処理を加えたほうが良いです。例えば1件もレコードが無い時は印刷しないとか。
とりあえずAccessで業務システムを作るということが、どんなものか掴めたのではないでしょうか。
Q:Accessプログラムの動作確認について教えてください。
テーブル、レポート、フォーム、VBAが正しく動くか確認してみましょう。
プログラミングにエラーは付きものです。修正すればよいだけですので焦らずに。途中でエラーがでたらVBAを確認しましよう。エラーの大半はスペルミスや、フォームで部品の名前を間違えたために起こります。
———————————————————————-
1.Accessのファイルを起動します。
2.画面が開きますので、オブジェクトの「フォーム」を選択します。
3.「開く」をクリックし、フォームを実行します。
4.フォームが開いたら、「新規」をクリックします。
5.最後の行に新規レコードが追加されました。
6.データを入力します。
*入力する時、次のことを確認してください。
・商品名や単価を確定した瞬間に一番下の空白行が消える。つまり続けて新しいレコードは入力できない。
7.今入力したレコードを選択し、「削除」をクリックします。
8.削除確認のメッセージボックスが表示されます。
9.「はい」をクリックすると、選択したレコードが削除されます。
*「いいえ」をクリックすると、何もせずに元のフォームに戻りますので、試してください。
10.今度は「印刷」をクリックします。
11.印刷確認のメッセージボックスが表示されます。
12.「はい」をクリックすると、印刷プレビューが表示されます。
*「いいえ」をクリックすると、何もせずに元のフォームに戻りますので、試してください。
13.レポートを確認したら「×」をクリックし、レポートを閉じておきます。
上手く動きましたか?これで動作確認を終了します。次は動作とプログラムの関係を見ていきましょう。
Q:Accessのプログラミングについて、簡単に説明してください。
Accessはフォームやレポートで、VBA(Visual Basic for Application)を使ってプログラミングができます。これからフォームにプログラムを書く手順を説明します。
*今回の目標は、「プログラムを書いてみる。」ということです。
まずは動かしてみることに集中してください。
初めは動きを見てから、次にプログラムの意味を考えたほうが理解しやすいです。その逆だとかなり苦労します。
この段階では、プログラムが何を意味しているかわからなくてかまいません。そのためあえてプログラムの意味は省略しました。意味は次回にまとめて解説します。
———————————————————————-
1.Accessのファイルを起動します。
2.画面が開きますので、オブジェクトの「フォーム」を選択します。
3.ツールバーから「コード」をクリックします。
4.VBAの画面が開きました。この画面にプログラムを書いていきます。
5.まず図のように先頭に入力します。
6.次に左のコンボボックスから「Form」、右のコンボボックスから「Load」を選択します。
7.するとFormLoad(フォームを読み込んだ時)に動くプログラムを書く場所ができました。Accessのプログラミングでは、「○○を□□した時」というようにコンボボックスで選択します。
8.「Private Sub Form_Load()」から「End Sub」がプログラムの単位です。この2行は自動で表示されますので、その間に3行プログラムを書きます。
書いている途中で、入力を助けるリストが表示されますので選択します。見た目より書く量は少ないと感じるはずです。
9.同じ要領で2つのコンボボックスで場所を作り、以下のようにプログラムを完成させましょう。(英数字や記号は半角、その他は全角です)
Option Compare Database
Option Explicit
Dim Res As Variant
Private Sub Form_Load()
Me.AllowAdditions = False
Me.AllowDeletions = False
DoCmd.SetWarnings False
End Sub
Private Sub 印刷_click()
Res = MsgBox(“印刷してよろしいですか?”, vbYesNo, “印刷の確認”)
If Res = vbYes Then
DoCmd.OpenReport “R01商品マスター”, acViewPreview
Else
End If
End Sub
Private Sub 削除_Click()
If MsgBox(“削除します。よろしいですか?”, vbOKCancel, “確認”) = vbOK Then
Me.AllowDeletions = True
On Error GoTo err_削除_click
DoCmd.RunCommand acCmdDeleteRecord
Me.AllowDeletions = False
Else
End If
Exit Sub
err_削除_click:
MsgBox Err.Description
End Sub
Private Sub 商品名_AfterUpdate()
Me.AllowAdditions = False
End Sub
Private Sub 新規_Click()
Me.AllowAdditions = True
DoCmd.GoToRecord acDataForm, “F01商品マスター”, acNewRec
Me.商品名.SetFocus
End Sub
Private Sub 単価_AfterUpdate()
Me.AllowAdditions = False
End Sub
9.完成したらツールバーの「保存」をクリックして、VBAは閉じておきます。
———————————————————————-
どうですか?プログラムの意味はひとまず置いておいて、書くこと自体はそれほど難しくないですね。ここが大事です。
とりあえず書いてみる→動かしてみる→理解する
次回に動作を確認したあと、プログラムを解説します。