Microsoft Access Club Access超初心者対象Forum Access初級者対象Forum Access初・中級者対象Forum Access VBA Tips Forum DAO、ADO、SQL Forum

     

リストへもどる

投稿記事の一括表示

タイトルCreateControlしたチェックボックスの値を取得したい。
記事No172176
投稿日: 2018/03/23(Fri) 10:35
投稿者ハッカ飴
解決済: ON
OS:win10
Access Version:2003
独学の超初心者です。
VBA内でフォームにチェックボックスを乗せたのですが、チェックの状況を拾えません。

Option Compare Database
Option Explicit

Private Sub chkboxtest()
Dim Form_Kbs As Form
Dim chkb As Control

Set Form_Kbs = CreateForm

Set chkb = CreateControl(Form_Kbs.Name, acCheckBox)

' MsgBox chkb.Value
'実行時エラー'2186':
'このプロパティは、デザインビューでは使用できません。

DoCmd.Restore
DoCmd.OpenForm Form_Kbs.Name

' MsgBox chkb.Value
'実行時エラー'2467':
'アプリケーション定義またはオブジェクト定義のエラーです。

End Sub

フォームをデザインビュー(?)で作ったときは、MsgBox chkb.Valueで0/-1という値が取れましたので、
同様にできるだろうと思いましたが、まずchkb.〜でValueが表示されず、
無理に書いてみると↑マクロ内コメントのエラーが表示されます。
(OpenFormの前後でエラーが変わりました。)

なにか根本的な勘違い/理解不足なだけだとは思うのですが、どうかお知恵をお貸しください。

タイトルRe: CreateControlしたチェックボックスの値を取得したい。
記事No172177
投稿日: 2018/03/23(Fri) 20:17
投稿者hatena
解決済: ON
デザインビューから、OpenForm でフォームビューで開く時に、オプジェクト(フォームやコントロール)は再生成されるので、その後ではオプジェクト変数は無効になります。

名前でアクセスするようにすればどうでしょう。

Private Sub chkboxtest()
    Dim Form_Kbs As Form, Form_Name As String
    Dim chkb As Control, Ctl_Name As String
    
    

    Set Form_Kbs = CreateForm
    Form_Name = Form_Kbs.Name
    
    Set chkb = CreateControl(Form_Name, acCheckBox)
    Ctl_Name = chkb.Name

    DoCmd.Restore
    DoCmd.OpenForm Form_Name

    MsgBox Nz(Forms(Form_Name)(Ctl_Name).Value, "Null")

End Sub

タイトルRe^2: CreateControlしたチェックボックスの値を取得したい。
記事No172179
投稿日: 2018/03/23(Fri) 23:21
投稿者ハッカ飴
解決済: ON
とりあえず成功しました。
理解にはもう少し掛かりそうです。
どこかで読んだ、オブジェクトの型と実体?の違い…かな?と。
もう少し調べつつ進めてみます。
助かりました。ありがとうございます!

タイトルRe^3: CreateControlしたチェックボックスの値を取得したい。
記事No172180
投稿日: 2018/03/24(Sat) 00:45
投稿者hatena
解決済: ON
> 理解にはもう少し掛かりそうです。
> どこかで読んだ、オブジェクトの型と実体?の違い…かな?と。

いえ、違います。

前の回答で書いていますが、
デザインビューから、OpenReport でフォームビューに変更されるときに、
一旦オプジェクト(実体)が破棄されて、再生成されるのが原因です。

OpenReport の前も後もどちらも実体ですが、その実体が異なるということです。

タイトルRe^4: CreateControlしたチェックボックスの値を取得したい。
記事No172189
投稿日: 2018/03/27(Tue) 01:25
投稿者ハッカ飴
解決済: ON
> OpenReport の前も後もどちらも実体ですが、その実体が異なるということです。

きっと何か深いわけがあるに違いない…と、とりあえずそういうモノだ。とおぼえておきます。

ならば、後なら、こんなコトもできるかなと、CheckBox型で変数を作り、open後に、
Dim ChkBox as CheckBox
Set ChkBox = Froms(Form_Name)(ChkBox_Name)
としたら、どちらも同じように値の代入、取得ができました。
ひと手間増えますが、コードがスッキリ、自動的にプロパティとか出てくる機能も反応してくれて、
ちょっとお得な気分になれました(笑)

ちょっと経験値が上がった気がします。ありがとうございました。

- 以下のフォームから自分の投稿記事を修正・削除することができます -
処理 記事No パスワード

ページの先頭へ 前ページへ戻る