ネットが遅くてイライラしてない!?

アクセスでクエリの抽出条件にコンボボックスで取得した値を反映させ、テーブルを
作成しエクスポートさせるマクロを組んでいるのですが、
ひとつひとつ実行させるのが手間なので、コンボボックス全ての値を取得させ
クエリの抽出条件にひとつひとつ反映させてテーブル作成・エクスポート
というマクロを組みたいのですが可能でしょうか?

A 回答 (1件)

可能ですよ。


っていう回答だけでもいいんですかね。。。

Dim i As Long
For i = 0 To myComboBox.ListCount -1
MsgBox myComboBox.ItemData(i)
Next

この回答への補足

返信遅くなりました
ご回答ありがとうございます。
参考にしてみます。

補足日時:2009/06/22 01:14
    • good
    • 0

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

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

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

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

QVBA コンボボックスで選んだ値を取得するには

ユーザーフォーム上のコンボボックスから値を選択し、その値を変数として使いたいのですが、うまくいきません。

コンボボックスのコードで
Private Sub ComboBox1_Change()
moji1 = ComboBox1.Text
Range("A1").Value = moji1
のようにすれば、コンボボックスから値を選んだ時点でA1セルにその値をコピーできるのですが、同じユーザーフォーム上にあるコマンドボタンをクリックして実行する「マクロ1」にてこのmoji1という変数を使いたいのです。

マクロ1にて、上記と同じ
Range("A1").Value = moji1
というコードを記述しても、ユーザーフォームで選択した値が消えており、empty値となってしまいます。

原因をご存知の方はお教えください。

Aベストアンサー

原因については下記を参考にしてください。
http://pc.nikkeibp.co.jp/pc21/special/2007_gosa/eg5.shtml

QAccess コンボボックスの値をクリアしたい。

毎度、お世話になります。m( )m
Access2000で質問します。
フォーム上にコンボボックスが2つあります。
例えば1つ目が都道府県、2つ目が市町村のようなコンボで、1つ目の絞り込みの結果を2つ目のコンボにSQLを使って投げています。(例:1つ目-東京都 2つ目-杉並区)その後、1つ目のコンボを神奈川県に変更したときに
2つ目に入っている「杉並区」を削除して空白の状態に戻したいのですが、どのようにVBAを書けばいいのかわかりません。今のままだと神奈川県杉並区といったありえない登録が発生してしまいます。
1つ目のコンボ変更時の処理で2つ目のコンボの値をクリアする方法を教えてください。

よろしくお願いします。

Aベストアンサー

実際に確認するには、もう少し時間がかかるのですが、単なるアドバイスと思ってください。

まず、
Me.市町村コンボ.RowSource = strSQL

市町村コンボ.SetFocus
の間に
市町村コンボ.Requery
を挿入。
これで、矛盾のない表示になるはず。
次に、市町村コンボの表示を空白にするには、
市町村コンボ.Value=""
を挿入。
これでどうでしょう?

QAccessのコンボボックスの”すべて”検索について

Access2000を使用しています。

検索フォームにおいて、コンボボックス内の項目を
選択し、コマンドボタンをクリックすることで検索出来
るように設定しています。

実現したいことはコンボボックス内の項目に"すべて"
という項目を追加してこの"すべて"を選択して検索すると
すべてのデータが表示されるようにしたいのです。

おそらく、関数やVBAを使用して設定するのではない
かと思うのですが設定のやり方が分かりません。
よいアドバイスをお願いします。

Aベストアンサー

確認しとらんのですが、多分あってると思います。

リスト用のテーブルを以下のように変更します。

フィールド1(名前を仮に「表示用」とします)
フィールド2(名前を仮に「検索用」とします)
それぞれテキストです。
値は
表示用,検索用
すべて,*
検索1,検索1
検索2,検索2
………,………

最初の1レコード目がポイント。

で、コンボのプロパティを変更。
データ・連結列:2
書式・列数:2
書式・列幅:10cm;0cm
(書式の2個は変更しなくても大丈夫な気がしますが、念のため)

クエリの条件式を変更。
=Like([from!検索フォーム!cboフィールド名])

これでどうでしょう。

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"...続きを読む

QExcelVBAのユーザーフォームの中に線を引きたい

ユーザーフォームの中に線を引きたいのですが、ツールボックスの中のコントロールには、それらしきものがありません。
ワークシートのように自由に線を引くことは、ユーザーフォームではできないのでしょうか。
できるとしたら、どのようにすればよいのでしょうか。
よろしくお願いします。

Aベストアンサー

水平線であれば、フレームを挿入、文字列なし、高さゼロにしてごまかせますが…。

それ以外の方法ですと、別途ペイントなどで線を引いた画像を作成し、ユーザーフォームの背景に設定するとか。
Accessならば、フォームに線などが引けた気がします。

Qユーザーフォームを表示中にシートの操作をさせるには

ユーザーフォームを表示中にシートの操作をさせる事はできるのでしょうか。
セルへの入力、画面のスクロールなどは、ユーザーフォームからマクロを実行させたり、.hideでユーザーフォームを一時的に隠すなどすればいいのでしょうが、そういう手段をとらないでユーザーフォームを表示中にシートの操作をさせる事はできるのでしょうか。

Aベストアンサー

ユーザフォームの
ShowModalプロパティを
falseにすればよいかと。

Qコンボボックスで選択したものをクリアーしたい(アクセス VBA)

こんばんは。
早速ですが、コンボボックスよりデータをいくつか選択した時、コマンドボタンをクリックしたら、一回で選択したものをクリアーできるように設定しようと思っています。どのようにすればいいのでしょうか?
宜しくお願いします。

Aベストアンサー

VBを使ってクリアしたいときは

Private Sub コマンド_Click()
Me!コンボ0 = Null
End Sub

コマンドボタン名:コマンド
コンボボックス名:コンボ0

こんな感じです。

nullを使わずに
Me!コンボ0 = Clear
でも行けます。

コンボボックスが複数あるときは
Me!コンボ0 = Null
Me!コンボ1 = Null
Me!コンボ2 = Null
と羅列していけばOKかと。

QAccess サブフォームでの選択行の取得

こんにちは。

Access初心者です。

サブフォームでテーブルの項目を表示させていますが、
選択された行を取得する方法はありますか?
サボフォームの下の方に現在選択されているレコード数が表示されてますが、その値でかまいません。

調べているのですが、なかなか検討がつきません。
宜しくお願い致します。

Aベストアンサー

フォーム名がフォーム1、サブフォームコントロールの名前がサブフォーム1だとすると、

Forms!フォーム1!サブフォーム1.Form.CurrentRecord

で取得できます。
(「Forms」と「Form」がありますのでご注意下さい)


また、フォーム1にコードを記述する場合であれば

Me!サブフォーム1.Form.CurrentRecord

サブフォーム1へのコード記述であれば

Me.CurrentRecord

という構文によっても、それぞれ取得が可能です。

Qユーザーフォームに入力したデータを保持する方法

VBA初心者です。いろいろ調べて徐々に進められていますが、、
こちらもなかなか見つからなかったので質問させていただきます。

現在、ユーザーフォームにテキストボックスをいくつか配置し、
さまざまな計算などをさせて、最終的にエクセルシートに反映させる。
といったことが出来るようにプログラムをしています。

ユーザーフォームのテキストボックスに一度入力したものを、
エクセルシートを閉じるまで残すことはできるでしょうか?

一度、×ボタンで閉じてしまうと、次に呼び出したときには初期の状態になってしまいます。

ユーザーフォームに入力し、エクセルシートで確認、
その後 再度ユーザーフォーム呼び出して修正する
といった作業をするために、一度入力したものが消えないようにしたいです。

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

Aベストアンサー

閉じるボタンで閉じるとき、Hideで閉じればいいだけの様な気がします。

UserFormのモジュールに記述します。

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
If CloseMode <> 1 Then
 Cancel = True
 Me.Hide
End If
End Sub

Qサブフォームに対してGoToRecordするには?

フォームに対してRequeryすると先頭のレコードへ移動してしまうので
Requeryする前のレコードの番号を取得して
Requery後にそのレコード番号へ移動したいのですが

Sub test()
i = Forms("Form").Controls("SubForm").Form.CurrentRecord
Forms("Form").Controls("SubForm").Requery
DoCmd.GoToRecord acActiveDataObject, Forms("Form").Controls("SubForm"), acGoTo, i
End Sub

これをすると、実行時エラー2498
指定した式は、いずれかの引数とデータ型が対応していません。
になりますが、
どこがおかしいのでしょうか?

Aベストアンサー

【要旨】
サブフォームのレコード移動では、対象サブフォームは引数で指定するのではなく、
SetFocusメソッドで移動後、引数を省略したGotoRecordを使用します:
  Forms("Form").Controls("SubForm").SetFocus
  DoCmd.GotoRecord , , acGoto, i

但し、「Requery前後でのレコード移動の回避」が目的の場合は、Requeryの
対象を「親フォームまたはサブフォームのFormオブジェクト」ではなく「サブフォーム
コントロール」とすればOkです。
 <現状・例1>
  Forms("Form").SetFocus
  DoCmd.Requery
 <現状・例2>
  Forms("Form").Requery
 <現状・例3>
  Forms("Form").Controls("SubForm").Form.Requery
 <代替策>
  Forms("Form").Controls("SubForm").Requery
  ※「現状・例3」との違い(→途中の「.Form」の有無)に注意。


【詳細】
> 実行時エラー2498

このエラーの直接の原因は、GotoRecordメソッドの第2引数に指定している
「Forms("Form").Controls("Subform")」の部分です。

ここに指定するのはオブジェクト名になりますが、そのデータ型は文字列型です。
一方、「~.Controls(~)」の形で指定した場合、取得できるのは
 a)オブジェクトそのもの
 b)そのオブジェクトのデフォルトプロパティ
のどちらかです(→状況によって変化します)。
(例えばテキストボックスなら、TextBoxオブジェクトまたはValueプロパティの値)

サブフォームのデフォルトプロパティは調べていませんが(汗)、少なくとも文字列
型のプロパティではないため、「型が一致しない」とのエラーとなります。
サブフォームのコントロール名を取得する場合は、
  Forms("Form").Controls("SubForm").Name
というように、Nameプロパティを明示的に指定する必要があります。

ただ、「サブフォームのレコード移動」の場合、明示的に「Name」プロパティを
指定しても解決には至りません(汗)
これは、GotoRecordメソッドの第2引数には、直接開いているオブジェクトの
名前のみが有効なためで、サブフォームを直接的に指定することはできない、
ということです。
(注:Microsoftの資料を探したわけではなく、経験則から記述していますので、
 私の勘違いでしたらご容赦願います(汗))

サブフォームのレコード移動には、冒頭に記述したとおり、「フォーカスの移動」と
「一部の引数を省略したGotoRecord」を使用します:
  Forms("Form").Controls("SubForm").SetFocus
  DoCmd.GotoRecord , , acGoto, i

なお、これも冒頭に書きましたが、サブフォームのRequeryの仕方には幾つか
方法がありますが、Requeryの対象を「コントロールとしてのサブフォーム」にすれば、
レコード移動が発生しませんので、GotoRecord自体が不要になります。
http://www.f3.dion.ne.jp/~element/msaccess/AcTipsFrmHowToRequeryAndReturn.html

【要旨】
サブフォームのレコード移動では、対象サブフォームは引数で指定するのではなく、
SetFocusメソッドで移動後、引数を省略したGotoRecordを使用します:
  Forms("Form").Controls("SubForm").SetFocus
  DoCmd.GotoRecord , , acGoto, i

但し、「Requery前後でのレコード移動の回避」が目的の場合は、Requeryの
対象を「親フォームまたはサブフォームのFormオブジェクト」ではなく「サブフォーム
コントロール」とすればOkです。
 <現状・例1>
  Forms("Form").SetFocus
  DoCmd.Requery
 <現...続きを読む


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

人気Q&Aランキング