プロが教える店舗&オフィスのセキュリティ対策術

Access 2007 で入力フォームを作成しています。
フォームにあるコントロール(テキストボックスだったりコンボボックスだったり)をつなげてフォーム上にある非連結のテキストボックスに表示させて、入力確認を一つのセルでできるようにしようとしているのですが、MyVar = TxtFinal_Decision & TxtTagsの行でTypeMismatchのエラーが出ます。いろいろやってみたのですが、MyVar=以降を&でつなぐとうまくいきません。解決法を教えていただけますでしょうか?

以下今のコードです。

Private Sub Review_Click()

Dim MyVar As Variant
Dim TxtFinal_Decision As Variant
Dim TxtTags As Variant

Set TxtFinal_Decision = Me.Final_Decision
Set TxtTags = Me.Tags

MyVar = TxtFinal_Decision & TxtTags

Me.PreCheckBox = MyVar

質問者からの補足コメント

  • つらい・・・

    mike32さま、回答ありがとうございました。
    いろいろ検証してみた結果、普通のComboBoxならValueすらなくともうまくいくのですが、ルックアップ列を参照する複数選択可のComboBoxの場合はTypeMismatchのエラーが出ていることが分かりました。このタイプのComboBoxの場合には&でつなげてもValueをつけてもAs StringでもTypeMismatchエラーが出ます。この場合のトラブルシュートはネットでどこにも見当たりません。さらにmike32さまのお知恵を拝借できれば大変助かります。宜しくお願いします。

      補足日時:2018/01/07 12:58

A 回答 (2件)

No.1です。


複数選択可の場合、まず、Variant型でフィールドを取得します。
何も選択されていない場合は、Nullが入り、
何か選択されている場合は、配列が入ります。

そのため、IF文でIsArray()を使用して、配列かどうかを判定し、配列ではなかった場合は何も選択されていないので、
結合しません。

For文で、配列の最初(0)から配列の最後(選択されている数なので、Ubound()を使用して取得しています)を
MyVarに結合しています。

Private Sub Review_Click()

Dim MyVar As String
Dim TxtFinal_Decision As String
Dim VarTags As Variant
Dim i As Long

TxtFinal_Decision = Me.Final_Decision.Value
VarTags = Me.Tags

MyVar = TxtFinal_Decision

'1つでも選択されている場合
If IsArray(VarTags) Then
'選択されている分だけループ
For i = 0 To UBound(VarTags)
MyVar = MyVar & VarTags(i)
Next
End If

Me.PreCheckBox.Value = MyVar

End Sub
    • good
    • 0

テキストボックスでもコンボボックスでも、Me.フィールド名.ValueでString型かVariant型の変数に


入れ、それを結合することでエラーが解消されます。

Private Sub Review_Click()

Dim MyVar As String
Dim TxtFinal_Decision As String
Dim TxtTags As String

TxtFinal_Decision = Me.Final_Decision.Value
TxtTags = Me.Tags.Value

MyVar = TxtFinal_Decision & TxtTags

Me.PreCheckBox.Value = MyVar

End Sub
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!