[No.145 固定値や基準値はConst宣言を使用して変更し易くする] [No.146 センス・発想力?TimeAddって関数を予想する力?] [No.147 テーブルをつなげないクエリーとクロス集計クエリー] [No.148 IE ラジオボタン(RADIO)の.Checkedと.Clickの違い] [No.149 VBAでFTP.EXEを使い、ファイルをアップロードしてみる] | ||
No.145 | 2003/10/06 固定値や基準値はConst宣言を使用して変更し易くする |
[ページTOPへ戻る] |
<固定値や基準値はConst宣言を使用して変更し易くする>
こんにちは、三流プログラマーのKen3です。 今回は、 Const宣言、固定値の宣言はどんな時使うと効果あるか? について、軽く書いてみたいと思います。/* * 1. 今回のキッカケ */
読者よりメルマガの返信メールで、 Constぐらい使ったら? とメールをいただいたので、ネタにして書いてみたいと思います。 ※ホントは、もっと激しい文体でクレームをもらったんだけど/* * 2.例題の概要説明 */
No.130 Access クエリーをExcelシートへ10行x3列で出力する http://www.ken3.org/backno/backno_vba27.html#130 クエリーで集計した結果をExcelのシートへ出力してみました。 出力時、10行x3列を1ブロックとして、出力してみました。 No.138 AccessからExcel出力、色・列幅・行の高さを調整する http://www.ken3.org/backno/backno_vba28.html#138 色や列幅、高さを変える方法を上記で探りました、 クエリーを10行x3列で出力して、 列幅・行の高さを変更してました。
Private Sub btnMakeExcel_Click() Dim rs As New ADODB.Recordset 'ADOのレコードセット Dim objEXCEL As Object 'Excel参照用 Dim nYLINE As Integer '行セット位置 Dim nXLINE As Integer '列セット位置 Dim nRCNT As Integer 'レコードカウンタ Dim strWORK As String 'ワーク変数 'Excelを起動する、オブジェクトの作成 Set objEXCEL = CreateObject("Excel.Application") 'オブジェクトの作成 objEXCEL.Visible = True 'Excelを見えるようにする '新規のブックを追加する objEXCEL.Workbooks.Add 'Excelのブックを作成 'Excelのシートを追加、シート名を変更する objEXCEL.Sheets.Add 'シートを追加する objEXCEL.ActiveSheet.Name = "DATA" 'シート名をDATAにする '列幅は、縦なので、ここ、頭で定義する For nXLINE = 1 To 9 Step 3 objEXCEL.Columns(nXLINE).ColumnWidth = 8.5 objEXCEL.Columns(nXLINE + 1).ColumnWidth = 8.5 objEXCEL.Columns(nXLINE + 2).ColumnWidth = 1.8 Next nXLINE 'レコードセットを開く(Q_YUBIN_5) rs.Open "Q_YUBIN5", CurrentProject.Connection, _ adOpenKeyset, adLockOptimistic 'カウンタの初期化 スタート位置のセット nYLINE = 1 '1行目だよ nXLINE = 1 '1列目(A列)だよ '見出しをセットする objEXCEL.Cells(nYLINE, nXLINE) = "郵便番号" objEXCEL.Cells(nYLINE, nXLINE + 1) = "件数" '罫線を引く(見出しの位置から+10行分) Call make_Border(objEXCEL.Range(objEXCEL.Cells(nYLINE, nXLINE), _ objEXCEL.Cells(nYLINE + 10, nXLINE + 1))) '行の高さを調整する objEXCEL.Rows(nYLINE).RowHeight = 25 '見出しの高さを25へ strWORK = Trim(nYLINE + 1) & ":" & Trim(nYLINE + 10) '10行分の範囲文字列 objEXCEL.Rows(strWORK).RowHeight = 16 'データ高さを16へ nYLINE = nYLINE + 1 '見出し分行数が増えます nRCNT = 1 '見出し表示後は1レコード目だよ 'レコードセットからExcelへデータをセットする 'ループ処理 While rs.EOF = False 'いつものEOFが偽の間 'データをセットする(Accessから転記) objEXCEL.Cells(nYLINE, nXLINE) = rs("変換後郵便番号").Value objEXCEL.Cells(nYLINE, nXLINE + 1) = rs("変換後郵便番号のカウント").Value 'セルの色を変える objEXCEL.Cells(nYLINE, nXLINE).Interior.ColorIndex = 33 'スカイブルー objEXCEL.Cells(nYLINE, nXLINE + 1).Interior.ColorIndex = 33 '次を読む And カウンタを移動する rs.MoveNext '次のレコードに移動しないと、とんでもないことに(笑) nRCNT = nRCNT + 1 '処理レコード数を増やす If nRCNT > 10 Then '処理したレコードが10を越えた(次の列) nXLINE = nXLINE + 3 '次の列へカウンタを移動 If nXLINE > 9 Then '列が越えた? nXLINE = 1 '1列目(A列)に戻す nYLINE = nYLINE + 2 '空白行にしたいのでセット位置を+2する Else nYLINE = nYLINE - 10 '列が変わったので行カウンタをマイナスする End If '見出しの表示 objEXCEL.Cells(nYLINE, nXLINE) = "郵便番号" objEXCEL.Cells(nYLINE, nXLINE + 1) = "件数" '罫線を引く(見出しの位置から+10行分) Call make_Border(objEXCEL.Range(objEXCEL.Cells(nYLINE, nXLINE), _ objEXCEL.Cells(nYLINE + 10, nXLINE + 1))) '行の高さを調整する objEXCEL.Rows(nYLINE).RowHeight = 25 '見出しの高さを25へ strWORK = Trim(nYLINE + 1) & ":" & Trim(nYLINE + 10) '範囲文字列を作成 objEXCEL.Rows(strWORK).RowHeight = 16 'データ高さを16へ nYLINE = nYLINE + 1 '見出し表示分行数が増えます nRCNT = 1 '見出し表示後は1レコード目だよ Else ' nYLINE = nYLINE + 1 '次の行へセット位置を移動 End If Wend '通常は、ここでExcelを保存するんだけど、今回は開きっぱなしの手抜き rs.Close '開いたら閉じろ、ドアを開けたら閉めるってしつけられたでしょ(笑) Set rs = Nothing '変数も後始末しますか。使った器はキレイにしろって? End Sub |
Private Sub btnMakeExcel_Click() '定数 '列の幅を定義 Const 列幅_郵便番号 = 9.5 Const 列幅_件数 = 8.5 Const 列幅_空白 = 1.75 '行の高さを定義 Const 高さ_見出し = 26 Const 高さ_データ = 14 Dim rs As New ADODB.Recordset 'ADOのレコードセット Dim objEXCEL As Object 'Excel参照用 Dim nYLINE As Integer '行セット位置 Dim nXLINE As Integer '列セット位置 Dim nRCNT As Integer 'レコードカウンタ Dim strWORK As String 'ワーク変数 'Excelを起動する、オブジェクトの作成 Set objEXCEL = CreateObject("Excel.Application") 'オブジェクトの作成 objEXCEL.Visible = True 'Excelを見えるようにする '新規のブックを追加する objEXCEL.Workbooks.Add 'Excelのブックを作成 'Excelのシートを追加、シート名を変更する objEXCEL.Sheets.Add 'シートを追加する objEXCEL.ActiveSheet.Name = "DATA" 'シート名をDATAにする '列幅は、縦なので、ここ、頭で定義する For nXLINE = 1 To 9 Step 3 objEXCEL.Columns(nXLINE).ColumnWidth = 列幅_郵便番号 objEXCEL.Columns(nXLINE + 1).ColumnWidth = 列幅_件数 objEXCEL.Columns(nXLINE + 2).ColumnWidth = 列幅_空白 Next nXLINE 'レコードセットを開く(Q_YUBIN_5) rs.Open "Q_YUBIN5", CurrentProject.Connection, _ adOpenKeyset, adLockOptimistic 'カウンタの初期化 スタート位置のセット nYLINE = 1 '1行目だよ nXLINE = 1 '1列目(A列)だよ '見出しをセットする objEXCEL.Cells(nYLINE, nXLINE) = "郵便番号" objEXCEL.Cells(nYLINE, nXLINE + 1) = "件数" '罫線を引く(見出しの位置から+10行分) Call make_Border(objEXCEL.Range(objEXCEL.Cells(nYLINE, nXLINE), _ objEXCEL.Cells(nYLINE + 10, nXLINE + 1))) '行の高さを調整する objEXCEL.Rows(nYLINE).RowHeight = 高さ_見出し '見出しの高さを設定 strWORK = Trim(nYLINE + 1) & ":" & Trim(nYLINE + 10) '10行分範囲文字列を作成 objEXCEL.Rows(strWORK).RowHeight = 高さ_データ 'データ高さを設定 nYLINE = nYLINE + 1 '見出し分行数が増えます nRCNT = 1 '見出し表示後は1レコード目だよ 'レコードセットからExcelへデータをセットする 'ループ処理 While rs.EOF = False 'いつものEOFが偽の間 'データをセットする(Accessから転記) objEXCEL.Cells(nYLINE, nXLINE) = rs("変換後郵便番号").Value objEXCEL.Cells(nYLINE, nXLINE + 1) = rs("変換後郵便番号のカウント").Value 'セルの色を変える objEXCEL.Cells(nYLINE, nXLINE).Interior.ColorIndex = 33 'スカイブルーをセット objEXCEL.Cells(nYLINE, nXLINE + 1).Interior.ColorIndex = 33 '次を読む And カウンタを移動する rs.MoveNext '次のレコードに移動しないと、とんでもないことに(笑) nRCNT = nRCNT + 1 '処理レコード数を増やす If nRCNT > 10 Then '処理したレコードが10を越えた(次の列) nXLINE = nXLINE + 3 '次の列へカウンタを移動 If nXLINE > 9 Then '列が越えた? nXLINE = 1 '1列目(A列)に戻す nYLINE = nYLINE + 2 '空白行にしたいのでセット位置を+2する Else nYLINE = nYLINE - 10 '列が変わったので行カウンタをマイナスする End If '見出しの表示 objEXCEL.Cells(nYLINE, nXLINE) = "郵便番号" objEXCEL.Cells(nYLINE, nXLINE + 1) = "件数" '罫線を引く(見出しの位置から+10行分) Call make_Border(objEXCEL.Range(objEXCEL.Cells(nYLINE, nXLINE), _ objEXCEL.Cells(nYLINE + 10, nXLINE + 1))) '行の高さを調整する objEXCEL.Rows(nYLINE).RowHeight = 高さ_見出し '見出しの高さを設定 strWORK = Trim(nYLINE + 1) & ":" & Trim(nYLINE + 10) '10行分範囲文字列を作成 objEXCEL.Rows(strWORK).RowHeight = 高さ_データ 'データ高さを設定 nYLINE = nYLINE + 1 '見出し表示分行数が増えます nRCNT = 1 '見出し表示後は1レコード目だよ Else ' nYLINE = nYLINE + 1 '次の行へセット位置を移動 End If Wend '通常は、ここでExcelを保存するんだけど、今回は開きっぱなしの手抜き rs.Close '開いたら閉じろ、ドアを開けたら閉めるってしつけられたでしょ(笑) Set rs = Nothing '変数も後始末しますか。使った器はキレイにしろって? End Sub |
Private Sub btnMakeExcel_Click() '定数 '列の幅を定義 Const 列幅_郵便番号 = 9.5 Const 列幅_件数 = 8.5 Const 列幅_空白 = 1.75 '行の高さを定義 Const 高さ_見出し = 26 Const 高さ_データ = 14 '行、列の基準値を設定する Const MAX_行 = 6 'で次の列へ Const MAX_列 = 4 'で次の段落へ Dim rs As New ADODB.Recordset 'ADOのレコードセット Dim objEXCEL As Object 'Excel参照用 Dim nYLINE As Integer '行セット位置 Dim nXLINE As Integer '列セット位置 Dim nRCNT As Integer 'レコードカウンタ Dim strWORK As String 'ワーク変数 'Excelを起動する、オブジェクトの作成 Set objEXCEL = CreateObject("Excel.Application") 'オブジェクトの作成 objEXCEL.Visible = True 'Excelを見えるようにする '新規のブックを追加する objEXCEL.Workbooks.Add 'Excelのブックを作成 'Excelのシートを追加、シート名を変更する objEXCEL.Sheets.Add 'シートを追加する objEXCEL.ActiveSheet.Name = "DATA" 'シート名をDATAにする '列幅は、縦なので、ここ、頭で定義する For nXLINE = 1 To (MAX_列 * 3) Step 3 objEXCEL.Columns(nXLINE).ColumnWidth = 列幅_郵便番号 objEXCEL.Columns(nXLINE + 1).ColumnWidth = 列幅_件数 objEXCEL.Columns(nXLINE + 2).ColumnWidth = 列幅_空白 Next nXLINE 'レコードセットを開く(Q_YUBIN_5) rs.Open "Q_YUBIN5", CurrentProject.Connection, _ adOpenKeyset, adLockOptimistic 'カウンタの初期化 スタート位置のセット nYLINE = 1 '1行目だよ nXLINE = 1 '1列目(A列)だよ '見出しをセットする objEXCEL.Cells(nYLINE, nXLINE) = "郵便番号" objEXCEL.Cells(nYLINE, nXLINE + 1) = "件数" '罫線を引く(見出しの位置から+MAX_行行分) Call make_Border(objEXCEL.Range(objEXCEL.Cells(nYLINE, nXLINE), _ objEXCEL.Cells(nYLINE + MAX_行, nXLINE + 1))) '行の高さを調整する objEXCEL.Rows(nYLINE).RowHeight = 高さ_見出し '見出しの高さを設定 strWORK = Trim(nYLINE + 1) & ":" & Trim(nYLINE + MAX_行) 'MAX_行範囲文字列を作成 objEXCEL.Rows(strWORK).RowHeight = 高さ_データ 'データ高さを設定 nYLINE = nYLINE + 1 '見出し分行数が増えます nRCNT = 1 '見出し表示後は1レコード目だよ 'レコードセットからExcelへデータをセットする 'ループ処理 While rs.EOF = False 'いつものEOFが偽の間 'データをセットする(Accessから転記) objEXCEL.Cells(nYLINE, nXLINE) = rs("変換後郵便番号").Value objEXCEL.Cells(nYLINE, nXLINE + 1) = rs("変換後郵便番号のカウント").Value 'セルの色を変える objEXCEL.Cells(nYLINE, nXLINE).Interior.ColorIndex = 33 'スカイブルーをセット objEXCEL.Cells(nYLINE, nXLINE + 1).Interior.ColorIndex = 33 '次を読む And カウンタを移動する rs.MoveNext '次のレコードに移動しないと、とんでもないことに(笑) nRCNT = nRCNT + 1 '処理レコード数を増やす If nRCNT > MAX_行 Then '処理したレコードがMAX_行を越えた(次の列) nXLINE = nXLINE + 3 '次の列へカウンタを移動 If nXLINE > (MAX_列 * 3) Then '列が越えた? nXLINE = 1 '1列目(A列)に戻す nYLINE = nYLINE + 2 '空白行にしたいのでセット位置を+2する Else nYLINE = nYLINE - MAX_行 '列が変わったので行カウンタをマイナスする End If '見出しの表示 objEXCEL.Cells(nYLINE, nXLINE) = "郵便番号" objEXCEL.Cells(nYLINE, nXLINE + 1) = "件数" '罫線を引く(見出しの位置から+MAX_行分) Call make_Border(objEXCEL.Range(objEXCEL.Cells(nYLINE, nXLINE), _ objEXCEL.Cells(nYLINE + MAX_行, nXLINE + 1))) '行の高さを調整する objEXCEL.Rows(nYLINE).RowHeight = 高さ_見出し '見出しの高さを設定 strWORK = Trim(nYLINE + 1) & ":" & Trim(nYLINE + MAX_行) 'MAX_行範囲文字列を作成 objEXCEL.Rows(strWORK).RowHeight = 高さ_データ 'データ高さを設定 nYLINE = nYLINE + 1 '見出し表示分行数が増えます nRCNT = 1 '見出し表示後は1レコード目だよ Else ' nYLINE = nYLINE + 1 '次の行へセット位置を移動 End If Wend '通常は、ここでExcelを保存するんだけど、今回は開きっぱなしの手抜き rs.Close '開いたら閉じろ、ドアを開けたら閉めるってしつけられたでしょ(笑) Set rs = Nothing '変数も後始末しますか。使った器はキレイにしろって? End Sub |
No.146 | 2003/10/08 センス・発想力?TimeAddって関数を予想する力? |
[ページTOPへ戻る] |
<センス・発想力?TimeAddって関数を予想する力?>
どうも、三流プログラマーのKen3です。 今回は、 センス・発想力・想像力?について、軽く書きたいと思います。 軽く読み流してね。 ※VBAにTimeAddって関数は無いので、注意してね(笑)/* * 1.今回のキッカケ */
隣のASP系の掲示板で、 http://www.ken3.org/cgi-bin/bbs/asp/wforum.cgi ---- insert into 文 を ひとつで 3つのデータを格納しなければいけないのですよね。 いじって見てましたが、だめでした。 すいません。教えてください。... 本屋で手当たり次第立ち読みしたのですが、insert into の単文だけのしか見つけら れなくて。 こういうのも普通本に出てるものですか?それともすぐ発想が浮かんでこなくては だめなものなんでしょうか? う〜ん 今年卒業してプログラマを目指してる就職浪人なんですが、、 みんなプログラマはセンスと言っているのでちょっと不安になってきました、、、とほほ ---- と もらった質問で、 またまた、偉そうに、下記のように答えてました。 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ INSERT INTO KANSOU (F_KUBUN, F_NO, F_MEMO) VALUES ('ASP', 0, 'TEST DATA') みたいに、フィールド名と入れる値をペアで複数書けば、OKだと思います。 1つの方法は、ペアで作らないといけないので、 カンマの処理方法が一工夫いるのかな。 単純にやると、 S1,S2,S3,と最後のカンマの処理がポイントかなぁ。 ※必ず前に付ける、後ろに付けるが出来ないので、 いろいろあるけど、自信ないけどサンプルを2つ書きます。 sINTO = "" '初期化 sVALUE = "" For i = 1 To 3 '3項目作成する x = Cstr(i) sINTO = sINTO & "S" & x & "," sVALUE = sVALUE & "'" & Request.form("SS"+x) & "' ," Next '後ろのカンマを取りたいので、カンマ分取る sINTO = Left(sINTO, Len(sINTO) - 1) sVALUE = Left(sVALUE, Len(sVALUE) - 1) sSQL = "insert into Score(" & sINTO & ") values(" & sVALUE & ")" Set rst = db.Execute(sSQL) なんて感じで、a,b,c,として、最後のカンマを取るとか、 はじめに1番目の値を入れて置き、前カンマにするとか、 いろいろかなぁ。 sINTO = "S1" '初期化 sVALUE = "'" & Request.form("SS1") & "'" For i = 2 To 3 '2番目からループする x = Cstr(i) 'カンマを前につけてから項目作成 sINTO = sINTO & ",S" & x sVALUE = sVALUE & ",'" & Request.form("SS"+x) & "'" Next sSQL = "insert into Score(" & sINTO & ") values(" & sVALUE & ")" Set rst = db.Execute(sSQL) > こういうのも普通本に出てるものですか?それともすぐ発想が浮かんでこなくては >だめなものなんでしょうか? なれの問題だと思うけど。 目標の処理は1つだけど、書き方が1つじゃないので、 いろいろと迷うんだけど。 > う〜ん 今年卒業してプログラマを目指してる就職浪人なんですが、、 > みんなプログラマはセンスと言っているのでちょっと不安になってきました、、、とほほ センスかぁ、私も無いほうだからなんとも言えないけど、 センスがあると自分自身思っているまわりよりできる人は、 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ プログラムはセンスだ、オレにはアルと言いたがるけど・・・・ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ナンバー1目指さなければ、センス無くてもそこそこは大丈夫だと思うけど。 上の世代(今現役のプログラマー)、下の世代(学生など) と競争しないといけないから、技術職は、大変なんだけど。 ヒラメキのセンスも重要だけど、それだけじゃないし。 なんて挫折した私が言うのも変だけど。 ^^^^^^^^^^^^^^ -------------- No.1にならなくてもいい〜〜なんて、どこかのヒット曲のフレーズじゃないんだから、 やっぱNo.1の勝ち組に入りたいよね・・・ 私のような負け組にならないように、で終わるとヒントにもならないので、 前に愚痴系のネタで想像力について書いてたので、そのまま発行します。 ※センスの表現って難しいんだけど、私がセンスを感じた質問でした。 (将来、この人は伸びるなぁと感じた質問だったので、愚痴系のネタにしてました) 発想力やセンスについて、何かの参考になるといいけど。 ※しつこいけど、努力型のプログラマーや作業者、私は好きだけどなぁ。 まぁ、ハヤイ話、遊んでいる天才ウサギと休まない努力のカメは、 祖母から聞いた昔話では 努力型のカメが勝つんだけど、世の中は、そんなに甘くないんだよね。 中には、遊ばない天才肌のウサギも現実に居るんだよね・・・差が埋まらないで開く それはアナタの努力が足りないとは言わない、だって努力だけではダメなのも事実。 でも、それは今のままだったらって話、 何かのキッカケで自分自身も天才肌で遊ばないプログラマーになればいいって事。 皆さんは成長してくださいね。 挫折した三流プログラマーのメルマガが何かのキッカケとなればうれしいです。 (私も何かのキッカケを探しているけど、自分自身の才能は突然変異しなくって・・) 前置き長かったけど、拾い読みして参考となれば幸いです。/* * 2.DateAdd関数を知っている人は笑うけど */
下記が、私に成長するなぁと感じさせた質問メールです。 ----- >時間の計算を行いたいのでTimeAddをヘルプで調べたのですが見つかりません。 >時間の計算方法をご教授下さい。(6時間後を計算したいのです) ----- と、相談をもらいました。 ※ご教授下さいの書き方は、キライなんだけど。 結論から書くと、 TimeAddってありそうな関数じゃなくて、 DateAddで時刻の計算が可能です。 ^^^^^^^
Sub aaa() Dim dtmTEST As Date '日付時刻型 dtmTEST = Now() '現在時刻の代入 MsgBox "現在時刻は" & dtmTEST & "です" 'DateAdd関数で6時間後を計算する dtmTEST = DateAdd("h", 6, dtmTEST) MsgBox "6時間後は" & dtmTEST & "です" End Sub |
No.147 | 2003/10/12 テーブルをつなげないクエリーとクロス集計クエリー |
[ページTOPへ戻る] |
<テーブルをつなげないクエリーとクロス集計クエリー>
どうも、三流プログラマーのKen3です。 今回は、 テーブルをつなげないクエリー と クロス集計クエリー を使用して、小細工をしてみたいと思います。 今回の、サンプルファイルは、 http://www.ken3.org/vba/lzh/vba147.lzh にdb147.mdb(Access2000版)が保存されています。 ※クエリーやデータをいじって、遊んでみてください。 ※あまり、お薦め出来ないけど、こんな方法もあるんだってことで。/* * 1.今回のキッカケ */
VBA系の掲示板 http://www.ken3.org/cgi-bin/bbs/vba/wforum.cgi に来た質問です。 ---- 以下のようなテーブルを クエリーで横方向に展開することは出来るのでしょうしょうか? 何かいい方法があれば教えてください! よろしくお願いします。 商品 支払年月 支払回数 月額 1 商品A 200303 5 3000 2 商品B 200305 2 2000 3 商品C 200303 12 1000 ↓ 商品 200303 200304 200305 200306 200307 200308〜200402 1 商品A 3000 3000 3000 3000 3000 2 商品B 2000 2000 3 商品C 1000 1000 1000 1000 1000 1000 〜1000 -------------------------------------------------------- と もらった質問で少し考えてみました。/* * 2.クロス集計クエリーを使いたいけど、レコードが足りない・・・ */
一番先に頭に思い浮かぶもの、 Excelだったら、分析系のピボットテーブルで行と列指定、 Accessだと、あまり使ったこと無いけどクロス集計クエリーってのがあったなぁ。 あっ、でも、 商品 支払年月 支払回数 月額 1 商品A 200303 5 3000 の1レコードから、 商品 200303 200304 200305 200306 200307 200308〜200402 1 商品A 3000 3000 3000 3000 3000 と 5つの項目は作れないか。 レコードの作りが、 商品 支払年月 月額 商品A 200303 3000 商品A 200304 3000 商品A 200305 3000 商品A 200306 3000 商品A 200307 3000 ってなっていれば、行を商品、列を支払年月のクロス集計でいいんだけど。 ワークテーブル作って、支払回数分、レコードを発生させるかな・・・ ^^^^^^^^^^^^^^^^^^^^ それが王道の処理なんだろうけど、 今回も小細工してやるぞ〜と、三流君の悪い癖が・・・ ※参考程度にしてね。/* * 3.問題なのは、レコードが足りないってことなので、強引に増やす */
問題は、はっきりしてるんだよね。 支払回数分レコードがあれば、クロス集計クエリーが使えるんだよねキット。 支払数分、レコードを増やすかぁ・・・う〜ん。 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ まぁ、昔の人がよく言ってたり、偉そうな先輩が飲んだ時語っていると思うけど、 失敗を成功に生かす的な言葉で、 失敗は成功の元、会社によっては、失敗は成功の母とか言ってるよね。 Accessでクエリー作成していると、 2つのテーブルをつなげるリンクを忘れたりしないと思いますが、 もし、明細とマスターデータをつなげるのを忘れたら?どうなるでしょう? 隣のASPの例だけど、 http://www.ken3.org/cgi-bin/test/test073-1.asp でテストできる SQL From句にテストで2つのテーブルデータを指定(つなげない) を見ると、 Select * From T_月別売上, T_商品 と、条件無しのSQL文を発行してます。 すると、どうなるか? T_月別売上 が 8件 T_商品 が 6件 このデータ が 48件のレコードを返してきます。 T_月別売上の1件に対して、リンクしてないので商品6件分データが作成されます。 これって、明らかにミスなんだけど、今回は、そのミスを利用してみます。 ダミーのテーブルを1つ作成します。 テーブル名はDummyCnt フィールドはCNTと数値型でデータを作成して、 0〜データを入力します(0から連番で予想される最大支払回数まで作成する) ↑ダミーテーブル、データイメージ そのダミーテーブル と DATAテーブルをつなげない、 そんな欠陥クエリーを作成します。 クエリーを実行すると、DummyCntで作成したレコード数分同じデータが作成されます 商品 支払年月 支払回数 月額 CNT A1 200303 5 3000 0 A1 200303 5 3000 1 A1 200303 5 3000 2 ・ ・ A1 200303 5 3000 19 A1 200303 5 3000 20 B1 200305 4 5000 0 B1 200305 4 5000 1 とクエリーの結果が作成されます。 ※0〜20と21個のダミーデータを作成してます。 ↑ダミーテーブルとリンクしないとこんな感じです。 -【けんぞう!】--------------------------------------------------------- 月500円、タバコなら2箱、120円缶コーヒーなら4缶分の謝礼をGetするなら http://www.ken3.org/etc/500yen/ ←無料アンケート系の広告です。 『チッ、がんばって回答して月500円かよ』(お馬鹿なプログラマー:31歳) ------------------------------------------------------------------------/* * 4.増えたデータを調整する */
商品 支払年月 支払回数 月額 CNT A1 200303 5 3000 0 A1 200303 5 3000 1 A1 200303 5 3000 2 こんな、欠陥データ作られても、困るんだよね。 固定でn件データが増えても使えないでしょ? ほしいイメージは、 ^^^^^^^^^^^^^^^^^^ 商品 支払年月 支払回数 月額 商品A 200303 5 3000 だったら、 商品 支払年月 月額 商品A 200303 3000 商品A 200304 3000 商品A 200305 3000 商品A 200306 3000 商品A 200307 3000 の 5件なんだよ。 ~~~~ ですよね、 そこで、演算フィールドを作成して、それに近いデータを作ります。 ^^^^^^^^^^^^^^^^^^^^^^ まずは、200303,200304,200305,200306,200307と、月数を増やしたいので、 基準の200303の文字列を日付型にCdate変換してから、 DateAddでCNT月後を計算してみます。 支払中: DateAdd("m",[CNT],CDate(Left([支払年月],4) & "/" & Mid([支払年月],5,2) & "/01")) と、計算式を作成して、支払中フィールドを作成しました。 すると、 支払年月にCNTを+したフィールドが作成されます。 商品 支払年月 支払回数 月額 CNT 支払中 A1 200303 5 3000 0 2003/03/01 ←03月+CNTで3月 A1 200303 5 3000 1 2003/04/01 03月+CNTで4月 A1 200303 5 3000 2 2003/05/01 03月+CNTで5月 A1 200303 5 3000 3 2003/06/01 03月+CNTで6月 A1 200303 5 3000 4 2003/07/01 03月+CNTで7月(5回ここで終了したい) A1 200303 5 3000 5 2003/08/01 03月+CNTで8月(いらないのに) A1 200303 5 3000 6 2003/09/01 03月+CNTで9月(いらない) となり、1ヶ月単位でCNTの値を利用して変化させてます。 次は、支払回数が5回なら、5個のデータにして必要・不必要を区別したい。 ホントはレコードを増やさないのがベストだけど、 FLGとフラグ項目を作成して、CNTが支払回数以内ならON(支払い中)とフラグを付けます FLG: IIf([cnt]<[支払回数],"ON","") と、演算フィールドを作成しました。 商品 支払年月 支払回数 月額 CNT 支払中 FLG A1 200303 5 3000 0 2003/03/01 ON 03月+CNTで3月 A1 200303 5 3000 1 2003/04/01 ON 03月+CNTで4月 A1 200303 5 3000 2 2003/05/01 ON 03月+CNTで5月 A1 200303 5 3000 3 2003/06/01 ON 03月+CNTで6月 A1 200303 5 3000 4 2003/07/01 ON 03月+CNTで7月(5回終了) A1 200303 5 3000 5 2003/08/01 (""の空白) A1 200303 5 3000 6 2003/09/01 (""の空白) と、クエリーの結果データが作成されました ↑2つの演算フィールドを追加する/* * 5.データがそろったので、クロス集計クエリーを作成する */
作成したクエリーのFLGがONのデータをクロス集計すれば、 目的のクエリーを作ることが出来そうです。 ※クエリーを2つ使ってしまいますが。 クエリーの種類をクロス集計クエリーにして、 行:商品 列:支払中(作成した演算フィールドを使用) 値:月額 where条件:FLG=ONのデータ で、作成すると、なんとかできそうです。 ↑作成イメージ -【けんぞう!】--------------------------------------------------------- ASPが利用可能なレンタルサーバーをお探しのアナタ、 http://www.ken3.org/asp/server.html ← けんぞうも使っているサーバーの紹介 『おっIISでbasp21でメール送信、mdbも使えるよ』(三流PG:31歳) ------------------------------------------------------------------------/* * 6.終わりの挨拶 */
今回は、 つなげないクエリーでデータを増やし クロス集計クエリーを使用して、行列で集計したデータを作成してみました。 半ば強引に作成したので、データ量が多かったりすると、 集計に時間がかかったりするので、 判断しながら使ってみてください。 何か読者の心に残れば、うれしいです。 *私の独り言をうまく消化してくださいね。 いつも失敗?の負け組のKen3でした。 ~~~~~~~(↑オイオイ)
No.148 | 2003/10/14 IE ラジオボタン(RADIO)の.Checkedと.Clickの違い |
[ページTOPへ戻る] |
<IE ラジオボタン(RADIO)の.Checkedと.Clickの違い>
どうも、三流プログラマーのKen3です。 今回は、 ラジオボタンを探ってみます。 今回の、サンプルファイルは、 http://www.ken3.org/vba/lzh/vba148.lzh にvba148.xls(Excel2000版)が保存されています。 ※自分でテストページを作ったりして、遊んでみてください。 関連項目、 VBAでInternetExplorer.Applicationを操作する(IE操作) http://www.ken3.org/cgi-bin/group/vba_ie.asp もヨロシクね。/* * 1.今回のキッカケ */
VBA系の掲示板 http://www.ken3.org/cgi-bin/bbs/vba/wforum.cgi に来た質問です。 ---- WebBrowserコントロールからラジオボタン選択がうまくできません。 Googleの先頭ページのラジオボタン選択は過去ログを拝見してうまくできました がうまくできないページがあります。その他のラジオボタン選択方法についてよ ろしければ教えて下さい。 ---- と もらった質問にいつものように、質問に質問で返し(オイオイ) ※出来るだけ、質問に質問で返さないように心がけてるんだけど・・・ ---- こんな質問返しをしてみたり --- できたら、うまく行かなかったページの HTMLのフォーム部分だけでもUPしてもらえると、 何かしらアドバイスできるかもしれません。 ----/* * 2.問題のページのソースファイル */
http://www.ken3.org/vba/test148.html に質問者からのHTMLをUPしました。下記のような感じのHTML文です。 <HTML> <BODY BGCOLOR="#ffffff"> <TABLE BORDER=0 frame="border"> <TR> <TD> <DIV ALIGN=LEFT> <INPUT TYPE=RADIO NAME="sentaku" VALUE="a1" tabindex="1" onClick="clickradio()" CHECKED><font size="3" color="#0066ff"><b>すみれ</b></font> </DIV> </TD> <TD> <DIV ALIGN=CENTER> <INPUT TYPE=RADIO NAME="sentaku" VALUE="a2" tabindex="1" onClick="clickradio()" ><font size="3" color="#0066ff"><b>たんぽぽ</b></font> </DIV> </TD> <TD> <DIV ALIGN=RIGHT> <INPUT TYPE=RADIO NAME="sentaku" VALUE="a3" tabindex="1" onClick="clickradio()" ><font size="3" color="#0066ff"><b>ひまわり</b></font> </DIV> </TD> <TD> <DIV ALIGN=RIGHT> <INPUT TYPE=RADIO NAME="sentaku" VALUE="a4" tabindex="1" onClick="clickradio()" ><font size="3" color="#0066ff"><b>チューリップ</b></font> </DIV> </TD> </TR> </TABLE> </BODY> </HTML> ぱっと見、フォーム?<FORM>使っていないのかなぁ?まぁいいや、 ^^^^^^^^^^^^^^^^^^^^^^^^^^/* * 3..allから選択してみる */
_________________________ ---- 余談 ハマった話 ---- ~~~~~~~~~~~~~~~~~~~~~~~~~ INPUT type=radio Element | input type=radio Object http://msdn.microsoft.com/workshop/author/dhtml/reference/objects/input_radio.asp を見ると、ラジオボタンは、 .Checked = True / False なんですね。 objIE.document.all.memo.Value = strPARA '感想をセット と同様に objIE.document.all.kubun.Value = "VBA" としたら、ダメだった・・・ なので、ループで探して、 .Checked = True としてます。 ※意外とハマリマシタ(笑) なんて感じで、 ラジオボタンのプロパティは.Checked = True / False ですよ と 偉そうに、 No.144 IE PostData付でURLを開く(データをPostする) http://www.ken3.org/backno/backno_vba29.html#144 で、書いてました。 Form(0)のループでフォームの構成要素から下記のようにして探していました。 '区分を探してセットする For Each objITEM In objIE.document.Forms(0) 'フォームのオブジェクトでループ '名前がKUBUNで値がVBAのラジオボタンを探す If objITEM.Name = "KUBUN" And objITEM.Value = "VBA" Then objITEM.Checked = True 'セレクト状態をtrueにする End If Next 今回は、 フォームが無さそうなので、同様に.Allから探してみました。 ^^^^^^^^^^^^^^^^^^^^^^^^ Dim strRADIO(0 To 3) As String 'ラジオボタンの値 '変数の初期化 strRADIO(0) = "a1" 'すみれ strRADIO(1) = "a2" 'たんぽぽ strRADIO(2) = "a3" 'ひまわり strRADIO(3) = "a4" 'チューリップ '種類を選択してみる strWORK = InputBox("0すみれ 1たんぽぽ 2ひまわり 3チューリップ どれ?", , "0") nNO = Val(strWORK) If nNO < 0 Or nNO > 3 Then nNO = 0 '範囲外の時、番号を0にする End If なんて感じで、探したいa1〜a4を入力させ、 '区分を探してセットする For Each objITEM In objIE.document.all '.allからオブジェクトを探す '名前がsentakuで値がa?のラジオボタンを探す If objITEM.Name = "sentaku" And objITEM.Value = strRADIO(nNO) Then objITEM.Checked = True 'セレクト状態をtrueにする End If Next とすると、見事にエラーが発生する。 オブジェクトはこのプロパティ・メソッドをサポートしてません ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ えっ?なんで? まぁ、文句言わないで、デバッグ押しますか。 If objITEM.Name = "sentaku" And objITEM.Value = strRADIO(nNO) Then ここがエラーです。 う〜ん、なんだろうねぇ? プロパティがないのかぁ、.Nameにアクセスできないのか。 あっ、.Nameって<INPUT>のタグとか<FORM>とかの名前しかないのか。 試しにどのタグでこけたか見てみたかったので、 イミディエイト ウインドウで見てみると、 ? objitem.tagname HTML あらら、頭でエラーかよ。 たしかに<HTML>のタグは、.Nameを持っていないよね。 ※<HTML Name="AAAA">なんて無いよね・・・ ↑見せたくないエラーのイメージです(笑) とすると、 objITEM.Nameの前に、.TAGNameでINPUTのタグがチェックして、 それから、.Name = "sentaku" と.Value = strRADIO(nNO)をチェックしますか。 ※各タグによって、持っているプロパティが違うので、先にタグをチェックする '区分を探してセットする For Each objITEM In objIE.document.all '.allからオブジェクトを探す '名前がsentakuで値がa?のラジオボタンを探す If objITEM.TAGName = "INPUT" Then 'まず、タグでINPUTか判断 Debug.Print objITEM.Name 'TESTで値を表示 Debug.Print objITEM.Value 'TESTで値を表示 If objITEM.Name = "sentaku" And objITEM.Value = strRADIO(nNO) Then objITEM.Checked = True 'チェック状態をtrueにする End If End If Next ↑こんな感じで、.TAGName="INPUT"でチェック後に .Name .ValueへアクセスしているのでOKです。 'IEラジオボタンをチェック(.Checked=True)するサンプル
Sub TEST_RADIO_Checked() Dim strURL As String Dim objIE As Object Dim objITEM As Object Dim strAAA As String Dim nNO As Integer '選択値を数値にしたいので Dim strWORK As String 'ワーク変数 Dim strRADIO(0 To 3) As String 'ラジオボタンの値 '変数の初期化 strRADIO(0) = "a1" 'すみれ strRADIO(1) = "a2" 'たんぽぽ strRADIO(2) = "a3" 'ひまわり strRADIO(3) = "a4" 'チューリップ '種類を選択してみる strWORK = InputBox("0すみれ 1たんぽぽ 2ひまわり 3チューリップ どれ?", , "0") nNO = Val(strWORK) If nNO < 0 Or nNO > 3 Then nNO = 0 '範囲外の時、番号を0にする End If 'IEオブジェクトの作成 Set objIE = CreateObject("InternetExplorer.application") objIE.Visible = True 'テストの選択ページを開く strURL = "http://www.ken3.org/vba/test148.html" objIE.Navigate "" & strURL 'アドレスを渡し表示する '表示完了まで待つ Do While objIE.Busy = True '何もしないループ(笑) DoEvents 'ただ待ってるのつまらないので、タイトルバーをイタズラ If strAAA <> Format(Now(), "SS") Then strAAA = Format(Now(), "SS") '現在の秒数を代入 Application.Caption = Now() & "読み込み処理待ちです" End If Loop Application.Caption = "読み込みは終了" '区分を探してセットする For Each objITEM In objIE.document.all '.allからオブジェクトを探す '名前がsentakuで値がa?のラジオボタンを探す If objITEM.TAGName = "INPUT" Then 'まず、タグでINPUTか判断 Debug.Print objITEM.Name 'TESTで値を表示 Debug.Print objITEM.Value 'TESTで値を表示 If objITEM.Name = "sentaku" And objITEM.Value = strRADIO(nNO) Then objITEM.Checked = True 'チェック状態をtrueにする End If End If Next '終了メッセージ MsgBox "データが選択されたか、確認してください" End Sub |
Sub TEST_RADIO_Click() Dim strURL As String Dim objIE As Object Dim objITEM As Object Dim strAAA As String Dim nNO As Integer '選択値を数値にしたいので Dim strWORK As String 'ワーク変数 Dim strRADIO(0 To 3) As String 'ラジオボタンの値 '変数の初期化 strRADIO(0) = "a1" 'すみれ strRADIO(1) = "a2" 'たんぽぽ strRADIO(2) = "a3" 'ひまわり strRADIO(3) = "a4" 'チューリップ '種類を選択してみる strWORK = InputBox("0すみれ 1たんぽぽ 2ひまわり 3チューリップ どれ?", , "0") nNO = Val(strWORK) If nNO < 0 Or nNO > 3 Then nNO = 0 '範囲外の時、番号を0にする End If 'IEオブジェクトの作成 Set objIE = CreateObject("InternetExplorer.application") objIE.Visible = True 'テストの選択ページを開く strURL = "http://www.ken3.org/vba/test148.html" objIE.Navigate "" & strURL 'アドレスを渡し表示する '表示完了まで待つ Do While objIE.Busy = True '何もしないループ(笑) DoEvents 'ただ待ってるのつまらないので、タイトルバーをイタズラ If strAAA <> Format(Now(), "SS") Then strAAA = Format(Now(), "SS") '現在の秒数を代入 Application.Caption = Now() & "読み込み処理待ちです" End If Loop Application.Caption = "読み込みは終了" '区分を探してセットする For Each objITEM In objIE.document.all '.allからオブジェクトを探す '名前がsentakuで値がa?のラジオボタンを探す If objITEM.TAGName = "INPUT" Then 'まず、タグでINPUTか判断 Debug.Print objITEM.Name 'TESTで値を表示 Debug.Print objITEM.Value 'TESTで値を表示 '↓の条件でクリックするオブジェクトを探す If objITEM.Name = "sentaku" And objITEM.Value = strRADIO(nNO) Then objITEM.Click '素直にクリックしてみた(笑) Exit For '目的の処理が終わったので、ループを抜ける End If End If Next '終了メッセージ MsgBox "データが選択されたか、確認してください" End Sub |
No.149 | 2003/10/24 VBAでFTP.EXEを使い、ファイルをアップロードしてみる |
[ページTOPへ戻る] |
<VBAでFTP.EXEを使い、ファイルをアップロードしてみる>
どうも、三流プログラマーのKen3です。 今回は、 コマンドプロンプトのFTPを使用して、 ファイルをアップロードしてみたいと思います。 関連項目、 VBAでFTP.EXEを使う http://www.ken3.org/cgi-bin/group/vba_ftp.asp もヨロシクね。/* * 1.今回のキッカケ */
VBA系の掲示板 http://www.ken3.org/cgi-bin/bbs/vba/wforum.cgi に来た質問です。 ---- >エクセルVBAから、ファイルを自動でFTPしたいのですが、自分なりには >相当しらべてみたのですが、現時点での私の能力では・・・限界にきています。 >しかし、現在作りかけている子供用問題集において、自分の成績をWEBにアッ >プするために、どうしてもその機能がほしいのです。 >過去ログを読むことも、検索も、自分なりにがんばったのですが・・・どうかそ >の部分のプログラムを教えてください。 ---- と もらった質問にいつものように、質問に質問で返し(オイオイ) ※出来るだけ、質問に質問で返さないように心がけてるんだけど・・・ ---- こんな質問返しをしてみたり --- やりたいこと、仕様は ExcelのVBAで、 aaa.txt(ファイルは1つ?) を FTPで(FTP.EXE?それともフリーのDLL?)、 指定したディレクトリにUPする でいいのかなぁ? 私も詳しくないのですが、 WebにUPする、リアルタイム性が無いなら、 メールアドレスを1つ作って(成績回収用に専用で1つ) 回収するのが楽そうな気もするし、 FTPにこだわらないで、 WebにデータをPOSTして、回収するとか。 なんて代案もあるけど、 FTPで送信、少し、私も探ってみますね。 ---- ヤバイ・ヤバイ、、、掲示板のお偉い人達みたいに、 コッチのほうがいいよと質問者のやりたいことを否定して、 自分の好きな方法を強引に進めようとしてしまった・・・(少し反省) FTP.EXEの使用方法、まとめも兼ねて、作ってみますか。/* * 2.処理の構想を考える */
Set objFTP = CreateObject("FTP.application") なんて感じの、スマートな方法、あればいいのですが、 チョット見つからなかったので、 パラメータファイルにFTPのコマンドを書き、 ftp.exe で実行、そんな感じの処理を作成してみたいと思います。 -- 参考バックナンバー -- No.25 コマンドラインのFTPを使ってみた http://www.ken3.org/backno/backno_vba06.html#25 'shellでFTPを起動 Shell "ftp -s:" & strPNAME と、Shellでftp.exeを起動して、-s のコマンドを実行させる、そんな構想でした。 No.26 FTP -n オプションとuserコマンド</A></h3> http://www.ken3.org/backno/backno_vba06.html#26 In message "-n と user 使えよバカ", s***@********.ne.jpさん wrote... >ここ見ろ-->http://www.zdnet.co.jp/help/tips/linux/l0462.html >-n と user 使えよバカ --- ftp -n とやると、ログインを聞いてこないので、 user ユーザ名 パスワード でログイン出来るんですね。/* * 3.昔の復習を兼ねて、-n -sオプション */
http://www.ken3.org/backno/backno_vba06.html#26 で、作成したのが、下記のサンプルです。
Sub test() Dim strPNAME As String 'パラメーターファイル名 Dim nFNO As Integer 'ファイル番号 strPNAME = ThisWorkbook.Path & "\ftptest.txt" 'ファイル名作成 nFNO = FreeFile '空いてるファイル番号を取る Open strPNAME For Output As #nFNO 'ファイルを新規作成 'データ書き込み Print #nFNO, "open plaza14.mbn.or.jp" 'openホスト名 Print #nFNO, "user ken3 XXXXXX←パス" 'userコマンド ユーザー名 パスワード Print #nFNO, "cd www" Print #nFNO, "pwd" Print #nFNO, "get index.html " & ThisWorkbook.Path & "\index.html" Close #nFNO '開いたら閉じようね 'shellでFTPを起動 -nのオプションを付ける Shell "ftp -n -s:" & strPNAME End Sub |
Sub ftp_upfile(strHNAME As String, _ strUSERNAME As String, _ strPASS As String, _ strDIR As String, _ strUPFILE As String) End Sub |
Sub TEST() Dim strFILENAME As String 'ファイル名受け取り用 'ファイル名を選択する strFILENAME = Application.GetOpenFilename 'プログラムの中にパスワード埋め込むのよくないけど '作った関数をコールする Call ftp_upfile("ftp.xxxx.jp", "username", "pass", "data/pc/", strFILENAME) End Sub |
Sub ftp_upfile(strHNAME As String, _ strUSERNAME As String, _ strPASS As String, _ strDIR As String, _ strUPFILE As String) Dim strPNAME As String 'パラメーターファイル名 Dim nFNO As Integer 'ファイル番号 'パラメータファイル名をブック位置\ftppara.datとする strPNAME = ThisWorkbook.Path & "\ftppara.dat" 'ファイル名作成 'ファイルを新規作成する nFNO = FreeFile '空いてるファイル番号を取る Open strPNAME For Output As #nFNO 'ファイルを新規作成 'コマンドデータを書き込む Print #nFNO, "open " & strHNAME 'open ホスト名 Print #nFNO, "user " & strUSERNAME & " " & strPASS 'user ユーザー名 パスワード Print #nFNO, "cd " & strDIR 'cd xxxx 書き込みディレクトリへ移動 Print #nFNO, "put " & strUPFILE 'put ファイル名 で、ファイルをアップする Print #nFNO, "quit" 'bay で コマンド終了 'ファイルを閉じる(作成が終了したので) Close #nFNO '開いたら閉じようね 'shellでFTPを起動 -n,-s:ファイル名 のオプションを付ける Shell "ftp -n -s:" & strPNAME End Sub |
目的の情報を探すには、最近はググれとよく聞きます。なので、検索ボックスを付けました。
いろいろなキーワードを入れて、検索してみてください。
ここまで、読んでいただきどうもです。ここから下は、三流君宛のメッセージ送信や 三流君のホームページの紹介・案内です
目的の情報が見つかったか?少々心配しつつ、、、※質問や感想は、気軽に送ってくださいね。
質問や要望など連絡方法でお互い確認が取りやすく、便利なのが掲示板なのですが、私の対応のまずさから不定期で荒れてしまい、掲示板は現在封鎖中です。(反省しなきゃ)
感想や質問・要望・苦情など 三流君へメッセージを送る。 時間的余裕のある要望・質問・苦情の場合は、下記のフォームからメッセージを送ることができます。 |
項目別に↓に人気の記事をまとめてみました。お探しのジャンルを選択してください。
人気記事(来場者が多い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:[三流君の作業日記]/
[サンプルコードのゴミ箱]/
広告-[通販人気商品の足跡]