コードの実装
コードでは、[入力]ボタンを押した時点で、各入力内容をExcelのワークシートに転送し、ブックを保存します。
フォームの処理
フォームは、通常、入力部分しか表示しないようにし、[カレンダー]や[電卓]ボタンが押されたときにフォームを広げて、これらのコントロールを使えるようにします。
また、フォーム起動時にいくつかの処理を実行します。
名前空間のインポートと参照設定
以下のコードを作成する前に、InputMan for .NET 4.0Jの各コントロールを使用するので、GrapeCity.Win.Input名前空間をインポートしてください。
Imports GrapeCity.Win.Input
また、Excelのインスタンスを作成するため、Excelへの参照設定を行う必要があります。参照設定は、次の方法で行います。
- メニューから[プロジェクト]-[参照の追加]を選択します。
- [COM]タブをクリックし、リストから[Microsoft Excel 5.0 Object Library]を選択し、[OK]ボタンをクリックします。
これで、コード作成時にExcelをオブジェクトとして認識できるようになり、入力支援機能も利用できるようになります。
Excelの表示
Excelのインスタンスを作成し、データを保存するブック「外出交通費精算.xls」を開きます(データ用ブックはドライブCのルートに置いてください)。
Excelのインスタンスは、CreateObject
関数の引数に「Excel.Application」という文字列を指定して作成します。インスタンスを作成すると、後はExcelのオブジェクトと保有するメソッド/プロパティを使ってExcelを操作できます。
Excelを表示するには、Visible
プロパティをTrueにします。Falseにすると、バックグラウンドでExcelの処理を実行できます。
Dim ex As Excel.Application 'モジュールレベルで宣言 ex = CreateObject("Excel.Application") With ex .Visible = True 'バックグラウンドで処理するならFalseに設定する .Workbooks.Open("c:\外出交通費精算.xls") End With
CreateObject
関数でインスタンスを作成できませんでした。エディットの入力履歴の作成
[出発地][到着地]エディットにあらかじめ駅名を履歴として設定しておくことができます。エディットの入力履歴は、HistoryList
プロパティで参照/設定が行えます。あらかじめ履歴リストを作成しておく場合は配列をプロパティに設定します。
Me.Edit3.HistoryList = New String() _ {"東京", "有楽町", "新橋", "品川", "新宿", "渋谷"}
カレンダーの土日の色の設定
カレンダーの土日を休日とする場合は、土日の色を他の曜日と違う色に設定できます。それには、Weekdays
クラスのSunday
、Saturday
プロパティで土日を休業日に設定します。ここでは、日曜日をピンクに、土曜日をブルーにしています。
' 日曜日の日付スタイルを設定します。 Calendar1.Weekdays.Sunday.ReflectToTitle = ReflectTitle.Both Calendar1.Weekdays.Sunday.SubStyle.BackColor = Color.Pink Calendar1.Weekdays.Sunday.SubStyle.ForeColor = Color.Red Calendar1.Weekdays.Sunday.WeekFlags = WeekFlags.All ' 土曜日の日付スタイルを設定します。 Calendar1.Weekdays.Saturday.ReflectToTitle = ReflectTitle.Both Calendar1.Weekdays.Saturday.SubStyle.BackColor = Color.PowderBlue Calendar1.Weekdays.Saturday.SubStyle.ForeColor = Color.Blue Calendar1.Weekdays.Saturday.WeekFlags = WeekFlags.All
入力処理
各ボタンの処理を作成します。
カレンダーの表示と処理
カレンダーは、初期設定ではフォームを小さくして隠しておきます。[カレンダー]ボタンが押された時点で、フォームを広げカレンダーを表示して使えるようにします。また、この時点で電卓を非表示にします。
カレンダーの日付がクリックされるとClick
イベントが発生するので、SelectedDate
プロパティで選択された日付を取得し、エディットに代入します。
Private Sub Calendar1_SelectedDateChanged(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles Calendar1.SelectedDateChanged Me.Edit2.Text = Me.Calendar1.SelectedDate End Sub
電卓の表示と処理
電卓の表示/非表示もカレンダーと同様で、[電卓]ボタンが押されたとき、フォームを電卓表示用のサイズに変更し、電卓を表示にすると同時にカレンダーを非表示にします。
電卓の計算結果は、[転送]ボタンをクリックした際に、Value
プロパティの値をエディットに代入することで利用します。
If Me.Calculator1.Visible = True Then Me.Edit5.Text = Me.Calculator1.Value
入力内容のセルへの転送
各エディット/コンボのデータをセルに転送します。これは、ワークシートの2行目に新しい行を1行追加し、そこにデータを入力するようにします。こうすれば、セル番地が常に固定できるのでコードが単純になります。
後は、Cells
プロパティで各セルを指定し、入力コントロールの値を転送します。
With ex .Worksheets("Sheet1").rows("2:2").insert() .Cells(2, 1) = Edit1.Text .Cells(2, 2) = Edit2.Text .Cells(2, 3) = Edit3.Text .Cells(2, 4) = Edit4.Text .Cells(2, 5) = Edit5.Text .Cells(2, 6) = Combo1.Value End With
バルーンヘルプの表示
バルーンヘルプは、各コンポーネントのMouseHover
とMouseLeave
イベントで、表示/非表示を行います。表示にはShow
メソッドを使用し、引数に表示するコンポーネントのオブジェクト名を指定します。
Me.BalloonTip1.Show(Me.Button4)
非表示は、Hide
メソッドを実行します。
Me.BalloonTip1.Hide()
フォームの終了処理
フォームのFormClosed
イベントで、ブックの保存とExcelの終了を行います。
Private Sub Form1_FormClosed(ByVal sender As Object, _ ByVal e As System.Windows.Forms.FormClosedEventArgs) _ Handles Me.FormClosed ex.ActiveWorkbook.Save() ex.Application.Quit() End Sub