「夫を成功」へ導く妻の秘訣 座談会

私の環境はOS:Xp
     ACCESS2000です。

宜しくお願いします。

いきなり質問なのですが、
AccessVBAで編集ロックの切り替えは
  顧客コード.Locked = True
顧客コード.Enabled = False
を使ってきたのですが、可視・不可視の切り替えについての記述が解りません。

良かったら教えてください。

A 回答 (1件)

Visible プロパティを使ってください。



顧客コード.Visible = True
    • good
    • 0
この回答へのお礼

お礼が遅くなり申し訳ありません。

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

お礼日時:2004/12/18 20:01

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

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QAccessのRefresh・Requery・Repaintの違い

Requeryはもう一度ソースレコード(テーブル)を読み込むようです。このとき、テーブルの先頭レコードに移動してしまいます。
Refreshは最新のレコード(テーブル)を再表示するような気がします。レコードの移動は起こらない気がします。
Repaintは、VBAでキャプションなどを変更したとき使っています。
でも、よくわかっていません。
どんなときにどんなメソッドを使えばいいのでしょうか?
詳しい方、よろしくお願いいたします。

Aベストアンサー

たびたびすみません。
調べてたらこんなのがでてきました。
http://www.nurs.or.jp/~ppoy/access/access/acF007.html

参考URL:http://www.nurs.or.jp/~ppoy/access/access/acF007.html

QACCESSで空白のデーターをクエリで判定/識別する方法を教えてくださ

ACCESSで空白のデーターをクエリで判定/識別する方法を教えてください。
EXCELでは空白を""で判定/識別表していますがACCESSではどうなるのでしょうか。

下の例はフィールドに試験番号があればその番号を、空白なら”欠席”と表示しようとしています。
IIf(([試験番号]="空白の場合何を入れる?"),[試験番号],"欠席")

Aベストアンサー

もうひとつの書き方は
式1: IIf([試験番号] Is Not Null,[試験番号],"欠席")
第2、第3引数の、質問の順序にあわせるとこうなる。

Q(ACCESS)条件に応じて、テキストボックスを表示・非表示設定

(ACCESS)条件に応じて、テキストボックスを表示・非表示設定

フォーム上のテキストボックスAを条件に応じて表示・非表示にさせたいです。


条件は、サブフォームのテキストボックスBに「支払」を言う文字があれば、
テキストボックスAが表示され、なければ非表示にする方法が探しています。

わからないなりに調べて、多分以下の文章になると思いますが、「?」の条件式がうまくいきません

Private Sub AA_GotFocus()
If  ????? Then
Me!テキストボックスA.Visible = False
Else
Me!テキストボックスA.Visible = True
End If
End Sub


どなたか教えてください。
宜しくお願い致します。

Aベストアンサー

訂正。(2)のところで、

Private Sub t1_GotFocus()
If Forms!フォーム名!ctlサブフォーム名!テキストボックスB Like "*" & "支払" & "*" Then

になっていましたが、


Private Sub t1_GotFocus()

を、

Private Sub AA_GotFocus()

としてください。書き間違いです。

QアクセスVBAのMe!と[ ]

基本的なことですみません。

アクセスのイベントプロシージャで、Me!ってありますけど、これはどういう意味なんでしょうか?

また、Me!の後に、Me!.~~と書く場合と、Me!.[~~]と書く場合がありますが、どこが違うのでしょうか?

Aベストアンサー

>プロシージャ内で[]を使う場合は、そのフォーム外のオブジェクトを使う場合と考えてよろしいでしょうか?
別のオブジェクトを使う場合だけではありません。
Hensu = Me![Text1]のようにHensuという変数に自身のTest1の値を代入する場合のように。
[]で括られているのがオブジェクト名やコントロール名だよという事。
クエリの抽出条件に存在しない[?]とすれば?というコントロール等が参照できないので?というダイアログが表示されるように?というオブジェクトやコントロールは何?と聞いてくるように。
>フォーム内のオブジェクトの場合はあくまでMe!で良いのでしょうか
Forms.[フォーム名]![コントロール名]やForms![フォーム名]![コントロール名]が構文。
アクティブなフォームが自分自身ならForms![フォーム名]の変わりにMeでもOKですという事。

と言う解釈の方が良いと思います。

Qアクセスでテキストボックスを可視にしたい。

アクセスのレポートのプレビューで見る時、そのレポートの『txt会員種別』のところに「賛助会員」と言う言葉が入っていると、
同じレポート内にあるテキストボックスの『txt御中』(通常は不可視にしてあります)を可視にしたいのですが、どうすればいいのでしょうか?
マクロでするのでしょうか?
初心者なので、あまり高度な事はわかりません。
よろしくお願いします。

Aベストアンサー

レポートのモジュールに以下のコードを貼り付けてください。

Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer)
  If Me.txt会員種別 = "賛助会員" Then
    Me.txt御中.Visible = True
  Else
    Me.txt御中.Visible = False
  End If
End Sub

>「賛助会員」と言う言葉が入っていると、
これが、"賛助会員" という文字列を含む(法人賛助会員とか)という意味なら、
  If Me.txt会員種別 = "賛助会員" Then

  If Me.txt会員種別 Like "*賛助会員*" Then
にしてください。

Qクエリで「データ型が一致しません」と表示される

クエリ1とクエリ2をクエリ3で結合するとクエリ3で「データ型が一致しません」と表示されます。

クエリ1のSQL文
SELECT Trim(Replace([PC管理台帳.使用者氏名]," ","")) AS 式1, PC管理台帳.新PC名, PC管理台帳.部署名, PC管理台帳.マシンベンダ名, PC管理台帳.マシンモデル
FROM PC管理台帳;

クエリ1では[使用者氏名]の苗字と名前のスペースを置換しました。

クエリ2のSQL文
SELECT 職員アカウント.職員番号, Trim(Replace([職員アカウント.氏名]," ","")) AS 式1, 職員アカウント.パスワード, 職員アカウント.メールアドレス
FROM 職員アカウント;

クエリ2では[氏名]の苗字と名前のスペースを置換しました。

クエリ3で[使用者氏名]と[氏名]が一致しているものを抽出したいです。

ちなみにクエリ3のSQL文は
SELECT [クエリ2].[式1], [クエリ2].[職員番号]
FROM クエリ1 INNER JOIN クエリ2 ON [クエリ1].[式1]=[クエリ2].[式1];

これでクエリ3をひらくと
「データ型が一致しません」
と表示されます。

どなたかアドバイスお願いします

クエリ1とクエリ2をクエリ3で結合するとクエリ3で「データ型が一致しません」と表示されます。

クエリ1のSQL文
SELECT Trim(Replace([PC管理台帳.使用者氏名]," ","")) AS 式1, PC管理台帳.新PC名, PC管理台帳.部署名, PC管理台帳.マシンベンダ名, PC管理台帳.マシンモデル
FROM PC管理台帳;

クエリ1では[使用者氏名]の苗字と名前のスペースを置換しました。

クエリ2のSQL文
SELECT 職員アカウント.職員番号, Trim(Replace([職員アカウント.氏名]," ","")) AS 式1, 職員アカウント.パスワー...続きを読む

Aベストアンサー

「データ型が一致しません」のエラーが発生するパターンのひとつに、『結合に使用している演算
フィールド(ご質問の件では式1が該当)の結果がエラーとなるレコードが含まれている』というのが
あります。
クエリ1・クエリ2の式1にはReplace関数が使われていますが、Replace関数の第1引数にNullを
指定すると、エラーになります。
従って、恐らく「PC管理台帳」テーブルの「使用者名」か、「職員アカウント」テーブルの「氏名」の
どちらか(或いは双方)が、空欄(Null)になったままのレコードがある可能性があります。
(なお、Trim関数は、第1引数がNullであってもエラーになりません)

上記推測が当たっていれば、
 a)上記フィールドが空欄になっているレコードをなくす
  (その上で、今後のことを考えると値要求を「はい」に設定しておくことをお勧めします)
 b)式1の関数を下記のように変更する
のどちらかの対応をされれば、ご質問のエラーは解消されるものと思います。


式1の変更で対応する場合は、それぞれ以下のようにしてみてください:
(「[PC管理台帳.使用者名]」と「[職員アカウント.氏名]」は、それぞれ「[PC管理台帳].[使用者名]」と
 「[職員アカウント].[氏名]」の誤記と判断して記述しています)

クエリ1:
Select Replace(Nz([PC管理台帳].[使用者氏名], ""), " ", "", 1, -1, 1) As 式1, PC管理台帳.新PC名, PC管理台帳.部署名, PC管理台帳.マシンベンダ名, PC管理台帳.マシンモデル From PC管理台帳;

クエリ2:
Select 職員アカウント.職員番号, Replace(Nz([職員アカウント].[氏名], ""), " ", "", 1, -1, 1) As 式1, 職員アカウント.パスワード, 職員アカウント.メールアドレス, From 職員アカウント;


Nz関数は、第1引数がNull(=文字列扱い不可の空白)だった場合に、第2引数の値に置換する関数
です。第2引数に「""」(空文字=文字列扱い可の空白)を指定することで、Replace関数がエラーに
なるのを回避しています。
Replace関数の一番最後の引数「1」は、半角/全角を区別させないためのものです。これにより、
スペースは全て削除されるため、Trim関数は不要になります。
(その前の「1, -1」は、それぞれ開始位置と置換する文字数の指定です。この辺りは、詳しくは
 ヘルプを確認して下さい)

「データ型が一致しません」のエラーが発生するパターンのひとつに、『結合に使用している演算
フィールド(ご質問の件では式1が該当)の結果がエラーとなるレコードが含まれている』というのが
あります。
クエリ1・クエリ2の式1にはReplace関数が使われていますが、Replace関数の第1引数にNullを
指定すると、エラーになります。
従って、恐らく「PC管理台帳」テーブルの「使用者名」か、「職員アカウント」テーブルの「氏名」の
どちらか(或いは双方)が、空欄(Null)になったままのレコードがある可能性があ...続きを読む

Qaccessvba 複数条件でFilterをしたい

テーブル1
---------------------------------------
IDフィールド1フィールド2
1あA
2いB
3うC
4えD
5おE
---------------------------------------
を作成し、そのテーブルをもとに、帳票フォームを作成しました。

そのフォームに非連結のテキストボックス
ID_テキスト
フィールド1_テキスト
フィールド2_テキスト
3つを設置しました。

行いたい事をクエリ(SQL文)で例えると、
---------------------------------------
SELECT テーブル1.ID, テーブル1.フィールド1, テーブル1.フィールド2
FROM テーブル1
WHERE (((テーブル1.ID) Like "*" & Forms!テーブル1!ID_テキスト & "*") And ((テーブル1.フィールド1) Like "*" & Forms!テーブル1!フィールド1_テキスト & "*") And ((テーブル1.フィールド2) Like "*" & Forms!テーブル1!フィールド2_テキスト & "*"));
---------------------------------------
なのですが、
これをクエリを作成せずに、VBAで行いたいです。

各非連結のテキストボックスには、
更新後処理:[イベント プロシージャ]
としています。
---------------------------------------
Private Sub ID_テキスト_AfterUpdate()
Me.Form.Filter = _
"ID like '" & "*" & Me.ID_テキスト.Value & "*" & "'"
Me.Form.FilterOn = True
End Sub
---------------------------------------
は、問題なくできるのですが、

Private Sub ID_テキスト_AfterUpdate()
Me.Form.Filter = _
"ID like '" & "*" & Me.ID_テキスト.Value & "*" & "'" and & _
"フィールド1 like '" & "*" & Me.フィールド1_テキスト.Value & "*" & "'"
Me.Form.FilterOn = True
End Sub

にすると、エラーになります。
andの繋げ方が良くないと思うのですが、どうすればいいでしょうか?

最終的には、

Private Sub ID_テキスト_AfterUpdate()
Me.Form.Filter = _
"ID like '" & "*" & Me.ID_テキスト.Value & "*" & "'"
"フィールド1 like '" & "*" & Me.フィールド1_テキスト.Value & "*" & "'"
"フィールド2 like '" & "*" & Me.フィールド2_テキスト.Value & "*" & "'"
Me.Form.FilterOn = True
End Sub

のような感じにしたいです。
ご回答よろしくお願いします。

テーブル1
---------------------------------------
IDフィールド1フィールド2
1あA
2いB
3うC
4えD
5おE
---------------------------------------
を作成し、そのテーブルをもとに、帳票フォームを作成しました。

そのフォームに非連結のテキストボックス
ID_テキスト
フィールド1_テキスト
フィールド2_テキスト
3つを設置しました。

行いたい事をクエリ(SQL文)で例えると、
---------------------------------------
SELECT テーブル1.ID, テーブル1.フィールド1, テーブル1.フィールド2
FROM テーブ...続きを読む

Aベストアンサー

Private Sub ID_テキスト_AfterUpdate()
Me.Form.Filter = _
"ID like '" & "*" & Me.ID_テキスト.Value & "*" & "' and " _
& "フィールド1 like '" & "*" & Me.フィールド1_テキスト.Value & "*" & "'"
Me.Form.FilterOn = True
End Sub
でしょ。

QACCESSで条件によってサブフォームを非表示に

Accessの初心者です。よろしくお願いします。

Accessで住所録を作っています。
メインフォームは主に本人のデータを表示し、サブフォームで家族の
データを表示するようにしました。
その時、家族がいない人についてはサブフォーム自体を表示しないようにしたいと思います。
そこで下記のようにしましたがうまくいきませんでした。

(1)サブフォーム内で家族の人数をカウントする。
(2)このカウント結果をメインフォームに表示する。(メインフォーム にテキストボックスを配置し、コントロールソースをサブフォームの 人数カウントにする。)

    ここまではうまくいきました。
(3)ここでメインフォームのイベントの「開くとき」に以下のように記 述しました。(メインフォームのテキストボックスにカウントという
 名前をつけました。)

Private Sub Form_Open(Cancel As Integer)
If Me!カウント = 0 Then
サブフォーム.Visible = False
Else
サブフォーム.Visible = True
End If
End Sub

この記述の仕方がまずいと思うのですが、どのようにすればよいか
分りません。よろしくお願いします。

Accessの初心者です。よろしくお願いします。

Accessで住所録を作っています。
メインフォームは主に本人のデータを表示し、サブフォームで家族の
データを表示するようにしました。
その時、家族がいない人についてはサブフォーム自体を表示しないようにしたいと思います。
そこで下記のようにしましたがうまくいきませんでした。

(1)サブフォーム内で家族の人数をカウントする。
(2)このカウント結果をメインフォームに表示する。(メインフォーム にテキストボックスを配置し、コントロールソース...続きを読む

Aベストアンサー

ANo.1 では、鈴木さんには家族がいて中村さんにはいませんよね。
このことは、それぞれのレコードが表示された時にしか判りません。
フォームをオープンした時に判るのは最初のレコードだけ。
ですから、<それぞれのレコードが表示された時=Form_Current()>でサブフォームを操作。

2、Form_Current() に記述すればOK。

と補足した理由です。

ところで、サブフォームで計算してメインに表示する必要はないですよね。
こういうやり方は、原則としてしない方がいいです。
カーソルが行き来する羽目になります。
(結果的に、今回は、問題点が表面化していないだけ!)

Private Sub Form_Current()
  Me.家族数 = DBCount("*", "住所録従表", "世帯主_ID=" & Me.ID)
End Sub

これで、事足りる訳ですから・・・。

>最初に私が質問した記述でよいと言うことでしょうか?

If Me!カウント = 0 Then
  サブフォーム.Visible = False
Else
  サブフォーム.Visible = True
End If

と書くも、

サブフォーム.Visible = Me.カウント

と書くも同じ。
ならば、通常は、4行もわざわざ書かないでしょう。
もちろん、スタイルは一貫した方が宜しいのでどちらが正解はないです。

ANo.1 では、鈴木さんには家族がいて中村さんにはいませんよね。
このことは、それぞれのレコードが表示された時にしか判りません。
フォームをオープンした時に判るのは最初のレコードだけ。
ですから、<それぞれのレコードが表示された時=Form_Current()>でサブフォームを操作。

2、Form_Current() に記述すればOK。

と補足した理由です。

ところで、サブフォームで計算してメインに表示する必要はないですよね。
こういうやり方は、原則としてしない方がいいです。
カーソルが行き来する羽目...続きを読む

QACCESS IIF関数 複数条件の設定について

 選択クエリにおいて、あるフィールド「 X」 のレコード数値が
 
  0<[X]<=50   であれば A 
  50<[X]<=100  であれば B 
  100<[X]<=150  であれば C

 と表記させるフィールド「Y」を追加したいと考えています。
 この場合、Yのフィールド設定で指定する数式についてご教授願います。

 一応、
  IIf(0<[X]<=50,"A","") Or IIf(50<[X]<=100,"B","") Or IIf(100<[X]<=150,"C","")

  としましたが、実行すると、Yの列がすべて「-1」と表記されてしまいます。

 何卒よろしくお願いいたします。

Aベストアンサー

a)IIF関数で対応する場合:
 IIF関数の第2引数または第3引数に、IIF関数を入れ子とする必要があります。

式: IIF([X]<=0, "", IIF([X]<=50, "A", IIF([X]<=100, "B", IIF([X]<=150, "C", ""))))


b)別の組込関数を使用する場合:
 IIF関数は二択ですので入れ子にする必要がありますが、Accessのクエリで
 使用できる、似た機能の関数に、Switch関数というものもあります。
 これであれば、入れ子にする必要がなくなります。
 (詳しくは、Accessのヘルプを参照下さい)

式: Switch([X]<=0, "", [X]<=50, "A", [X]<=100, "B", [X]<=150, "C", True, "")


なお、数学あるいは一般生活では確かに「0<[X]<=50」という表記をしますが、
Accessの関数などではこれだと正しい結果が得られません。
正しく認識させるためには、等号・不等号を挟んだ式は、「左辺」と「右辺」の
2つの要素からなる形にする必要があります。
(「0<[X]<=50」は「[X]>0 And [X]>=50」と分割してやる、と)

但し、今回のご質問のような『連続した範囲』であれば、前(左)で既出となる
式の要素で「[X]<=0」が「真(=-1)」とならなかった時点で、「[X]>0」が保証
されますので、上記のように、「[X]>0」を省略して「[X]<=50」だけを条件として
指定すればOk、ということになります。
(「0<[X]<=50」の次が「80<[X]<120」などのように、「50~80」が欠けた
 場合は、省略ができない、と)


【参考】
「0<[X]<=50」は、このままだと「0 < ([X]<=50)」という式と解釈されます。
この場合、「[X]<=50」は、「真(=-1)」か「偽(=0)」か「Null」のいずれかに
なります。
何にせよ、「0<[X]<=50」全体として「正(=-1)」となることがないため、
ご質問の式では、IIF関数は常に第3引数に指定された値「""」を返す
ことになります。

この結果、式全体としては「"" Or "" Or ""」という形となり、「0かNull」
以外なので、「真(=-1)」という値が返された、ということです。

なお、Nullについては、以前、他の方の質問につけた回答も、併せて参考までに:
http://oshiete.goo.ne.jp/qa/4850675.html

a)IIF関数で対応する場合:
 IIF関数の第2引数または第3引数に、IIF関数を入れ子とする必要があります。

式: IIF([X]<=0, "", IIF([X]<=50, "A", IIF([X]<=100, "B", IIF([X]<=150, "C", ""))))


b)別の組込関数を使用する場合:
 IIF関数は二択ですので入れ子にする必要がありますが、Accessのクエリで
 使用できる、似た機能の関数に、Switch関数というものもあります。
 これであれば、入れ子にする必要がなくなります。
 (詳しくは、Accessのヘルプを参照下さい)

式: Switch([X]<=0, "", [X]<=50, "A"...続きを読む

Q【ACCESS】フォーム名/コントロール名を文字列型変数で指定するには

バージョン:Access2002

フォーム「frm01」にテキストボックス「tb01」が作ってある場合、
Forms.frm01.tb01.Value="あいう"
とすれば、フォームもコントロールも指定できるのですが、
Dim strTxt As String
strTxt = "tb01"
Forms.frm01.strTxt.Value="あいう"
だと、文字列型変数"strTxt"が展開されないのでフォーム「frm01」のコントロール「strTxt」を探してしまいエラーになってしまいます。

文字列型変数でフォームやコントロールを指定するには、どのようにすればよいのでしょうか?

Aベストアンサー

フォームの場合
 Forms(strFrm)

フォームのコントロールの場合
 Forms(strFrm).Controls(strTxt)


これでも参照できますが、普通ここまで省略しませんね。
 Forms(strFrm)(strTxt)

あとで見たとき、訳がわからなくなりそう。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング