Access VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


34 / 500 ページ ←次へ | 前へ→

【12643】Re:クエリのフィールドの制限
回答  Pirorin  - 14/11/18(火) 11:29 -

引用なし
パスワード
   M社のサポートのどこかにあったような
気がしたのですが、
Accessの場合、IIfのネストは15以上ではエラーが出るので、
関数で逃げる場合は標準モジュールに、


Function funcSwitch(ByVal fld As String) As String
Dim xyz As String

xyz = Right(fld, 2)
Select Case xyz
Case "01"
  funcSwitch = "A"
Case "02"
  funcSwitch = "B"
 ・
 ・
 ・
End Select
End Function

のような関数を作成し、クエリの式のところに、

  funcSwitch([フィールド])

と入れます。
・ツリー全体表示

【12642】Re:クエリのフィールドの制限
回答  かるびの  - 14/11/18(火) 0:40 -

引用なし
パスワード
   >クリスタルレポートからAccess2003に帳票を作り変えているのですが
 クリスタルレポートというのは初めて聞きました。
なので、それがどういうものか全くわかりません。


>文字数が多すぎるのかエラーが出てしまいます。
 きっとそのとおりだと思います。
 アクセスのクエリの仕様として、
「クエリのデザイン グリッドのセル内の文字数」の上限は1,024 だそうです。
   ht tp://office.microsoft.com/ja-jp/access-help/HP005186808.aspx
 この制限に引っかかっている可能性が高そうですね。


 他方、「SQL ステートメント内の文字数」の上限は約64,000 だそうです。
 IIF関数の式の文字数が6万4000字までにまだ余裕がある
というならば、
クエリをデザインビューで作るのではなく、SQLビューで作る
というのも一法ではないかと思います。
 この場合、SQL文を書けるというのが最低条件となります。

 なお、SQLですが、クエリのデザインビューで作れる程度のクエリであれば、
ネットで解説ページを探して、熟読し、
試しに自分でSQLを使ってクエリを作ってみるなどすれば、
1時間程度である程度使えるようになると思います。


 他の方法としては、IIF関数と同じ機能を果たす、ユーザー定義関数を自作する
という方法も考えられます。
 この場合は、VBA必須となります。
 VBAのコードはIf文を重ねるだけだと思うので、
ネットで解説ページを探し、それを読みながら進めれば、
それほど難しくはないと思います。


 余談になりますが、
>IIF(right([フィールド],2)="01",
>  "A",
>   IIF([フィールド],2)="02",
>  "B",
>   ・
>   ・
>   ・
>   )
という関数は、「フィールド」フィールドの下2桁が「01」ならば「A」を、
「02」ならば「B」を返すというものです。
 このような場合、アクセスでは、通常、テーブルを1個作って対処します。

 そのやり方ですが、まず、テーブルを1つ新設します。テーブル名は「Tマスタ」とします。
フィールドとして、
   符号  テキスト型  主キー
   名称  テキスト型
を設け、
   符号 名称
    01  A
    02  B
というようにレコードを格納します。

 次に、「フィールド」フィールドを持つテーブル(Tテーブル)から
クエリ(Q_A)を作ります。
 「Q_A」クエリでは、「フィールド」フィールドの下2桁を取り出す式を
設定した演算フィールド(フィールド名「下2桁」)を設けます。

 さらに、「Q_A」クエリとTマスタとを結合させたクエリ(Q_B)を作ります。
結合フィールドは、「Q_A」クエリの「下2桁」フィールドと、
Tマスタの「符号」フィールドとします。

 「Q_B」クエリを開けば、演算フィールドとしてIIF関数を設定したのと
同じ結果が得られるはずです。
・ツリー全体表示

【12641】Re:レコードのインポート
回答  かるびの E-MAIL  - 14/11/17(月) 23:38 -

引用なし
パスワード
   参考になりますか。

クエリで2つのテーブルを同期させる
ht tp://hatenachips.blog34.fc2.com/blog-entry-153.html
・ツリー全体表示

【12640】クエリのフィールドの制限
質問  bbk  - 14/11/17(月) 9:52 -

引用なし
パスワード
   質問させていただきます。

クリスタルレポートからAccess2003に帳票を作り変えているのですが
クリスタルレポートのAccessでいうところのクエリ?の式がif文で構成されており
IIF(right([フィールド],2)="01",
  "A",
   IIF([フィールド],2)="02",
  "B",
   ・
   ・
   ・
   )
といった感じで17のif文で構成されています。
これをAccessのクエリで表現しようとすると
文字数が多すぎるのかエラーが出てしまいます。

上記の長いif文をAccessで再現する方法はあるでしょうか?
よろしくお願いします。
・ツリー全体表示

【12639】レコードのインポート
質問  Boss  - 14/11/17(月) 7:42 -

引用なし
パスワード
    ACCESS2000を使用しています。

 作成したテーブルにExcelで作成したデータを
インポートしたいのですが、主キー以外の特定のフィールドを
基準にして、同じデータがあった場合はデータを更新し
ない場合は新規レコードとして追加する。
 と言う様なボタンをつくりたいのですが、
さっぱり解かりません。
 マクロでも、VBAでも構わないので
わかる方、教えて下さい。

ACCESSテーブル(CDはオートナンバー型で主キー)
 CD    商品名    価格
 1    靴    1000
 2    傘    2000
 3    パンツ    500


ExcelSheet
    商品名    価格
    ジャケット    4000
    靴    3000
    時計    6000

結果(ACCESSテーブル)
ACCESSテーブル(CDはオートナンバー型で主キー)
 CD    商品名    価格
 1    靴    3000
 2    傘    2000
 3    パンツ    500
 4    ジャケット    4000
 5    時計    6000


 上記の様にExcelのデータをACCESSにインポートする。
 ジャケットと時計は新規レコードとして、追加されるが
 靴は価格のみが変更される。
  つまり、同じ商品名があれば、レコードの更新
     無ければ、新規レコード追加と言う事になります。


 マクロでも、VBAでも構わないので
わかる方、教えて下さい。
 宜しくお願いします。

 
・ツリー全体表示

【12638】Re:2つのテーブルに同時にレコードを追...
お礼  ポインセチア  - 14/11/12(水) 18:29 -

引用なし
パスワード
   返信が遅れて申し訳ありません。先に解決しなければならないことがあって、
そちらを優先に対処していた関係で遅れてしまいました。
とても丁寧でわかりやすい回答を有難うございました。
サブフォームを使ったフォームを作成して対応してみようかと
考えています。ただ、サブフォームを使った入力フォームを
つくるのは初めてなので、思い描いていたようなフォームが
できるかどうか未知数ですけど、頑張ってみます。
かるびの様、ありがとうございました。
・ツリー全体表示

【12637】Re:メインフォームのキーワードでサブフ...
お礼  rinrin  - 14/11/6(木) 20:20 -

引用なし
パスワード
   かるびの さん。。。。。。^^

連絡遅くなっちゃってごめんなさい。。。;;
何とか自分でできちゃいました。。。。。。^^

またわかんないときいろいろ教えてくださいね。。。^^
ありがとうございました。。。。。。^^


▼かるびの さん:
>>でも
>>うまくいきません。。。
>>理由もわかりません。。。
> どううまくいかないのでしょうか。
> どこかの行でエラーになって、コード実行がストップするとか、
>エラーは出ず、予期した抽出結果も得られないとか。
> あるいは、txt会社名検索のAfterUpdateの場合はうまくいくが、
>Cmd解除_Clickの場合は、サブフォームの全レコードが出てくれないとか。
>
> なお、こちらでもサンプルを作って試してみましたが、
>ちゃんと動いてくれます。
・ツリー全体表示

【12636】Re:管理番号を自動生成したい
回答  かるびの  - 14/11/5(水) 0:34 -

引用なし
パスワード
   >管理番号を生成するにはどうすればいいでしょうか?
 まず、第一の方法です。
アクセスでは、00からZZまでの値を格納するテーブルを作るのが
一般的だと思います(工程1−1)。

テーブル名:T部品項目
フィールド:部品項目ID 整数型 主キー
      部品項目  テキスト型

部品項目ID 部品項目
  1     00
  2     01 
  3     02

 100     99
 101     A0

 他方、Aフォームのレコードソースがテーブル「A」だとすると、
「A」テーブルに「部品項目ID」という整数型のフィールドを設けます。
 そして、Aフォームの「工程識別区分」コントロールに「あ」と入力されたら、
「A」テーブルの「部品項目ID」フィールドの最大値を取得し(DMax関数)、
これに1を加えたものを当該レコードの「部品項目ID」フィールドの値とします。
この処理はVBAを使う必要があります(工程1−2)。

 そして、Aフォームのレコードソースは、
「A」テーブルと「T部品項目」とを、「部品項目ID」フィールドで結合させた
クエリとします(工程1−3)。

 
 第二の方法ですが、
 まず、T部品項目を作ります(工程2−1)。
 そして、Aフォームの「工程識別区分」コントロールに「あ」と入力されたら、
Aフォームのレコードソースにおいて
「工程識別区分」フィールドが「あ」であるレコード数を
取得します(DCount関数)。
このレコード数に1加えたものがT部品項目の「部品項目ID」フィールドの値となる、
そういうレコードの「部品項目」フィールドの値を得ます(DLookup関数)。
この「部品項目」フィールドの値をAフォームの「部品項目」テキストボックスに代入します。
この処理もVBA必須です(工程2−2)。


 第三の方法ですが、
Aフォームにおいて前レコードの「部品項目」テキストボックスの値を取得し、
計算により次の部品項目を取得するという方法も考えられます。
 でも、この計算はやっかいです。
 部品項目の一桁目と二桁目を別々に取得したり、
9の次がAになるようにしたり、
Aの次がBになるようにしたり、
Zの次が0になるようにしつつ、下から2桁目を一つ繰り上げたり
する処理を、If文を駆使して考える必要があります。
 なお、Aの次がBになるようにするためには、文字コードを使うことになると思います。


 計算が厄介すぎるため、アクセスでは第三の方法を採ることはよほどのことがない限りないと思いますし、私もこれ以上考えたくありません。
 第一の方法が最もアクセス的だと思います。
・ツリー全体表示

【12635】Re:メインフォームのキーワードでサブフ...
回答  かるびの  - 14/11/4(火) 22:48 -

引用なし
パスワード
   >でも
>うまくいきません。。。
>理由もわかりません。。。
 どううまくいかないのでしょうか。
 どこかの行でエラーになって、コード実行がストップするとか、
エラーは出ず、予期した抽出結果も得られないとか。
 あるいは、txt会社名検索のAfterUpdateの場合はうまくいくが、
Cmd解除_Clickの場合は、サブフォームの全レコードが出てくれないとか。

 なお、こちらでもサンプルを作って試してみましたが、
ちゃんと動いてくれます。
・ツリー全体表示

【12634】メインフォームのキーワードでサブフォー...
質問  rinrin  - 14/10/31(金) 21:04 -

引用なし
パスワード
   メインフォームにtxt会社名検索 コマンドボックスを置いて、
そこにキーワードを入力すると、、、
サブフォームのDBから、該当するレコードを抽出できるようなフォームを作ろうと思ってます。

でも
うまくいきません。。。
理由もわかりません。。。

ご指導願います。。。

Private Sub txt会社名検索_AfterUpdate()
  Call CallPrivate3  
End Sub


Private Sub CallPrivate3()
  Dim StrSQL As String
'サブフォームのレコードセットのSQL文を代入する
  Dim MyName As Variant
'アクティブコントロール名を歳入する変数
  Dim MyVariable As String
'フォーム上で取得した変数名
'DCount関数のレコード数を代入する変数
  
'アクティブなコントロール名を取得する
  MyName = Me.ActiveControl.Name
'初期化
  MyCount = 0
  
'SQL文の条件句の分岐条件をSELECT CASE文で対応して簡素化する
  Select Case MyName

    Case "txt会社名検索"
      MyVariable = " WHERE 取引先企業.会社名 LIKE '*" & [Forms]![MAIN取引先]![txt会社名検索] & "*' ;"
          
    Case "Cmd解除"
      MyVariable = " ;"
      
  End Select
  
'サブフォームのレコードソースに代入するSQL文
  StrSQL = "SELECT * FROM 取引先企業 " & MyVariable
  
'SQL文をサブフォームのレコードソースに代入する
  Me.Sub取引先.Form.RecordSource = StrSQL

'サブフォームを再表示させる処理
  Forms![MAIN取引先]![Sub取引先].Form.Requery
  
End Sub
・ツリー全体表示

【12633】Re:フォームからテーブルのフィールドを...
お礼  kok  - 14/10/31(金) 14:16 -

引用なし
パスワード
   ▼独覚 さん:
>▼kok さん:
>私ならば年度を追加するような定型業務はそれこそVBAでやらせちゃいますが。
>例えばフォームで追加する年度を入力させて顧客マスタをもとに追加クエリで
>まとめて追加とか。
>
>少なくとも新年度を追加する分にはテーブル構造を変更したほうが楽だと思いますが。

ご無沙汰しております。
別件で少し手が回らくなってしまい、返事のお返しが遅くなり申し訳ございません。

前回からいろいろネットで調べた結果、下記のようなVBAを見つけ、実行したらできました。


Private Sub 登録ボタン_Click()
  Dim dbs As DAO.Database
  Dim tdf As DAO.TableDef
  Dim fld As DAO.Field
  Dim prp As DAO.Property
  
  Set dbs = CurrentDb
  Set tdf = dbs.TableDefs!T発送
  Set fld = tdf.CreateField(項目追加, dbBoolean)
  tdf.Fields.Append fld
  Set prp = fld.CreateProperty("displaycontrol", dbInteger, acCheckBox)
  Call fld.Properties.Append(prp)
  
  Set prp = Nothing
  Set fld = Nothing
  Set tdf = Nothing
  Set dbs = Nothing
  
End Sub


ただ、この形で進めていくと別の問題が発生してしまいました。
後日、改めて質問させていただきたいと思います。


遅ればせながらありがとうございました。
・ツリー全体表示

【12632】管理番号を自動生成したい
質問  工場長  - 14/10/29(水) 21:24 -

引用なし
パスワード
   こんばんは

難しい難題に遭遇しまして、解決方法は全くわからなくて、

いま困っています。ご指導をよろしくお願いします。

《難題》

以下のような規則で管理番号を生成するにはどうすればいいでしょうか?


Aフォーム
工程識別区分   部品項目
あ        00
あ        01
あ        02 ←新規で「あ」を入力すると、
            既存のあの部品項目は01のため、
            自動でその次の「02」を生成できるようにしたい。。。

//////////////////////////////////////////////////////////
部品項目の要素と配列順番は以下の通り、
00,01,.....99                →100個
A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,AA.AB....AZ  →36個
B0,B1,B2,B3,B4,B5,B6,B7,B8,B9,BA.BB....AZ  →36個
.
.
.

Z0,Z1,Z2,Z3,Z4,Z5,Z6,Z7,Z8,Z9,ZA.ZB....ZZ  →36個
の順で並べられる要素は1036個
※合計=100+26×36=1036個
//////////////////////////////////////////////////////////
・ツリー全体表示

【12631】Re:ユーザーフォームからレコードの検索...
お礼  rinrin  - 14/10/29(水) 20:53 -

引用なし
パスワード
   連絡遅くなって誠に申し訳ございませんでした。。。

できました。。。。。。。。^^ありがとうございました。。

▼かるびの さん:
>>”DB購買依頼一覧”フォームの”品名”をダブルクリックすると、、、”検索画面”フォームが立ち
>>上げります。。。
>>    Case "txt品名検索"
>>      MyVariable = " WHERE 購買依頼一覧.品名 LIKE '*" & [Forms]![検索画面]![txt品名
>>検索] & "*' ;"
> 「品名」がフィールド名にもテキストボックス名にも使われており、わかりづらいので、
>どちらかの名前を変えた方がいいですよ。
>
>
>>    Case "txt品名検索"
>>      MyVariable = " WHERE 購買依頼一覧.品名 LIKE '*" & [Forms]![検索画面]![txt品名
>>検索] & "*' ;"
> テーブル名が間違っていますね。
>
>
>>  [Forms]![DB購買依頼一覧].Form.RecordSource = StrSQL
> メインフォームからサブフォームのプロパティを設定する場合の構文は、
>   Forms!メインフォーム名!サブフォームコントロール名.Form.プロパティ=値
>です。
> なお、サブフォームコントロールというのは、
>テキストボックスコントロールやチェックボックスコントロールの仲間であり、
>デザインビューでメインフォームのプロパティシートを開いたとき、
>ウィンドウのタイトルに「サブフォーム/サブレポート:××」と出るのがそれです。
>
>
>> [Forms]![DB購買依頼一覧]![品名].Form.Requery
> リクエリは、
>サブフォームコントロールに対して使うか、
>又はフォームに対して使います。
> 前者であれば、
>  Forms!メインフォーム名!サブフォームコントロール名.Requery
>ですし、後者であれば、
>  Forms!メインフォーム名!サブフォームコントロール名.Form.Requery
>です。
> どちらのコードでもサブフォームがリクエリされます。
> なお、これら両コードについて、
>オブジェクトが違うということ以外に、どのような違いがあるのかは、
>私にはわかりません。
・ツリー全体表示

【12630】Re:サブレポートのVBA
お礼  ルクセンブルグ  - 14/10/28(火) 14:26 -

引用なし
パスワード
   返信頂きありがとうございます。

ご指摘頂いたことを踏まえ
いろいろ試してみた結果、VBAのコードをレポートヘッダーに記述したところ
思ったとおりの結果になりました。

質問する前にもっと方法を試すべきでした。
ご回答頂きありがとうございました。
・ツリー全体表示

【12629】Re:ユーザーフォームからレコードの検索...
回答  かるびの  - 14/10/26(日) 23:49 -

引用なし
パスワード
   >”DB購買依頼一覧”フォームの”品名”をダブルクリックすると、、、”検索画面”フォームが立ち
>上げります。。。
>    Case "txt品名検索"
>      MyVariable = " WHERE 購買依頼一覧.品名 LIKE '*" & [Forms]![検索画面]![txt品名
>検索] & "*' ;"
 「品名」がフィールド名にもテキストボックス名にも使われており、わかりづらいので、
どちらかの名前を変えた方がいいですよ。


>    Case "txt品名検索"
>      MyVariable = " WHERE 購買依頼一覧.品名 LIKE '*" & [Forms]![検索画面]![txt品名
>検索] & "*' ;"
 テーブル名が間違っていますね。


>  [Forms]![DB購買依頼一覧].Form.RecordSource = StrSQL
 メインフォームからサブフォームのプロパティを設定する場合の構文は、
   Forms!メインフォーム名!サブフォームコントロール名.Form.プロパティ=値
です。
 なお、サブフォームコントロールというのは、
テキストボックスコントロールやチェックボックスコントロールの仲間であり、
デザインビューでメインフォームのプロパティシートを開いたとき、
ウィンドウのタイトルに「サブフォーム/サブレポート:××」と出るのがそれです。


> [Forms]![DB購買依頼一覧]![品名].Form.Requery
 リクエリは、
サブフォームコントロールに対して使うか、
又はフォームに対して使います。
 前者であれば、
  Forms!メインフォーム名!サブフォームコントロール名.Requery
ですし、後者であれば、
  Forms!メインフォーム名!サブフォームコントロール名.Form.Requery
です。
 どちらのコードでもサブフォームがリクエリされます。
 なお、これら両コードについて、
オブジェクトが違うということ以外に、どのような違いがあるのかは、
私にはわかりません。
・ツリー全体表示

【12628】ユーザーフォームからレコードの検索抽出
質問  rinrin  - 14/10/26(日) 19:46 -

引用なし
パスワード
   ”DB購買依頼一覧”フォームの”品名”をダブルクリックすると、、、”検索画面”フォームが立ち上げります。。。

そのテキストボックスにキーワードを入力すると、抽出データが反映されるというプログラムを構築したいのですが、、、」うまく書けません。。。


Option Compare Database
Option Explicit

Private Sub Form_Open(Cancel As Integer)
  DoCmd.MoveSize 5000, 2500, 8000, 3000
End Sub

Private Sub txt品名検索_AfterUpdate()
    Call CallPrivate3
End Sub

Private Sub CallPrivate3()
  Dim StrSQL As String
'サブフォームのレコードセットのSQL文を代入する
  Dim MyName As Variant
'アクティブコントロール名を歳入する変数
  Dim MyVariable As String
'フォーム上で取得した変数名
'DCount関数のレコード数を代入する変数
  
'アクティブなコントロール名を取得する
  MyName = Me.ActiveControl.Name
'初期化
  MyCount = 0
  
'SQL文の条件句の分岐条件をSELECT CASE文で対応して簡素化する
  Select Case MyName

    Case "txt品名検索"
      MyVariable = " WHERE 購買依頼一覧.品名 LIKE '*" & [Forms]![検索画面]![txt品名検索] & "*' ;"

      
''txt品目検索に該当するレコード数をカウントする
'    MyCount = DCount("品名", "購買依頼一覧", "品名 like '*" & [Forms]![検索画面]![txt品名検索] & "*'")
    
    Case "Cmd解除"
      MyVariable = " ;"
      
'全レコード数をカウントする
    MyCount = DCount("品名", "購買依頼一覧")
  End Select
  
'サブフォームのレコードソースに代入するSQL文
  StrSQL = "SELECT * FROM DB購買依頼一覧 " & MyVariable
  
  
こっからしたがわからない

  
'SQL文をサブフォームのレコードソースに代入する
  [Forms]![DB購買依頼一覧].Form.RecordSource = StrSQL

'サブフォームを再表示させる処理
  [Forms]![DB購買依頼一覧]![品名].Form.Requery
  
'レコードが0件のときと1件以上あるときの条件処理
  If MyCount = 0 toThen
    MsgBox ("該当するレコードはありません")
  Else
    MsgBox ("該当するレコードは、" & MyCount & "件です")
  End If
  
  Me.txt件数.Value = MyCount

End Sub


よろしくお願いします。。。
・ツリー全体表示

【12627】Re:サブレポートのVBA
回答  かるびの  - 14/10/24(金) 23:59 -

引用なし
パスワード
    前回投稿後に気付いたのですが、

>Private Sub レポートフッターセクション
> If フィールドの合計 <> 0 And フィールド2の合計 <> 0 Then
>   Me.Tbox = Round((Me.フィールドの合計 / Me.フィールド2の合計) * 100, 4)
> Else
>   Me.Tbox = "0.00"
> End If
>End Sub

 レポートではMeは使えなかったと思います。
 Meではなく、「Reports!レポート名」とする必要があります。
・ツリー全体表示

【12626】Re:サブレポートのVBA
回答  かるびの  - 14/10/24(金) 23:28 -

引用なし
パスワード
   >レポートヘッダー                 可視:はい
>TextBox[SUM([フィールド])] TextBox[非連結]:名前(Tbox)
>グループヘッダー                 可視:いいえ
>詳細                       可視:いいえ
>[フィールド] [フィールド2]
>グループフッター                 可視:はい
>TextBox[SUM([フィールド])]:名前(フィールドの合計) TextBox[SUM([フィールド2])]:名前(フィールドの合計2)
>レポートフッター                 可視:いいえ

>Private Sub レポートフッターセクション
> If フィールドの合計 <> 0 And フィールド2の合計 <> 0 Then
>   Me.Tbox = Round((Me.フィールドの合計 / Me.フィールド2の合計) * 100, 4)
> Else
>   Me.Tbox = "0.00"
> End If
>End Sub

 やっと出てきましたね。
 これで、そちらの状況の理解が進みました。

 上記のVBAのコードですが、コード自体には特に問題はないと思います。
 強いて挙げれば、テキストボックスの値がNullである場合に備えて、
テキストボックスの値を条件式や計算に使うときは、Nz関数をかませた方がいいと思います。
例えば、
    If Nz(フィールドの合計.Value,0) <> 0 _
    And Nz(フィールド2の合計.Value,0) <> 0 Then

 ところで、上記コードは、どのオブジェクトのどのイベントで実行させているのでしょうか。


 また、そのイベントのイベントプロシージャにエラー処理ルーチンは設けられていますか。
もし設けられているならば、そこにおいてどのような処理をしていますか。

 いずれかのイベントでTboxのVisibleプロパティやEnabledプロパティを操作していませんか。


 なお、こちらでもサンプルを作って、実験してみました。
 結果は、Tboxは、常に表示され、
Tboxには、「Round((Me.フィールドの合計 / Me.フィールド2の合計) * 100, 4)」
の値が表示されました。
 レポートヘッダーのテキストボックスが1回目では表示されないという状況は再現しませんでした。
・ツリー全体表示

【12625】Re:サブレポートのVBA
質問  ルクセンブルグ  - 14/10/24(金) 7:58 -

引用なし
パスワード
   返信ありがとうございます。

私のレポートは
レポートヘッダー                 可視:はい
TextBox[SUM([フィールド])] TextBox[非連結]:名前(Tbox)
グループヘッダー                 可視:いいえ
詳細                       可視:いいえ
[フィールド] [フィールド2]
グループフッター                 可視:はい
TextBox[SUM([フィールド])]:名前(フィールドの合計) TextBox[SUM([フィールド2])]:名前(フィールドの合計2)
レポートフッター                 可視:いいえ

という構成になっています。
このレポートにVBAは

Private Sub レポートフッターセクション
 If フィールドの合計 <> 0 And フィールド2の合計 <> 0 Then
   Me.Tbox = Round((Me.フィールドの合計 / Me.フィールド2の合計) * 100, 4)
 Else
   Me.Tbox = "0.00"
 End If
End Sub

というコードなのですが、ブレークポイントで一つずつ
確認しながらコードを実行したところTboxには代入されていました。

おかしなところがあればご指摘願います。
よろしくお願いします。
・ツリー全体表示

【12624】Re:サブレポートのVBA
回答  かるびの  - 14/10/21(火) 21:51 -

引用なし
パスワード
   >レポートヘッダーのテキストボックスは1回目では表示されないことがあるのでしょうか?
 レポートは、普段あまり使わないので、そんなには詳しくないですが、
レポートを開いたときに、レポートヘッダのテキストボックスが表示されないということは、
VBAで当該テキストボックスのVisibleプロパティを操作していない限り、
ないはずだと思います。

>四則演算の結果を代入しているテキストボックスがレポートヘッダーに
>あるのですが、
 当方もアクセスは2003ですが、
Report_OpenイベントでテキストボックスのValueプロパティに値を設定しようとしたところ、
「実行時エラー 2448 
このオブジェクトに値を代入することはできません。」
とのエラーになり、レポートを開けませんでした。
 テキストボックスを配置先を、レポートヘッダ、ページヘッダ、詳細と変え、
また、テキストボックスを非連結にしたり、連結にしたりしてみましたが、
いずれでも上記エラーとなり、レポートを開けませんでした。
 なので、テキストボックスに四則演算の結果を代入できたということについて、
本当に代入できたのだろうかと思っています。
・ツリー全体表示

34 / 500 ページ ←次へ | 前へ→
ページ:  ┃  記事番号:
1078230
(SS)C-BOARD v3.8 is Free