VBA(Visual Basic for Applications)は覚えるととても便利です
今日紹介するVBAは1回作っておくと、今後システムを作るときに、コピペして埋め込んでいけば効率よくシステムを作ることができます。
今回説明するのはフォームに日付形式のテキストボックスを設置し、ボタンで日付を増減するVBAです。
まずは新しいフォームをつくる
フォームデザインで新規フォームを作ります
フォームの名前を「伝票日付」にします
フォームのプロパティシートを開き「書式」タブを次のように設定します
- 自動中央寄せ:はい
- レコードセレクタ:いいえ
- 移動ボタン:いいえ
- スクロールバー:なし
- コントロールボックス:いいえ
ツールバーのデザインを選択しコントールのからのテキストボックスをフォームに配置します
テキストボックスとラベルの文字サイズを「20pt」にします
文字サイズがテキストボックスより大きくて入りきっていないので、修正します
テキストボックスのサイズを調整
マウスポインタをテキストボックスの端に持っていき写真のような矢印を表示させた状態でダブルクリックをします
テキストボックスのサイズがフォントサイズに合わせた大きさ修正されます
ラベルを「日付」と入力します
ラベル・テキストボックスの表記・名前を設定
となりのテキストボックスを右クリックして「プロパティ」を選びます
「その他」タブの中の「名前」を「日付」と入力します
フォームを開いたときに自動で当日の日付を表示
「データ」タブの「既定値」を「=date()」
と入力します
確認のためフォームビューに切り替えてみます
テキストボックスに今日の日付が入力されています
日付の文字が入り切っていないみたいなので、デザインビューに切り替え、日付テキストボックスの横幅を広げておきます
書式の調整
プロパティシートを開き
「書式」タブの「書式」を「yyyy¥年mm¥月dd¥日」と入力します
「データ」タブの
「使用可能」を「いいえ」
「編集ロック」を「はい」
にします
「その他」タブの
「タブストップ」を「いいえ」
にします
この設定で「日付」テキストボックスは「伝票日付」フォームを開くと、当日の日付を表示させ、「日付」テキストボックスへ直接入力はできない状態となりました
日付操作ボタンを作成
「日付」テキストボックスの下にボタンを配置します
ボタンをコピーして6個並べます
「配置」タブの「サイズ/間隔」や「配置」を駆使して綺麗に並べます
ボタンの表題を左から「+」「-」「+」「-」「+」「-」の順番で変更していきます
ボタンの名前を左から「プラス年」「マイナス年」「プラス月」「マイナス月」「プラス日」「マイナス日」と入力していきます
※Accessは、なぜかコントール名の認識では「+」と「-」が同じで認識されるみたいです。なのでここでは+、ーは「プラス」「マイナス」のカタカナで表記しています
このようなエラーが表示されます
ではボタンにVBAを埋め込んでんいきます
「プラス年」ボタンのプロパティシートを開き「イベント」タブの「クリック時」の右端の「・・・」をクリックして「コードビルダー」を起動します
VBE(Visual Basic Editor)が起動します
Private Sub プラス年_Click()
Me!日付 = DateAdd(“yyyy”, 1, Me!日付)
End Sub
このコードの意味は
今開いてる「日付」テキストボックスの値を
「日付」にもともと入っている日付に1年足した日付にします
という意味です
ちなみに
- 年を加えるときは”yyyy”
- 月を加えるときは”mm”
- 日を加えるときは”d”
です
この命令だけだと、Accessの使用環境によっては日付表示が反映されないことがあるので
Me.Repaint
これを追加します
Private Sub プラス年_Click()
Me!日付 = DateAdd(“yyyy”, 1, Me!日付)
Me.Repaint
End Sub
これで「プラス年」ボタンをクリックすると「日付」テキストボックスの日付が1年足される仕組みができました
試しにフォームビューに切り替えて「プラス年」ボタンをクリックすると
「日付」テキストボックスに1年足されます
次は「マイナス年」ボタンにVBAを埋め込んでいきます
Private Sub マイナス年_Click()
Me!日付 = DateAdd(“yyyy”, -1, Me!日付)
Me.Repaint
End Sub
プラス年と異なるところは、「1」のところが「-1」になったところです
-1を加えるという発想です
同様に「プラス月」「マイナス月」「プラス日」「マイナス日」にもVBAを組み込んでいきます
Private Sub プラス月_Click()
Me!日付 = DateAdd(“m”, 1, Me!日付)
Me.Repaint
End Sub Private Sub マイナス月_Click()
Me!日付 = DateAdd(“m”, -1, Me!日付)
Me.Repaint
End Sub Private Sub プラス日_Click()
Me!日付 = DateAdd(“d”, 1, Me!日付)
Me.Repaint
End Sub Private Sub マイナス日_Click()
Me!日付 = DateAdd(“d”, -1, Me!日付)
Me.Repaint
End Sub
入力したものがこちらです
フォームビューで動作確認をします
ボタンを押すと日付が動く仕組みができました
一つのボタンに2行のコードを入力しただけですが、この日付変更の仕組みは要所要所で活躍します。最初に仕組みを作るときは、コードの入力を自分で行い、次回別の場所で使う場う場合は、コピペをするとよいと思います。
コメント