質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

Q&A

解決済

1回答

1281閲覧

vba レポート描画

dady

総合スコア18

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

0グッド

0クリップ

投稿2016/12/04 15:30

ACCESSのレポートで詳細のフォーマット時イベントにVBAを記述して
印刷プレビューで、テーブルに基づいて地図のようなものを描画したいと思っています。
テーブル等の情報は以下のような感じです。

「テーブル名」:T_東京
「フィールド」ID:区:人数
1:荒川区:15
2:杉並区:10
3:江東区:2
4:世田谷区:22
5:新宿区:4
6:太田区:2
7:隅田区:28
8:渋谷区:9
9:品川区:13
「レポート名」:R_描画テスト

1.区の人数に合わせて配列に色を格納する。
2.格納した配列を描画する関数に渡して描画する。

上記の手順で進めたいのですが、配列の値が関数に渡りません。
(ちなみにrgbを3分割して、2次元配列にしてみましたが、値は渡りません。位置を表す値(Single型)は変数で渡すことはできます)
配列の値を関数に渡すにはどんな方法がありますか?
そもそもFunctionなどの使い方が間違っているのかもしれませんが・・・

vba

1Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer) 2 3 '配列に色のデータを格納する 4 5 Dim i As Integer 6 Dim rs As Recordset 7 Dim acolor() As Long 8 9 i = 0 10 11 Set rs = db.OpenRecordset("T_東京", dbOpenTable) 12 13 rs.MoveFirst 14 15 Do Until rs.EOF 16 17 ReDim acolor(i) 18 19 '区の人数に合わせて配列に色を格納する 20 Select Case rs![人数] 21 Case 1 To 5 22 acolor(i) = rgb(255, 0, 0) 23 Case 6 To 10 24 acolor(i) = rgb(255, 51, 0) 25 Case 11 To 15 26 acolor(i) = rgb(255, 102, 0) 27 Case 16 To 20 28 acolor(i) = rgb(255, 133, 0) 29 Case 21 To 25 30 acolor(i) = rgb(255, 204, 0) 31 Case 26 To 30 32 acolor(i) = rgb(255, 255, 0) 33 Case Else 34 MsgBox "範囲外です。" 35 End Select 36 37 i = i + 1 38 39 rs.MoveNext 40 41 Loop 42 43 '各町の描画 44 45 '****ここで配列の値を関数に渡したいけどできません 46 '****描画自体はできているので配列だけ関数に渡ってないようです 47 Call Unit(acolor(0), 1, 0)'荒川区の描画 48 Call Unit(acolor(1), 2, 0)'杉並区の描画 49 Call Unit(acolor(2), 0, 1)'江東区の描画 50 Call Unit(acolor(3), 1, 1)'世田谷区の描画 51 Call Unit(acolor(4), 0, 2)'新宿区の描画 52 Call Unit(acolor(5), 1, 2)'太田区の描画 53 Call Unit(acolor(6), 1, 2)'隅田区の描画 54 Call Unit(acolor(7), 1, 2)'渋谷区の描画 55 Call Unit(acolor(8), 1, 2)'品川区の描画 56 57 '****直接値を入れれば、正常に描画されます。 58 Call Unit(rgb(255, 51, 0), 1, 0) 59 60End Sub 61 62'四角形の描画(中塗り) 63Function Unit(IngColor As Long, x As Single, y As Single) As Report 64 65 'メッセージボックスで確認してみると値は渡ってないみたいです。 66 MsgBox IngColor 67 68 Dim rpt As Report 'レポートオブジェクト 69 Dim top As Single 70 Dim left As Single 71 Dim right As Single 72 Dim bottom As Single 73 74 top = 5 + x * 5 75 left = 5 + y * 5 76 right = 5 + top 77 bottom = 5 + left 78 79 Set rpt = Reports![R_描画テスト] 80 81 'スケールの基準をmmに設定 82 rpt.ScaleMode = 6 83 84 rpt.Line (top, left)-(right, bottom), IngColor, BF 85 86End Function 87

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

ループの中で動的配列をredimする際に、Preserveを指定してないので
redimしたときに値がすっぱり消えているのではないかと。

投稿2016/12/05 06:39

akio221

総合スコア716

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問