SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

ComponentZine(InputMan)

Excelのワークシートに交通費を入力するプログラムの作成

InputMan for .NET 4.0Jを使ったExcel入力フォームの作成

  • このエントリーをはてなブックマークに追加

コードの実装

 コードでは、[入力]ボタンを押した時点で、各入力内容をExcelのワークシートに転送し、ブックを保存します。

フォームの処理

 フォームは、通常、入力部分しか表示しないようにし、[カレンダー]や[電卓]ボタンが押されたときにフォームを広げて、これらのコントロールを使えるようにします。

 また、フォーム起動時にいくつかの処理を実行します。

名前空間のインポートと参照設定

 以下のコードを作成する前に、InputMan for .NET 4.0Jの各コントロールを使用するので、GrapeCity.Win.Input名前空間をインポートしてください。

Imports GrapeCity.Win.Input

 また、Excelのインスタンスを作成するため、Excelへの参照設定を行う必要があります。参照設定は、次の方法で行います。

  1. メニューから[プロジェクト]-[参照の追加]を選択します。
  2. [COM]タブをクリックし、リストから[Microsoft Excel 5.0 Object Library]を選択し、[OK]ボタンをクリックします。

 これで、コード作成時にExcelをオブジェクトとして認識できるようになり、入力支援機能も利用できるようになります。

Excelの各オブジェクトをリストから選べる(入力支援機能)
Excelの各オブジェクトをリストから選べる(入力支援機能)

Excelの表示

  Excelのインスタンスを作成し、データを保存するブック「外出交通費精算.xls」を開きます(データ用ブックはドライブCのルートに置いてください)。

 Excelのインスタンスは、CreateObject関数の引数に「Excel.Application」という文字列を指定して作成します。インスタンスを作成すると、後はExcelのオブジェクトと保有するメソッド/プロパティを使ってExcelを操作できます。

 Excelを表示するには、VisibleプロパティをTrueにします。Falseにすると、バックグラウンドでExcelの処理を実行できます。

Excelのインスタンス作成と表示
Dim ex As Excel.Application 'モジュールレベルで宣言
ex = CreateObject("Excel.Application")
With ex
    .Visible = True  'バックグラウンドで処理するならFalseに設定する
    .Workbooks.Open("c:\外出交通費精算.xls")
End With
 この操作は、Excel 2003までに対応しています。Excel 2007(ベータ2)では、CreateObject関数でインスタンスを作成できませんでした。

エディットの入力履歴の作成

 [出発地][到着地]エディットにあらかじめ駅名を履歴として設定しておくことができます。エディットの入力履歴は、HistoryListプロパティで参照/設定が行えます。あらかじめ履歴リストを作成しておく場合は配列をプロパティに設定します。

Me.Edit3.HistoryList = New String() _
    {"東京", "有楽町", "新橋", "品川", "新宿", "渋谷"}

カレンダーの土日の色の設定

 カレンダーの土日を休日とする場合は、土日の色を他の曜日と違う色に設定できます。それには、WeekdaysクラスのSundaySaturdayプロパティで土日を休業日に設定します。ここでは、日曜日をピンクに、土曜日をブルーにしています。

' 日曜日の日付スタイルを設定します。
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

バルーンヘルプの表示

 バルーンヘルプは、各コンポーネントのMouseHoverMouseLeaveイベントで、表示/非表示を行います。表示には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

次のページ
今回作成したサンプルプログラム

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加
ComponentZine(InputMan)連載記事一覧

もっと読む

この記事の著者

瀬戸 遥(セト ハルカ)

8ビットコンピュータの時代からBASICを使い、C言語を独習で学びWindows 3.1のフリーソフトを作成、NiftyServeのフォーラムなどで配布。Excel VBAとVisual Basic関連の解説書を中心に現在まで40冊以上の書籍を出版。近著に、「ExcelユーザーのためのAccess再...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/445 2009/03/17 11:49

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング