[No.95 Access97 カレンダーコントロールから日付選択]
[No.96 Access コントロールソースを共通にする(細工する)]
[No.97 InternetExplorer.application操作 .Clickでクリック]
[No.98 Excelセルの結合を探る、結合セルをHTML表化する]
[No.99 Access タブコントロールを探り表示データ切り替え]
www.ken3.org(サイト内)から Google を利用して、

三流君 VBAで楽しくプログラミング(Excel/Access VBAの解説/サンプルです)
[VBA系のバックナンバー] [VBA系 TOP] [三流君 TOP]



No.95 2003/06/27
Access97 カレンダーコントロールから日付選択
[ページTOPへ戻る]

<Access97 カレンダーコントロールから日付選択>

どうも、三流プログラマーのKen3です。 今回は、 カレンダーコントロールを使用して、 日付の選択と共通フォームの作成にチャレンジしてみたいと思います。 サンプルファイルは、 http://www.ken3.org/vba/lzh/vba095.lzh にdb97-095.mdb(Access97版)が保存されています。 何かの参考となれば、幸いです。

/* * 1.今回のキッカケ */

掲示板に下記の質問をもらいました。 --------------- >カレンダーコントロールを使用して、 >日付を入力することにしました。 >しかし、今日の日付をクリックしても入力できません。 --------------- そんな質問をいただいたので、 カレンダーコントロールを使ってみます。

/* * 2.カレンダーコントロールのイベントを探ってデータセット */

Access97の例ですが、 フォームの新規作成後、 挿入・ActiveXコントロール・カレンダーコントロール8.0を選択します。 ( ) おっ、それらしいのが表示されましたね。 プロパティを見ると、 イベントもあるし、いろいろと操作できそうですね。 おっ、それらしいのが表示されましたね。 プロパティを見ると、 イベントもあるし、いろいろと操作できそうですね。 ~~~~~~~~ なんて、言ってました。 一番簡単な利用方法は、 印刷指示画面なんて画面があった時、 日付の入力・表示エリアを作成 [txt印刷日]と名前を付けました、 カレンダーコントロールを配置 [OLE_Calendar]と名前付け その後、 [OLE_Calendar](カレンダーコントロール) の イベントで、 me!txt印刷日 = me!OLE_Calendar.Value と、入力用のテキストボックスへデータを代入でOKだろう ※考えが、甘かったんだけど(笑)
Private Sub OLE_Calendar_Updated(Code As Integer)
    Me!txt印刷日.Value = Me!OLE_Calendar.Value '更新時にテキストボックスへ代入
    MsgBox "aaa2"
End Sub
あれ、、クリックしてもイベントが発生しない・・・ウソでしょ(笑) http://www.microsoft.com/japan/developer/library/off2000/vbaac/acevtUpdated.htm >... Access 97 に組み込まれているカレンダー コントロールでは、Updated イベン >トをサポートしません。カレンダー コントロールを含むデータベースを >以前のバージョンの Access から Access 97 に変換する場合は、カレンダー ... だってさ、、、う〜ん。。。 これってインチキ?なぜプロパティに載っていないイベント、 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 下記のように、_AfterUpdateが書けるのさ、、、
Private Sub OLE_Calendar_AfterUpdate()
    Me!txt印刷日.Value = Me!OLE_Calendar.Value '更新時にテキストボックスへ代入
    MsgBox "なぜプロパティに載っていない_AfterUpdateが・・・"
End Sub
たいした発見じゃないけど、 コントロールのイベント一覧に載っていないけど、 参照 VBAの編集画面では、いつものイベント群が選択できた。 参照 これで、カレンダーコントロールをクリック後、 テキストボックスに無事代入できた。 今度は、テキストボックスの値を直接入力して変えた時、 上のカレンダーも変わらないとなんかねぇと思いますよね。 これは、いつものように、
Private Sub txt印刷日_AfterUpdate()
    'テキストボックスの更新後にカレンダーの値も変更したいので
    If IsDate(Me!txt印刷日) Then  '日付と認識できる?
        Me!OLE_Calendar.Value = Me!txt印刷日
    Else
        MsgBox "日付として認識できませんよ・・・"
    End If
End Sub
って感じで、テキストボックスが変更されたら、 その値をカレンダーにも代入。 これで、双方向の値のやり取りができました。 えっ、そんな手数をかけなくても、 コントロールソースを同一にしろって? ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ギク、、、言われてみれば、、、

/* * 3.日付選択の共通フォームをテストで作成してみた */

口直しのデザートじゃないけど、 カレンダーコントロールってコントロールなので、 フォームに配置します。 わけわかんないけど、それでいいんじゃないの? ですよね、言い方が悪かった。 えっと、画面上に表示したくない(日付のボタンが押されたら選択画面を起動) 開始日、終了日など複数のテキストボックスで選択を使いたい なんて用途があると勝手に思い込んで、 カレンダー選択フォームを作ってみます。 オレは使わないけど、勝手に作るなら作ったら? 冷たいなぁみんな(笑) チョット前、ダイアログフォームを使用して、 INPUT BOX もどきを作成しました。 No.91 Access ダイアログフォームって?何? acDialogとPublic変数を使用 http://www.ken3.org/backno/backno_vba19.html#91 ↑そのまんまなんだけど、ただ、カレンダーコントロールを使っただけ(笑) 関数仕様 Function INPUT_HIZUKE_Form() As String カレンダーコントロール付きのフォームを表示して、日付を選択させる。 選択されたらCDateで変換した日付文字列を返す。 キャンセルだったら""の空文字列を返します。 Option Compare Database Option Explicit Public INPUT_HIZUKE_RET As String 'グローバルにリターン値受取り用
Function INPUT_HIZUKE_Form() As String
    
    Dim stDocName As String
    Dim stLinkCriteria As String

    INPUT_HIZUKE_RET = "" 'リターン値を初期化
    
    'ダイアログモードでフォームを開く
    stDocName = "日付選択"
    DoCmd.OpenForm stDocName, , , stLinkCriteria, , acDialog
    
    'リターン値をセットして、関数を終わる
    'フォーム側でpublic変数にセットされていることを信じて(笑)
    INPUT_HIZUKE_Form = INPUT_HIZUKE_RET

End Function
と、モジュールに書いて、 フォーム側では、 カレンダーコントロール [OLE_Calendar] 決定ボタン [btn決定] 中止ボタン [btn中止] のコントロールを作成して、 イベントは、決定・中止の各ボタンが押されたら、 リターン値をPublic変数にセットして、フォームを閉じます
Private Sub btn決定_Click()
    'グローバル変数にリターン値をセット
    INPUT_HIZUKE_RET = CDate(Me!OLE_Calendar.Value)
    'フォームを閉じる
    DoCmd.Close
End Sub
Private Sub btn中止_Click()
    'グローバル変数にリターン値をセット
    INPUT_HIZUKE_RET = ""  'リターン値は中止なので空文字にする
    'フォームを閉じる
    DoCmd.Close
End Sub
なんかなぁ、工夫が無いよね。 使う方は、 日付範囲指定フォームで、 開始日 [txt開始日] [btn開始] 〜 終了日 [txt終了日] [btn終了] なんて感じの構成でテストプログラムを書くと、
Private Sub btn開始_Click()
    Dim strWORK As String
    strWORK = INPUT_HIZUKE_Form() '日付の入力フォームを起動
    If strWORK <> "" Then '入力されていたら
        Me!txt開始日 = strWORK  'フォームのリターン値をセット
    End If
End Sub
Private Sub btn終了_Click()
    Dim strWORK As String
    strWORK = INPUT_HIZUKE_Form() '日付の入力フォームを起動
    If strWORK <> "" Then '入力されていたら
        Me!txt終了日 = strWORK  'フォームのリターン値をセット
    End If
End Sub
って感じで、 strWORK = INPUT_HIZUKE_Form() '日付の入力フォームを起動 で日付選択フォームを起動、 リターン値を判断して選択されていたら自分のテキストボックスに代入 If strWORK <> "" Then '入力されていたら Me!txt終了日 = strWORK 'フォームのリターン値をセット End If と、 共通に使うことが出来ます。 日付の入力処理の隠し味として、使えそうなら使ってみてください。

/* * 4.カレンダーコントロールのバージョン */

Access97のマシーン、死んだと思ったら起動したので、 Access97でサンプル作りました。 挿入・ActiveXコントロール・カレンダーコントロール8.0を選択します。 ( ) と、 カレンダーコントロール挿入したけど、 これって、どのマシーンにも入っているの? ギク、、私のもう1つのマシーンWindows XP,Access2002だと、 カレンダーコントロールは10.0だぁ・・・ ( ) テストで、Access2002で、今回のdb97-095.mdbを開いてみます。 ※変換してみます。 あれ、、、そのまま変換できた・・・動いてるよ・・・ 予定では、変換エラーの説明をするつもりが・・・逆になぜ?って感じだけど。 カレンダーコントロール8.0 から カレンダーコントロール10.0 はなんとか、無事でした。 でも、97で動作したコントロールが動作しない、 新しいのに変更するなど、移植問題で苦労されている話をよく聞きます。 そういった意味でも、特殊なコントロールを使用するときは、 将来のバージョンアップを含め、注意が必要です。 サンプルファイルは、 http://www.ken3.org/vba/lzh/vba095.lzh にdb97-095.mdb(Access97版)が保存されています。 Access2000,Access2002をお持ちの人は、 変換して動作させてみてください、動くかなぁ・・・ -【けんぞう!】--------------------------------------------------------- 転職関係、在宅プログラマー、SOHOの広告まとめました http://www.ken3.org/etc/500yen/zaitaku.html いろいろとあるので転機の人はぜひ 『だだ、広告料稼ぎたいだけだろ、紹介料300円〜1500円の小金稼ぎ』 ギクっ、、、バレた(笑)登録料無料、匿名で探せるので在宅で小金稼ぎの人も見てね ------------------------------------------------------------------------ 

/* * 5.終わりの挨拶 */

今回は、カレンダーコントロールを使って、 カレンダー選択フォームもどきを作ってみました。 拾い読みして、 1つでも何かの参考となれば幸いです。 Excel/Access大好き、三流プログラマーKen3でした。

No.96 2003/06/30
Access コントロールソースを共通にする(細工する)
[ページTOPへ戻る]

<Access コントロールソースを共通にする(細工する)>

どうも、三流プログラマーのKen3です。 今回は、 Accessのフォーム、テーブルとつなげたコントロールソースについて、 すこし書いて見たいと思います。 何かの参考となれば、幸いです。

/* * 1.今回のキッカケ */

メールで下記の質問をもらいました。 --------------- >>えっ、そんな手数をかけなくても、 >>コントロールソースを同一にしろって? >>^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ >> >>ギク、、、言われてみれば、、、 > >これの意味がよくわからないのです。 > --------------- そんな質問をいただいたので、 Accessのフォームでコントロールソースを同一にするメリット について、少し書きたいと思います。

/* * 2.コントロールソースって? */

同一にする前に、コントロールソースって? Accessでテーブルやクエリーを元にしたフォームを作り、 テキストボックスのコントロールソースの欄に、 テーブルのフィールド名を入れておくと、 テキストボックスとフィールドが連結してくれて、 特に意識しないで登録画面や更新画面作れるんですよ。 はぁ?なにほざいているのか、よくわからん。 えっと、 テーブル名:顧客 ^^^^^^^^^^^^^^^ 顧客番号 point 住所 氏名 記号 1 120 名古屋 ドラキチ あ 2 15 北海道 どさんこ い 3 20 東京 ヤクルト う 4 5 神奈川 横浜 え 5 20 福岡 ダイエー お ってテーブルから検索フォームを作成したときに、 テキストボックスをtxt氏名ってテキストボックスを作成。 txt氏名のプロパティにコントロールソースがあるので、 そこにテーブルで使用している=[氏名]を設定します。 まぁ、普段そんなに意識しないで使っていると思います。

/* * 3.詳細エリアとフッダーエリアで同じコントロールソースを参照 */

Access97 フォームフッター http://www.ken3.org/backno/hosoku/e006/index.html で書いてたネタなんだけど、 一覧形式のフォームがあります。 AAAA BBBB 備考あああ AAAA BBBB 備考あああ AAAA BBBB 備考あああ なんて、一覧表示のフォームが在った時に、 一覧表示なので備考欄を大きく表示できない、 カーソルを合わせてスクロールさせれば全体が見れる。 こんな時に、 フォームのヘッダー・フッダーにテキストボックスを1つ作り コントロールソースを共通の備考にします。 すると、詳細のカレントレコードの備考が、 新たにヘッダーフッターに設置したテキストボックスに表示されます。 これは、詳細のワクの短いテキストボックス と ヘッダー・フッターに設置したワクの大きいテキストボックス、 どちらもおなじテーブル(レコードの)データを参照しているからです。 下記の画像付きページを見てください。 http://www.ken3.org/backno/hosoku/e006/index.html が解説画面 http://www.ken3.org/backno/hosoku/e006/006.lzh に、Access97 0201.mdb が入っています、 ヘタな説明聞くより、動作を見てみるのが一番速いかも。

/* * 4.違うタイプのコントロールで同じソースを参照する */

上記の例は、 サイズの違うテキストボックスをフッターと詳細に配置した使用例でした。 では、違うタイプのコントロールで、同じコントロールソースを指定したら? どうなるでしょう? Access97 コントロールソース、チョットした使用法 http://www.ken3.org/backno/hosoku/e007/index.html で、 テキストボックスとオプショングループのコントロールソースを一緒にして、 オプションボタンでも選択できるし、 テキストボックスに数字を直接入れてもOK そんな感じのことを書いてます。 下記のようなアンケートハガキの入力システムを作りたいと思います。 名前      XXXXXX 性別      男・女 メールアドレス xxx@xxxx メルマガについて質問です 質問1.読みやすさについて     1:悪い 2:普通 3:読みやすい 質問2.内容について     1:簡単 2:普通 3:難しい、、 みたいなハガキの入力を作成します。 入力レイアウト(フォーム)を作成します。 ここは、普通に、ハガキの入力順で、 名前      XXXXXX 性別         □男 □女 メールアドレス xx@xxxx メルマガについて質問です 質問1.読みやすさについて     □悪い □普通 □読みやすい 質問2.内容について     □簡単 □普通 □難しい、、 と作ります。 まぁ、普通かなぁ。 だと、面白くないので、□チェックボックスをレするだけじゃなく、 テキストボックスを作成して、数値入力とチェック、両方きかせたいと思います。 質問1.読みやすさについて [2] ←数値入力     □1.悪い レ2.普通 □3.読みやすい ←オプショングループ といった、処理を作りたい時、 *話、とても長くなりますが、お客さんで、  マウス操作なんてかったるい、キーボードのみで入力できないか?  といった、DOS世代の人や、本気で入力の速さを追及している人、  多いです。※連続入力ならマウスクリックよりキーボードが速いですよね。 数値入力用のテキストボックスのコントロールソースと、 オプショングループのコントロールソースを同一にしておくと、 どちらを選択・入力してもいいように、処理できます テキストボックスに2を入れてもいいし(入れるとオプションも変化します) マウスでクリックしてもいいし(クリック後テキストボックスが変化します) まぁ、一度、試してみてください。 http://www.ken3.org/backno/hosoku/e007/index.html が解説画面 http://www.ken3.org/backno/hosoku/e007/007.lzh に、Access97 0204.mdb が入っています、 ヘタな説明聞くより、動作を見てみるのが一番速いかも。 -【けんぞう!】--------------------------------------------------------- 転職関係、在宅プログラマー、SOHOの広告まとめました http://www.ken3.org/etc/500yen/zaitaku.html いろいろとあるので転機の人はぜひ 『だだ、広告料稼ぎたいだけだろ、紹介料300円〜1500円の小金稼ぎ』 ギクっ、、、バレた(笑)登録料無料、匿名で探せるので在宅で小金稼ぎの人も見てね ------------------------------------------------------------------------ 

/* * 5.終わりの挨拶 */

>>えっ、そんな手数をかけなくても、 >>コントロールソースを同一にしろって? >>^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ カレンダーコントロールのコントロールソースを同一にすれば、 前回みたいに、イベントで代入しなくてすむので、 そのほうが簡単ですと言いたかっただけでした。 ※同一フォーム内で、  カレンダーコントロールとテキストボックスを連動させるときは、  コントロールソースを同一にするのが簡単で正解です。 今回は、昔のメルマガ紹介を兼ねて、 コントロールソースを同一にした使用方法の紹介でした。 拾い読みして、 1つでも何かの参考となれば幸いです。 Excel/Access大好き、三流プログラマーKen3でした。

No.97 2003/07/02
InternetExplorer.application操作 .Clickでクリック
[ページTOPへ戻る]

<InternetExplorer.application操作 .Clickでクリック>

どうも、三流プログラマーのKen3です。 今回は、 IE操作で、プログラム側からクリック処理を行ってみます。 何かの参考となれば、幸いです。 ※まだまだ、違法ツールへの道は遠いけどね・・・

/* * 1.今回のキッカケ */

隣のメルマガ、ASP系で、ログイン処理を作りました。 No.68 DBでユーザー管理、ログイン処理(復習で作成) http://www.ken3.org/backno/backno_asp14.html#68 あとは、個人的なことで、 http://www.ken3.org/etc/okozukai.html で、小金稼ぎ系をやってて、 自動でログインできたらいいなぁ・・と思い、探ってみました。 And だいぶ前に読者から下記のヒントもらっていたので(感謝) In message "リンク クリック", しょうもさん wrote... >[ VBAで楽しくプログラミング No.071 ] 2003/05/06 火曜日 より > >> 読者からの要望は、広告自動クリックソフトだったけど > >その名の通り、Clickメソッドが使えますよ。 >今回も、IHTMLElementオブジェクトを操っています。 >「Microsoft HTML Object Library」参照設定です。 > >'----------- > Dim objElement As IHTMLElement > Dim strTempText As String > > For Each objElement In objIE.Document.all.tags(tagName:="a") > strTempText = objElement.getAttribute _ > (strAttributeName:="href") > Debug.Print strTempText > If InStr(strTempText, "top10") Then > objElement.Click > Exit For > End If > Next ------------ そんな感じの三流君書いてみようポイントが貯まって(←何それ?) 今回の発行となりました。 ※今回の自動ログイン処理、まだまだですが、  応用すれば、1日一回の人気投票システムなどにも応用可能かなぁ。 サンプルファイルは、 http://www.ken3.org/vba/lzh/vba097.lzh にtest097-Book.xlsが保存されています。

/* * 2.IEのオブジェクトを作成、操作する */

インターネットエクスプローラー(IE)を起動するには、
Sub ie_test()

    Dim objIE    As Object  'IEオブジェクト参照用

    'インターネットエクスプローラーのオブジェクトを作る
    Set objIE = CreateObject("InternetExplorer.application")
    
    objIE.Visible = True '見えるようにする(お約束)

End Sub
ExcelやAccessの起動でお世話になっている、 CreateObjectを使用して、 "InternetExplorer.application" を作成してます。 その後、 objIE.Visible = True '見えるようにする(お約束) で、プロパティの可視をTrueにして、表示してます。 で、 http://www.ken3.org/cgi-bin/test/test068.html なんて、ページを表示させるには、 '文字列で指定したURLに飛ぶ objIE.Navigate "http://www.ken3.org/cgi-bin/test/test068.html" と .Navigateメソッドを使用しました。 インターネットエクスプローラーの操作 No.50 IE起動 CreateObject("InternetExplorer.application") No.52 InternetExplorer.application .document.body.innerText No.53 文字列を探す、InStr関数の使い方 http://www.ken3.org/backno/backno_vba11.html#50 No.70 InternetExplorer.application .document.all(0).innerHTML No.71 IE操作 リンク先を取出す .Document.links(i).href http://www.ken3.org/backno/backno_vba15.html#70 も参考にしてください。

/* * 3.データをセットしたい */

http://www.ken3.org/cgi-bin/test/test068.html は、見てもらうとわかるのですが、ログイン処理を行ってます。 HTMLのソースは、IEなら右ボタン・ソース表示などで表示します。 <html> <head> <title>けんぞうのへんてこな世界へようこそ</title> </head> <body bgcolor=#ffffff text=#000000> <center> <h2>けんぞうのへんてこな世界へようこそ</h2> <br> <table bolder=1> <FORM ACTION="login.asp" METHOD="POST"> USER ID:<INPUT TYPE="text" NAME="userid" SIZE="12"><br> パスワード:<INPUT TYPE="password" NAME="pass" SIZE="12"><br> <INPUT TYPE="submit" NAME="btn01" VALUE="ログイン"> <INPUT TYPE="reset" VALUE="クリア"> </FORM> </table><br> <a Href="adduser.asp" TARGET="_top">新規ユーザー登録</a><br> </center> </body> </html> です。 このHTMLフォームにデータをセットしたいと思います。 objIE.document.all とドキュメントのオブジェクトがあり、 objIE.document.all.userid.Value = "Ken3" 'ユーザー名 objIE.document.all.pass.Value = "aaa" 'パスワード と、フォームの項目名を使用して、アクセスすることが出来ます。 HTMLのフォームのNAMEがポイントです USER ID:<INPUT TYPE="text" NAME="userid" SIZE="12"><br> パスワード:<INPUT TYPE="password" NAME="pass" SIZE="12"><br> Do While objIE.Busy = True '何もしないループ(笑) DoEvents Loop と、 .Busyを見て、 読み込み完了まで待つ処理を追加して、 指定HPの表示、ログイン情報の代入を行ってみます。
Sub ie_test()

    Dim objIE    As Object  'IEオブジェクト参照用

    'インターネットエクスプローラーのオブジェクトを作る
    Set objIE = CreateObject("InternetExplorer.application")
    
    objIE.Visible = True '見えるようにする(お約束)

    '文字列で指定したURLに飛ぶ
    objIE.Navigate "http://www.ken3.org/cgi-bin/test/test068.html"

    '表示終了まで待つ
     Do While objIE.Busy = True
         '何もしないループ(笑)
         DoEvents
     Loop

     '項目名を指定して、データをセットする
     objIE.document.all.userid.Value = "Ken3" 'ユーザー名
     objIE.document.all.pass.Value = "aaa"    'パスワード

End Sub
無事、データがセットされました。 ( )

/* * 4.ログインボタンをクリックしてみる */

さてと、無事データがセットされたので、 今度は、自動でログインボタンを押してみたいと思います。 <FORM ACTION="login.asp" METHOD="POST"> USER ID:<INPUT TYPE="text" NAME="userid" SIZE="12"><br> パスワード:<INPUT TYPE="password" NAME="pass" SIZE="12"><br> <INPUT TYPE="submit" NAME="btn01" VALUE="ログイン"> <INPUT TYPE="reset" VALUE="クリア"> </FORM> のボタンには、NAME="btn01"と名前が付いているので、 'データせっとできたので、 'ボタンを押してみる objIE.document.all.btn01.Click 'クリックメソッドを実行 と .Clickのメソッドを実行してみました。 ※HTMLのフォームで、項目にNAME=と付いていたので(付いていれば)、  比較的楽に操作可能です
Sub ie_test_click()

    Dim objIE    As Object  'IEオブジェクト参照用

    'インターネットエクスプローラーのオブジェクトを作る
    Set objIE = CreateObject("InternetExplorer.application")
    
    objIE.Visible = True '見えるようにする(お約束)

    '文字列で指定したURLに飛ぶ
    objIE.Navigate "http://www.ken3.org/cgi-bin/test/test068.html"

    '表示終了まで待つ
     Do While objIE.Busy = True
         '何もしないループ(笑)
         DoEvents
     Loop

     '項目名を指定して、データをセットする
     objIE.document.all.userid.Value = "Ken3" 'ユーザー名
     objIE.document.all.pass.Value = "aaa"    'パスワード

     'データせっとできたので、
     'ボタンを押してみる
     objIE.document.all.btn01.Click  'クリックメソッドを実行

End Sub
こんな、短いプログラムで、自動ログイン処理が可能です。 ※なんとなく、オールスターの自動投票処理も簡単に出来るかもしれませんね。 データの中身を変えたりして、テストしてみてください。 -【けんぞう!】--------------------------------------------------------- 転職関係、在宅プログラマー、SOHOの広告まとめました http://www.ken3.org/etc/500yen/zaitaku.html いろいろとあるので転機の人はぜひ 『だだ、広告料稼ぎたいだけだろ、紹介料300円〜1500円の小金稼ぎ』 ギクっ、、、バレた(笑)登録料無料、匿名で探せるので在宅で小金稼ぎの人も見てね ------------------------------------------------------------------------ 

/* * 5.終わりの挨拶 */

なんとか、動作したけど、エラー処理がまだまだ甘かったりもします。 ホントは、悪魔のささやきは、 サンプルプログラムでテストと言いつつ、 広告をクリックさせて、、ともフト思ったけど、 そこまでしてもなぁ・・と考え直して(笑) 普通の自分のページを使ったログインのサンプルにしました。 サンプルファイルは、 http://www.ken3.org/vba/lzh/vba097.lzh にtest097-Book.xlsが保存されています。 なので、安心して、サンプル実行してください。 ※まだ、サンプルファイルに細工して・・までは心は腐っていなかった(笑) なんて、物語を書いてるが、ホントのホントは、 広告クリック作ろうとしたんだけど、 広告の<IFREAM>内の参照(解析)に手間取ったとか? ギク・・なんでバレたの? ボクも自動クリック処理作ろうとしてるからさ(笑) ※たぶんあれだよ、、と思った人も多いと思います。 拾い読みして、 1つでも何かの参考となれば幸いです。 Excel/Access大好き、三流プログラマーKen3でした。
-【けんぞう!】---------------------------------------------------------
三流君の、小金稼ぎ、お小遣い稼ぎシリーズ第3弾(稼げないだろコラ!!)
参加無料:予想が当たれば一攫千金?今月はプロ野球のセパ勝敗とホームラン数
http://www.ken3.org/etc/500yen/5050.html  ← 100万を当たった人数で山分け
『チッ、大穴横浜の勝利に賭けてるのに当たらない(笑)』(横浜ファン:31歳)
------------------------------------------------------------------------
--------------------
読者からのお便り紹介
--------------------
ASP系のレンタルサーバーの情報です。

ASP系の掲示板
http://www.ken3.org/cgi-bin/bbs/asp/wforum.cgi
で、貰った情報です。
---
> > ASPを使うことができるプロバイダを読者から教えてもらいました
> > raru.net http://www.raru.net/rental/ 
> > ---
> > http://www.raru.net/rental/ 
> > 月額費用 \980/月 20Mbyes 
> > BASP21 も利用できます。
> > 5月末まで無料体験いただけるキャンペーン実施中!
> > ---
> > みたいです。
> 
> 延長して、
> 6月末まで完全無料で使えるみたい
> ここ、バナー広告やってないのかなぁ・・・
> 直リンなので、紹介しても私に手数料が入らない
> オイオイ、読者のためになればいいだろ・・・ですよね(笑)

あれれ、 http://www.raru.net/rental/
7月末まで無料のキャンペーン中みたいです。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ASP試してみたい人は、7月末までちゃっかり無料使用も可能ですよ。
気に入ったら、月額980と安いし、使い続けてみては?

↓は私が使っているサーバーの宣伝です。
http://www.ken3.org/asp/server.html
↑は私が使っているサーバーの宣伝です。
 こっちからは私に、手数料入るけど、
 月額が3700円と高いし、ドメインを取らされる・・
 安定はしているけどね。

http://www.ken3.org/asp/server.html#500
↑月額500円、スペース10MだけどASP使用可能です。

低価格化の波って凄いんですね。

---
※自薦で自分のHPでもいいので、お得情報あったら気軽に送ってください
  できたら、サギ、ネズミ系以外の情報がいいなぁ・・・・
---

VBA掲示板もヨロシクです。
掲示板 : http://www.ken3.org/cgi-bin/bbs/vba/wforum.cgi
*返事が遅いけど、初心者さん歓迎です。


No.98 2003/07/03
Excelセルの結合を探る、結合セルをHTML表化する
[ページTOPへ戻る]

<Excelセルの結合を探る、結合セルをHTML表化する>

どうも、三流プログラマーのKen3です。 今回は、 Excelの結合されたセル から HTMLの表を作成してみたいと思います。 結合されたセルの処理やHTMLの表作成で、 何かの参考となれば、幸いです。 ※まだまだ、まともなツールへの道は遠いけどね・・・ http://www.ken3.org/p/f/lzh/office-020.lzh に今回のサンプル保存されてます。 あわせてみてください。 関連項目は、 Excel HTML表作成ツールもどき No.80 Excelのセル範囲をHTMLの表(.html)にしてみる No.81 セルの右寄せ、中央寄せをHTMLの表にしてみる No.82 背景色、フォントカラーをHTMLの表にしてみる No.83 改行LFを<BR>などHtml用にエンコードして書き込む http://www.ken3.org/backno/backno_vba17.html も合わせてみて下さい。

/* * 1.事前調査、セルの結合 */

隣や下のセルをつなげて、1つのセルにする。 そんな表を見たことありますよね。 ↑セルプロパティの設定画面 プロパティを知りたかったので、 いつものマクロ記録で記録してみました。 ^^^^^^^^^^^^^^^^^^ Range("B6:C6").Select With Selection .HorizontalAlignment = xlRight .VerticalAlignment = xlCenter .WrapText = False .Orientation = 0 .AddIndent = False .IndentLevel = 0 .ShrinkToFit = False .ReadingOrder = xlContext .MergeCells = True End With Range("D6:D7").Select With Selection .HorizontalAlignment = xlRight .VerticalAlignment = xlCenter .WrapText = False .Orientation = 0 .AddIndent = False .IndentLevel = 0 .ShrinkToFit = False .ReadingOrder = xlContext .MergeCells = True End With さてと、それらしいのは、 おっ、.MergeCells = Trueってのが怪しそうですね。 .MergeCellsにカーソルを合わせて、 F1(Help)を押して、探ってみます。 MergeCells プロパティ True の場合、セル範囲またはスタイルが結合セルを含みます。 値の取得および設定が可能です。バリアント型 (Variant) の値を使用します。 解説 結合されたセルが含まれるセル範囲を選択すると、指定したセル範囲と実際の セル範囲が異なる場合があります。選択したセル範囲のアドレスを調べるには、 Address プロパティを使用します。 使用例 次の使用例は、セル A3 がある結合セル範囲に値を設定します。 Set ma = Range("a3").MergeArea If Range("a3").MergeCells Then ma.Cells(1, 1).Value = "42" End If なんだか、よくわからないなぁ(笑)。

/* * 2.簡単に確認してみる。 */

Range("B6:C6").Select を結合したので、 ? Range("A6").MergeCells False ? Range("B6").MergeCells True ? Range("C6").MergeCells True と、B6とC6が結合されているのは、わかった。 Dim ma As Range Set ma = Range("b6").MergeArea Debug.Print ma.Address Set ma = Range("c6").MergeArea Debug.Print ma.Address とやると、 $B$6:$C$6 $B$6:$C$6 と同じ値が表示される。 左上の値を(1,1)判断するために、 Dim ma As Range Set ma = Range("b6").MergeArea Debug.Print ma.Address Debug.Print ma.Cells(1, 1).Address とテストすると、 $B$6:$C$6 $B$6 cells(1,1)で左上を判断できるので、(結合されたはじめの位置を知りたいので) 現在のセルが結合されているか?は、 .MergeCellsで判断 .MergeAreaで結合範囲を取り出しcells(1,1).addressで左上判断 これを組み込んでみます。

/* * 3.HTML作成データに組み込む */

Sub Main()

    'Application.InputBoxでセルを選択させる
    Dim objTARGET As Range '選択されたセルの集合
    Set objTARGET = Application.InputBox(prompt:="セルを選択", Type:=8)
    If IsEmpty(objTARGET) Then 'キャンセルが押されたかチェックする
        MsgBox "キャンセルが押されました"
        Exit Sub
    End If
    
    'ファイル名を作成 ファイル名は自分のパス+\test.html
    Dim strFNAME As String   'ファイル名保存用
    strFNAME = ThisWorkbook.Path & "\test.html" 'ファイル名を作る

    'テーブルデータを作成する
    Call MAKE_HTML_TABLE(strFNAME, objTARGET)

    'できたファイルをIEで表示して確認する
    Call IE_OPEN_URL(strFNAME)  'ファイル名を渡す

    '終わりの挨拶
    MsgBox strFNAME & "を作成しました"
    
End Sub
'ファイル名とセルの範囲RANGEを受け取り、 'ファイルを開きHTMLのテーブルを作成する
Sub MAKE_HTML_TABLE(strFNAME As String, objHANI As Range)

    Dim strCOLOR As String
    Dim strR As String
    Dim strG As String
    Dim strB As String
    Dim objMA As Range   'リンクの範囲
    Dim strTD As String

    'ファイルをオープンする
    Dim FNO      As Integer  'ファイル番号
    FNO = FreeFile '空いてるファイル番号を取出す
    Open strFNAME For Output As #FNO  'テキストファイルを新規作成

    'HTMLのヘッダーを書く
    Print #FNO, "<HTML><HEAD><TITLE>"
    Print #FNO, "テーブル作成してみました"
    Print #FNO, "</TITLE></HEAD>"
    Print #FNO, "<BODY>"
    Print #FNO, "<TABLE border=1>"  'テーブルの開始

    '行、列でループを作る
    Dim y As Integer
    Dim x As Integer
    For y = 1 To objHANI.Rows.Count         '行のループ
        Print #FNO, "<TR>"  '行の開始タグ
        For x = 1 To objHANI.Columns.Count  '列のループ
            'ALIGNを調べて書き込む
            Select Case objHANI.Cells(y, x).HorizontalAlignment
                Case xlRight:
                    strTD = "<TD ALIGN='RIGHT'"
                Case xlLeft:
                    strTD = "<TD ALIGN='LEFT'"
                Case xlCenter:
                    strTD = "<TD ALIGN='CENTER'"
                Case Else  'その他設定無しのとき
                    strTD = "<TD"
            End Select
            'バックカラーを調べる
       strCOLOR = Right("000000" & Hex(objHANI.Cells(y, x).Interior.Color), 6)
            If strCOLOR <> "FFFFFF" Then  '白以外の時処理
                strR = Mid(strCOLOR, 5, 2)
                strG = Mid(strCOLOR, 3, 2)
                strB = Mid(strCOLOR, 1, 2)
                strTD = strTD & " BGCOLOR=#" & strR & strG & strB
            End If
            'セルの結合を判断する
            If objHANI.Cells(y, x).MergeCells = True Then '結合セルか?
                Set objMA = objHANI.Cells(y, x).MergeArea 'エリアを取り出す
                If objMA.Cells(1, 1).Address = objHANI.Cells(y, x).Address Then
                    '左上なら
                    If objMA.Columns.Count <> 1 Then
                        strTD = strTD & " COLSPAN=" & objMA.Columns.Count
                    End If
                    If objMA.Rows.Count <> 1 Then
                        strTD = strTD & " ROWSPAN=" & objMA.Rows.Count
                    End If
                    Print #FNO, strTD & ">"; 'タグを閉じ出力
                Else
                    '結合セルでその他なら、データを書かないでOKなら
                    strTD = "" 'タグをクリア(データを出さない)
                End If
            Else
                Print #FNO, strTD & ">"; 'タグを閉じ出力
            End If
            'フォントの色を調べる
            strCOLOR = Right("000000" & Hex(objHANI.Cells(y, x).Font.Color), 6)
            If strCOLOR <> "000000" Then  '黒以外の時処理
                strR = Mid(strCOLOR, 5, 2)
                strG = Mid(strCOLOR, 3, 2)
                strB = Mid(strCOLOR, 1, 2)
                If strTD <> "" Then '出力ありなら
                    Print #FNO, "<Font Color=#" & strR & strG & strB & ">";
                End If
            End If
            If strTD <> "" Then '出力ありなら
                'セルの中身を変換して書き込む*018で追加
                Print #FNO, htmlEnCode(objHANI.Cells(y, x).Value);
                'フォントのタグを閉じる
                If strCOLOR <> "000000" Then  '黒以外の時処理
                    Print #FNO, "</Font>";
                End If
                'タグを閉じる
                Print #FNO, "</TD>";
            End If
        Next x
        Print #FNO, "</TR>"  '行の終了タグ
    Next y

    'HTMLのタグを閉める
    Print #FNO, "</TABLE>"
    Print #FNO, "</BODY></HTML>"

    'ファイルをクローズする
    Close #FNO

End Sub
'URLを受け取り、IEを起動、URLを開く
Sub IE_OPEN_URL(strURL As String)

    'IEを起動して、表示
    Dim objIE    As Object  'IEオブジェクト参照用
    
    'インターネットエクスプローラーのオブジェクトを作る
    Set objIE = CreateObject("InternetExplorer.application")
    
    objIE.Visible = True '見えるようにする(お約束)
    objIE.Navigate strURL  '文字列で指定したURLに飛ぶ

End Sub
'文字列を受け取り、変換結果を返す
Function htmlEnCode(strMOTO As String) As String

    Dim strCHK As String  'チェックする文字
    Dim strSET As String  'セットする文字
    Dim strWORK As String '結果を入れる作業変数
    Dim n As Integer  'カウンター

    '結果をまず初期化する
    strWORK = ""
    
    '文字数分ループする
    For n = 1 To Len(strMOTO)
        strCHK = Mid(strMOTO, n, 1) 'チェックする文字を取り出す
        Select Case Asc(strCHK)  '文字をチェックする
            Case &H20: strSET = "&nbsp;" 'スペース
            Case &H3C: strSET = "&lt;"   '<
            Case &H3E: strSET = "&gt;"   '>
            Case &H26: strSET = "&amp;"  '&
            Case &H22: strSET = "&quot;" '"
            Case &HA: strSET = "<br>"     '改行
            Case Else: strSET = strCHK  'その他の文字はそのままセット
        End Select
        '文字列を作る
        strWORK = strWORK & strSET
    Next n

    '作られた文字列をリターン値としてセットする
    htmlEnCode = strWORK

End Function
ポイントは、 ~~~~~~~~~~~~ 'セルの結合を判断する If objHANI.Cells(y, x).MergeCells = True Then '結合セルか? Set objMA = objHANI.Cells(y, x).MergeArea 'エリアを取り出す If objMA.Cells(1, 1).Address = objHANI.Cells(y, x).Address Then '左上なら If objMA.Columns.Count <> 1 Then strTD = strTD & " COLSPAN=" & objMA.Columns.Count   End If If objMA.Rows.Count <> 1 Then strTD = strTD & " ROWSPAN=" & objMA.Rows.Count End If Print #FNO, strTD & ">"; 'タグを閉じ出力 Else '結合セルでその他なら、データを書かないでOKなら strTD = "" 'タグをクリア(データを出さない) End If Else Print #FNO, strTD & ">"; 'タグを閉じ出力 End If と、結合セルか判断して、 COLSPAN=,ROWSPAN=とTDの結合タグ指定しました。 結合されていれば、その分、COLSPAN=2やROWSPAN=2で、HTMLの結合表を作成してます。 結合セルの初め(左上の1,1)以外は出力しなくていいので、 ※COLSPAN=2やROWSPAN=2で指定されているので、 '結合セルでその他なら、データを書かないでOKなら strTD = "" 'タグをクリア(データを出さない) と変数をクリア。 もし、TDタグの出力が無ければ、値も出さなくていいので、 If strTD <> "" Then '出力ありなら 'セルの中身を変換して書き込む*018で追加 Print #FNO, htmlEnCode(objHANI.Cells(y, x).Value); 'フォントのタグを閉じる If strCOLOR <> "000000" Then '黒以外の時処理 Print #FNO, "</Font>"; End If 'タグを閉じる Print #FNO, "</TD>"; End If と、 データの出力の判断で使用しました。 ↑テスト画面、なんとか動作しました。。。 -【けんぞう!】--------------------------------------------------------- 転職関係、在宅プログラマー、SOHOの広告まとめました http://www.ken3.org/etc/500yen/zaitaku.html いろいろとあるので転機の人はぜひ 『だだ、広告料稼ぎたいだけだろ、紹介料300円〜1500円の小金稼ぎ』 ギクっ、、、バレた(笑)登録料無料、匿名で探せるので在宅で小金稼ぎの人も見てね ------------------------------------------------------------------------ 

/* * 4.終わりの挨拶 */

まぁ、それなりに動いたけど、 すごく、長くなりましたね。 http://www.ken3.org/p/f/lzh/office-020.lzh に今回のサンプル保存されてます。 あわせてみてください。 スマートにまとめる方法を考えないと。 使えるルーチンにまとめて、 将来はグラフを選択したら、グラフはgifに選択範囲のデターをHTMLに落とす。 そんなツールを作ってみたいと思います。 でも、まだまだ、ですね。 次回は、もう少しマシなの作りたいですね。 ※できたら、世に出せるくらいのツールになるといいけど、、、 プログラム作りは簡単で面白いなぁと感じるような 解説/メールマガジンを書きたいと思ってます。 よろしくお願いします。 ※ハヤク、効果のあるツール、サンプルを作らないと、、、 Excel/Access大好き、三流プログラマーKen3でした。

No.99 2003/07/07
Access タブコントロールを探り表示データ切り替え
[ページTOPへ戻る]

<Access タブコントロールを探り表示データ切り替え>

どうも、三流プログラマーのKen3です。 今回は、 Accessのタブコントロールを探ってみたいと思います。 たいした内容じゃないのですが。 サンプルファイルは、 http://www.ken3.org/vba/lzh/vba099.lzh にdb099.mdb(Access2000版)が保存されています。

/* * 1.今回のキッカケ */

http://www.ken3.org/cgi-bin/bbs/vba/wforum.cgi の掲示板に、 >タイトル:タブ切り替えで、クエリ毎にレコード抽出するには? > >タブ切る替えることで、対象となるクエリだけを抽出したいのです。 >VBで可能なら挑戦したいのでアドバイスお願いできますか! --- と書き込みをもらいました。 タブコントロールを探ってみたいと思います。

/* * 2.普通の使い方? */

顧客 ID 会社名 顧客の氏名 顧客のシメイ 支社名/支店名 請求先住所 市区町村 都道府県 郵便番号 国/地域 顧客の部署名 電話番号 内線番号 FAX 番号 電子メール アドレス 備考 なんて項目から単票フォームを普通に作成すると、 縦に長くなってしまいます。 これを、項目別にタブを付けた感じにするために、 タブコントロールを作成します。 タブコントロール?使ったことが無い人も多いと思いますが、 みたいにひっそりと、下のほうに存在してます。 これをフォームに配置します。 ページ33,ページ34なんて感じで、タブが表示されます。 データを3つのグループに分けてみます。 名称  住所  連絡先 とタブを作ります。 えっ、2つしかタブが表示されてないよ。 落ち着いて下さいよ、チャント追加できます、 タブコントロールを選択して、 右ボタンを押し、ページの挿入を選択します。 下記のように縦に長かった入力エリアを タブを使って、グループ分けできました。

/* * 3.タブコントロールのイベントを探る */

そんな、普通の使い方なんて、聞いてないんだよ、 質問、読み返してみろよボケ と、 読者が言ってるかはわかりませんが、(言われてないけど) 質問を読み返すと、 --- >タイトル:タブ切り替えで、クエリ毎にレコード抽出するには? > >タブ切る替えることで、対象となるクエリだけを抽出したいのです。 >VBで可能なら挑戦したいのでアドバイスお願いできますか! --- そっか、タブが切り替わったタイミングで、 クエリーを変更させたいのか(データを絞りたいのか、、、) よし、イベントを探りますか。 各ページのイベントには、 クリック ダブルクリック マウスボタンクリック マウスボタン移動時 マウスボタン開放時 とあるので、 クリック時に、
Private Sub P1_Click()
    MsgBox "p1タブが押されました"
End Sub
なんてやってみます。 オイオイ、反応しないよ(笑) で、エリア内をクリックすると、 p1タブが押されました と、メッセージが表示された、 これじゃタブをクリック時じゃなくて、エリアをクリックだよ(笑) いつものように読みが外れたので、 今度は、ページのイベントでは無く、 本体のタブコントロールのイベントを探ります。 変更時 クリック時 ダブルクリック時  ・  ・ とイベントが存在します。 変更時のイベントを確認したかったので、
Private Sub tab_ctl_TEST_Change()
    MsgBox "_Change 変更時のイベントです"
End Sub
と、やると、やっとタブ(グループ)を変更したタイミングが取れました。 タイミングが取れたら、 あとは、どの女の子じゃなくって、どのページを選択したか?ですよね。 .Valueのヘルプを見ると >タブ コントロール >現在選択されている Page オブジェクトのインデックス番号を表す >整数型 (Integer)の値 タブ コントロールの Value プロパティには、 >現在の Page オブジェクトのインデックス番号が含まれます。 >タブ コントロールの各タブには 1 つの Page オブジェクトがあります。 >最初の Page オブジェクトのインデックス番号は 0、2 番目は 1、 >というようになります。 よし、.Valueを入れてテストしてみると、
Private Sub tab_ctl_TEST_Change()
    Dim select_page As Integer
    '選択ページの番号を代入する
    select_page = Me![tab_ctl_TEST].Value
    'メッセージを表示する
    MsgBox select_page & "番目のタブが選択されました"
End Sub
のように、3番目のページを選択すると、2と返してくれます。 これは、ヘルプにもあるように、 0,1,2とページ番号が振られているためです。 ※左から0番目とは言いにくいけど(人間的には1番目と言いたい)  パターン的に覚えてね。

/* * 4.応用してみる */

タブコントロールで、タブを選択したタイミングで処理が可能なことがわかりました。 普通の使い方は、タブが変わると、入力画面の内容が変わるんだけど、 今回は、ズルして、タブの上の部分だけ使って、中身は気にしないことにします。 えっ?何言ってんの? 三流プログラマーの言葉は、イマイチわかんないんだよ、 まわりくどくってさ(みんなも、そんな感じしない?) ドキッ。 えっと、、、タブの上のボタンだけ使いたくって。 例えば、セリーグの打撃成績の表があります。 順位 選手名 チーム 打率 試合数 打数 得点 安打 二塁打 三塁打 本塁打 1 今岡 阪神 0.365 75 318 43 116 28 0 6 2 矢野 阪神 0.352 75 267 46 94 15 4 9 3 赤星 阪神 0.350 75 297 57 104 10 4 0 4 高橋由 巨人 0.350 59 223 47 78 17 1 13 5 ラミレス ヤクルト0.348 75 305 61 106 20 3 24 6 鈴木 ヤクルト 0.336 74 277 45 93 24 0 11 7 福留 中日 0.332 76 289 60 96 19 6 14 8 木村拓 広島 0.330 60 194 24 64 13 0 5 9 シーツ 広島 0.322 69 261 42 84 19 1 11 10 金城 横浜 0.314 73 296 38 93 17 1 7 なんだ横浜はカネシロだけか(金城はカネシロじゃなくてキンジョウです) って話は、置いといて、 T_AVGってテーブルがあって、規定打席以上の選手の打率を表示してます。 この一覧形式フォームのヘッダー部に、 タブコントロールを配置して、 横浜、阪神、巨人、ヤクルト、中日、広島 とページを作ります。※ページのサイズは無しで頭のタブだけ使う。 ページを6つ追加して、 その後、名称を 横浜、阪神、巨人、ヤクルト、中日、広島 に変更します。 ヤバイ、ALL条件なしを忘れてた(画面のコピーを取ってから気が付いたので(笑)) ALL 横浜、阪神、巨人、ヤクルト、中日、広島 のタブ(インデックスのタグ)を作成します。 ALL 横浜、阪神、巨人、ヤクルト、中日、広島 0 1  2 3  4  5 6 って、タブ構成です。 TAB_SELECTって名前のタブコントロール名にして、 _Changeの変更時のイベントに、クエリーを変えるじゃないけど、 フォームの元になるレコードソースを変えてみます。
Private Sub TAB_SELECT_Change()
    Dim strチーム名 As Variant 'チーム名を配列で受け取る
    'タブの順番と同じ名前の配列を作成する
strチーム名 = Array("ALL", "横浜", "阪神", "巨人", "ヤクルト", "中日", "広島")

    Dim strTNAME As String  '選択されたチーム名を受け取る
    '選択されたタブに対応したチーム名を配列から代入
    strTNAME = strチーム名(Me![TAB_SELECT].Value)
    
    'データソース用のSQL文を作成する
    Dim strSQL As String
    If strTNAME = "ALL" Then '全てのデータ条件無しなら
        strSQL = "select * from T_AVG Order By 打率順位"
        '↑T_AVGテーブルから全ての項目をセレクト、打率順位順とする
    Else
        'T_AVGテーブルから全ての項目をセレクト、
        '条件はチーム名が一致するデータ、打率順位順とする
        strSQL = "Select * From T_AVG " _
               & "Where チーム = '" & strTNAME & "' " _
               & "Order By 打率順位"
    End If
    
    'データを絞り込むSQL文が完成したので、
    'それをフォームのレコードソースにセットする
    Me.RecordSource = strSQL  '単にSQL文を代入するだけでOKなんですよ

End Sub
処理のポイントは、 ^^^^^^^^^^^^^^^^^^ タブが変更されたとき、TAB_SELECT_Change()のイベント発生。 Me![TAB_SELECT].Valueで選択されたタブの番号がわかるので、 strチーム名 = Array("ALL", "横浜", "阪神", "巨人", "ヤクルト", "中日", "広島") で作成したチーム名の配列をそのまま、 strTNAME = strチーム名(Me![TAB_SELECT].Value) で代入する。 横浜が選択されると、 Me![TAB_SELECT].Valueは1、 strTNAMEには、strチーム名(1)で横浜の文字列が入る。 作成されるフォームのレコードソースは strSQL = "Select * From T_AVG " _ & "Where チーム = '" & strTNAME & "' " _ & "Order By 打率順位" で、strTNAMEが横浜なので、 Select * From T_AVG Where チーム = '横浜' Order By 打率順位 とSQL文が作成されます。 作成されたSQL文を、 Me.RecordSource = strSQL と Me.RecordSource に セット(代入)するだけで、 横浜の選手の規定打席以上を表示するフォームに。 ↑寂しい、横浜のバッター陣・・・規定打席は4人かぁ・・ ↓それに比べて阪神は規定打席7人も、固定メンバーだと強いよね・・ -【けんぞう!】--------------------------------------------------------- 転職関係、在宅プログラマー、SOHOの広告まとめました http://www.ken3.org/etc/500yen/zaitaku.html いろいろとあるので転機の人はぜひ 『だだ、広告料稼ぎたいだけだろ、紹介料300円〜1500円の小金稼ぎ』 ギクっ、、、バレた(笑)登録料無料、匿名で探せるので在宅で小金稼ぎの人も見てね ------------------------------------------------------------------------ 

/* * 5.終わりの挨拶 */

今回は、 横浜のバッター陣、規定打席は4人しか居なかった。 って話でした。 オイオイ、違うだろ、 でしたね、 横浜は開幕戦しかまだ阪神に勝ってないって話でした。 ※いい加減にしてよ。(と、意味ありのどちらとも取れる言葉を書きつつ) 今回は、タブコントロールのイベントを探り、 イベントが取れるので(変化を判断できたので) タブのページを使わないで、選択後にレコードソースを変えて、 表示データの変更処理を書いてみました。 サンプルファイルは、 http://www.ken3.org/vba/lzh/vba099.lzh にdb099.mdb(Access2000版)が保存されています。 本来の使い方にこだわらないで、タブコントロールを使ってみました。 何かの参考となれば幸いです。 Excel/Access大好き、三流プログラマーKen3でした。


検索して目的の情報を探す。

目的の情報を探すには、最近はググれとよく聞きます。なので、検索ボックスを付けました。
いろいろなキーワードを入れて、検索してみてください。

カスタム検索
三流君(site:www.ken3.org) 内を Googleを利用してキーワード する

ページフッター

ここまで、読んでいただきどうもです。ここから下は、三流君宛のメッセージ送信や 三流君のホームページの紹介・案内です
目的の情報が見つかったか?少々心配しつつ、、、※質問や感想は、気軽に送ってくださいね。

リンクや広告など

項目別に↓に人気の記事をまとめてみました。お探しのジャンルを選択してください。
人気記事(来場者が多いTOP3):
[VBAでIE,WebBrowserを操作]・・・VBAでIE,WebBrowserを操作する サンプルです
[Access から Excel 連携 CreateObject("Excel.Application")]・・・AccessからExcelを操作したりデータの書き出しなどです
[VBAでOutlookの操作 CreateObject("Outlook.Application" )]・・・VBAからOutlookを使い、メール関係を処理するサンプルです
↑上記3つみたいなCreateObjectで他のアプリケーションを操作するサンプルが人気です。

開発時の操作: [F1を押してHELPを見る]/ [Debug.Print と イミディエイトウインドウ]/ [実行時エラーでデバッグ]/ [ウォッチ式とSTOP]/ [参照設定を行う]

仕様書(設計書?) XXXX書類: [基本設計書や要求仕様書]/ [テスト仕様書 テストデータ]/ [バグ票]/ [関数仕様書]/ [流れは 入力・処理・出力]

Excel関係:
[Excel UserFormを操作する]・・・エクセルでユーザーフォームを作成して入力などを行ってます
[ExcelからAccessを操作する]・・・ExcelからAccessのマクロを起動してみました、
[Excel関係 関数、その他]・・・その他Excel関係です

Access関係:
[Access UserForm/サブフォーム 操作]・・・アクセスでフォームを使ったサンプルです
[Access レポート操作]・・・レポートを操作してみました
[Access クエリーやその他関数]・・・あまりまとまってませんが、スポット的な単体関数の解説です

その他:VBAの共通関数やテキストファイルの操作など
[VBAでテキストファイル(TextFile)の操作]・・・普通のテキストファイルを使ったサンプルです
[VBA 標準関数関係とその他解説]・・・その他、グダグタ解説してます

Blog:[三流君の作業日記]/ [サンプルコードのゴミ箱]/ 広告-[通販人気商品の足跡]



[三流君(TOP ken3.org へ戻る)] / [VBA系TOPへ] / [VBA系バックナンバー目次へ移動]