Access VBA質問箱 IV

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

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


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

【12420】Re:フィールド存在の判断条件を設けるには
回答  hatena  - 13/10/6(日) 8:41 -

引用なし
パスワード
   >sheet1テーブルのフィールド名(検索項目)を削除するため、以下のVBAを動かしたら、一応目的が達成になっていますが、
>ただ削除する前に「検査項目」があれば、削除する。なければ何もしないという判断条件をいれたいのですが、対処方法はわからなくて、教えてください、よろしくお願いします。

どろくさくFieldsコレクションをループして存在を確認するという方法

Function sdf()
  Dim db As DAO.Database
  Dim td As DAO.TableDef
  Dim fld As DAO.Field
  Dim flg As Boolean
  Set db = CurrentDb()
  Set td = db.TableDefs("Sheet1")
  For Each fld In td.Fields
    If fld.Name = "検査項目" Then
      flg = True
      Exit For
    End If
  Next

  If flg Then
    td.Fields.Delete "検査項目"
  Else
    MsgBox "「検査項目」フィールドはありません。"
  End If

End Function

しかし、こういう場合は、エラートラップを追加して対処するのが定石です。

Function sdf()
  On Error GoTo ErrHandler
  
  CurrentDb.TableDefs("Sheet1").Fields.Delete "検査項目"

  Exit Function
ErrHandler:
  Select Case Err.Number
  Case 3265
    MsgBox "「検査項目」フィールドはありません。"
  Case Else
    MsgBox Err.Number & ":" & Err.Description
  End Select
End Function
・ツリー全体表示

【12419】フィールド存在の判断条件を設けるには
質問  IKAI  - 13/10/5(土) 22:15 -

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

sheet1テーブルのフィールド名(検索項目)を削除するため、以下のVBAを動かしたら、一応目的が達成になっていますが、
ただ削除する前に「検査項目」があれば、削除する。なければ何もしないという判断条件をいれたいのですが、対処方法はわからなくて、教えてください、よろしくお願いします。

Function sdf()
CurrentDb().TableDefs("Sheet1").Fields.Delete ("検査項目")

End Function
・ツリー全体表示

【12418】Re:検索フォームを開いた時にサブフォー...
お礼  中村  - 13/10/2(水) 13:03 -

引用なし
パスワード
   ▼hatena さん:
>>検索項目の中には範囲指定(クエリの抽出条件でBetween〜And〜)しているものもあり、
>>また、複数条件で検索する場合もあります。
>>よって今回ご教示頂いた記述では思うように検索結果が得られなくなってしまう場合も出てきてしまいます。
>
>抽出結果が希望と異なるということは、クエリの抽出条件の設定の問題で、今回のコードは関係ないと思います。開いた直後は何も抽出せずに、その後、クエリの抽出条件で抽出するという処理ですので。
>
>>理想としましては、検索条件を各ボックスに入力し、検索ボタンを押してからサブフォームに検索結果が表示されればと思っております。
>
>これに関しては、テキストボックスの更新後処理のイベントプロシージャのコードを、検索ボタンのクリック時に変更すればいいだけですね。

ご回答ありがとうございました。
無事理想通りの形にすることができました。

またの機会が御座いましたら宜しくお願いします。
・ツリー全体表示

【12417】Re:検索フォームを開いた時にサブフォー...
回答  hatena  - 13/10/2(水) 10:36 -

引用なし
パスワード
   >検索項目の中には範囲指定(クエリの抽出条件でBetween〜And〜)しているものもあり、
>また、複数条件で検索する場合もあります。
>よって今回ご教示頂いた記述では思うように検索結果が得られなくなってしまう場合も出てきてしまいます。

抽出結果が希望と異なるということは、クエリの抽出条件の設定の問題で、今回のコードは関係ないと思います。開いた直後は何も抽出せずに、その後、クエリの抽出条件で抽出するという処理ですので。

>理想としましては、検索条件を各ボックスに入力し、検索ボタンを押してからサブフォームに検索結果が表示されればと思っております。

これに関しては、テキストボックスの更新後処理のイベントプロシージャのコードを、検索ボタンのクリック時に変更すればいいだけですね。
・ツリー全体表示

【12416】Re:検索フォームを開いた時にサブフォー...
質問  中村  - 13/10/2(水) 10:10 -

引用なし
パスワード
   ▼hatena さん:
>サブフォームの開くときのイベントプロシージャで下記のように記述しておきます。
>
>Me.Filter = "False"
>Me.FilterOn = True
>
>
>メインフォームの条件を入力する各テキストボックスの更新後処理で、下記のように記述します
>
>With Me.サブフォームコントロール名.Form
>  .Requery
>  If .FilterOn Then
>    .Filter = ""
>    .FilterOn = False
>  End If
>End With

早々のご回答ありがとうございました。
こちらの記述でメインフォームを開いても更新はされなくなりました。
しかし、私の質問の内容に不備があり、再度の質問になってしまいました。

検索項目の中には範囲指定(クエリの抽出条件でBetween〜And〜)しているものもあり、
また、複数条件で検索する場合もあります。
よって今回ご教示頂いた記述では思うように検索結果が得られなくなってしまう場合も出てきてしまいます。

理想としましては、検索条件を各ボックスに入力し、検索ボタンを押してからサブフォームに検索結果が表示されればと思っております。

こちらの不備により度々の質問になってしまい大変恐縮では御座いますが、何卒宜しくお願い致します。
・ツリー全体表示

【12415】Re:検索フォームを開いた時にサブフォー...
回答  hatena  - 13/10/1(火) 21:47 -

引用なし
パスワード
   サブフォームの開くときのイベントプロシージャで下記のように記述しておきます。

Me.Filter = "False"
Me.FilterOn = True


メインフォームの条件を入力する各テキストボックスの更新後処理で、下記のように記述します

With Me.サブフォームコントロール名.Form
  .Requery
  If .FilterOn Then
    .Filter = ""
    .FilterOn = False
  End If
End With
・ツリー全体表示

【12414】検索フォームを開いた時にサブフォームを...
質問  中村  - 13/10/1(火) 18:38 -

引用なし
パスワード
   いつもお世話になっております。

現在検索フォームにサブフォームを設置し、そこに検索結果が表示されるようにしております。
検索項目は複数あり、クエリの抽出条件で以下のように空白の場合は全ての条件で検索されるように設定しています。

[Forms]![検索フォーム]![項目1] Or [Forms]![検索フォーム]![項目1] Is Null
[Forms]![検索フォーム]![項目1] Is Null

この結果、検索フォームを開くと全てのレコードが表示されてしまいます。
検索条件を入力すれば、もちろん条件に引っかかるものだけが表示されます。

今現在はレコード数が少ないので大きな支障はありませんが、
今後、レコード数が増えた時にフォームを開くのが重くなるのではと心配です。

そこで、フォームを開いた時点では更新しない方法がないかと思い質問させていただきました。
色々と検索はしてみたものの、更新されないといった内容はたくさんあるのですが、
あえて更新させないといった内容が見つからず、こちらに書き込みしました。

何卒宜しくお願い致します。
・ツリー全体表示

【12413】Re:sqlビューでコメントアウトをしたい
回答  まさ  - 13/9/27(金) 0:32 -

引用なし
パスワード
   ▼まさはる さん:
>お世話になります.
>accessのsqlを使用し,データの整理をおこなっています.
>制御文が長くなってきたために,コメントを付け加えたいと思っています.
>--や/* */を使いましたが,エラーが帰ってきます.
>
>コメントアウトの方法を教えていただければと思います.
>よろしくお願いいたします.

AccessのSQLビューはコメントアウトできなかったとおもいます。
・ツリー全体表示

【12412】sqlビューでコメントアウトをしたい
発言  まさはる  - 13/9/17(火) 21:42 -

引用なし
パスワード
   お世話になります.
accessのsqlを使用し,データの整理をおこなっています.
制御文が長くなってきたために,コメントを付け加えたいと思っています.
--や/* */を使いましたが,エラーが帰ってきます.

コメントアウトの方法を教えていただければと思います.
よろしくお願いいたします.
・ツリー全体表示

【12411】Re:access DB の共有
お礼  すヾき E-MAIL  - 13/9/2(月) 18:27 -

引用なし
パスワード
   ▼hatena さん:
>とりあえず下記を読んでみてください。
>
>MS-Access2002チョ〜入門部屋>MS-Accessを使いこなすために・・
>17.「mdbファイルを共有する」
>www.mahoutsukaino.com/ac/ac2002/ac2002/kihon2/017.htm

レス有難うございます。早速確認してみます。
・ツリー全体表示

【12410】Re:access DB の共有
回答  hatena  - 13/9/2(月) 17:44 -

引用なし
パスワード
   とりあえず下記を読んでみてください。

MS-Access2002チョ〜入門部屋>MS-Accessを使いこなすために・・
17.「mdbファイルを共有する」
www.mahoutsukaino.com/ac/ac2002/ac2002/kihon2/017.htm
・ツリー全体表示

【12409】access DB の共有
質問  すヾき E-MAIL  - 13/9/2(月) 16:54 -

引用なし
パスワード
   1.最大5人で1つのDBにデータを入力することができますか?
2.できるとしたら設定方法を教えてください
3.ACCSEE2002です。
[本文なし]
・ツリー全体表示

【12408】リンクテーブルについて
質問  ヨシ  - 13/9/1(日) 21:34 -

引用なし
パスワード
   アクセス2010を使用しています。
現在は同じルーター内でリンクテーブルを作成して使用してます。
これを離れて場所で(外からwifiを利用して)やりたいと思ってます。

リボンの中で外部データからリンク元とリンク先の選択の画面で
ファイル名の所をどう入力すればよろしいのでしょうか。
外部のパソコンとは(固定IPアドレスでリモートディスクトップ)で現在しています。
よろしくお願いいたします。
・ツリー全体表示

【12407】Re:AccessVBAからExcelファイルへの貼り...
回答  かるびの  - 13/8/27(火) 1:36 -

引用なし
パスワード
   >クエリの方に問題があるのかもしれないと思いました。
>
>確かめる方法はありますか??


 とりあえず、Set rs = qd.OpenRecordSet() の次の行に
    Msgbox "rsのレコード数:" & rs.RecordCount
と入れて、コードを実行してください。
 レコードセットに格納されているレコード数がメッセージボックスに表示されます。


 もう少し詳しく知るには、上記の
    Msgbox "rsのレコード数:" & rs.RecordCount
を消し、
 Set rs = qd.OpenRecordSet() の次の行に
   With rs
     Do Until .Eof = true
       Debug.Print !フィールド名.Value _
            & "," & !フィールド名.Value _
            & "," & !フィールド名.Value 
       .MoveNext
     loop
   End with
と入力してください。
 なお、「フィールド名」には、「クエリ1」のフィールド名を入れてください。
 次に、VBEのメニューから「表示」→「イミディエイト ウィンドウ」を選択して
イミディエイト・ウィンドウを開いてください。
 そして、コードを実行すると、レコードセットに格納されているレコードが
イミディエイト・ウィンドウに表示されます。


 ただ、抽出条件を入力するテキストボックスを設けたのであれば、
「クエリ1」を変えてしまったらどうでしょうか。
 テキストボックスが配置されたフォームがF検索だとし、
テキストボックスの名前がそれぞれ txtBigin と txtEnd だとして、
クエリ・ビルダにおいて、
「クエリ1」の日付のフィールドの抽出条件欄に
   Forms!F検索!txtBigin.Value Between Forms!F検索!txtEnd.Value
と書いて、「クエリ1」を保存し、
txtBiginとtxtEndに適宜値を入力し、「F抽出」を開いたまま「クエリ1」を開けば、
所要の絞り込みがなされた状態でレコードが表示されるはずです。
 この「クエリ1」のレコードセットを取得して、
CopyFromRecordsetに渡してやればいいです。
 こうすれば、Parameterオブジェクトを使う必要がないですし、
「クエリ1」においてきちんとレコードが抽出されているか確認しやすいと思います。
・ツリー全体表示

【12406】Re:AccessVBAからExcelファイルへの貼り...
質問  nemutai  - 13/8/26(月) 15:16 -

引用なし
パスワード
   ご回答ありがとうございます。
お返事遅くなり申し訳ありません。

 >おそらく原因はこのコードだと思います。
 >>qd.Parameters("[期間_開始日]").Value = #2013/08/01#
 >>qd.Parameters("[期間_終了日]").Value = #2013/08/04#
こちら、都度手打ちで変更していたのですが、
ご指摘のようにフォームを作成し
そちらで入力するようにしてみました。
(紛らわしくてすみません。)

ですが、変わりなくエクセルは空のままでした…。
ブレークポイントを置いて確認してみたところ、
開始日終了日の値の受け渡しはできているようです。


重ねての質問で申し訳ないのですが、
ご回答を見て
クエリの方に問題があるのかもしれないと思いました。

確かめる方法はありますか??
・ツリー全体表示

【12405】Re:AccessVBAからExcelファイルへの貼り...
回答  かるびの  - 13/8/22(木) 2:04 -

引用なし
パスワード
    コードを見る限り、このコードを何月何日に実行しても、
2013年8月1日から2013年8月4日までのデータしか
エクセルには出力されないと思います。
 「クエリ1」がどんなクエリなのかわからないので、決定的なことは言えませんが、
おそらく原因はこのコードだと思います。
>qd.Parameters("[期間_開始日]").Value = #2013/08/01#
>qd.Parameters("[期間_終了日]").Value = #2013/08/04#

 ここで設定している日付を、その都度変えられるようなフォーム設計にする必要が
あると思います。
 具体的には、フォームに非連結のテキストボックスを配置し、
そのテキストボックスのValueプロパティの値を上記の日付に設定するとか。
・ツリー全体表示

【12404】AccessVBAからExcelファイルへの貼り付け...
質問  nemutai  - 13/8/21(水) 15:48 -

引用なし
パスワード
   AccessのVBAで、クエリのデータをファイルへ貼り付けようとしているのですが、
貼り付けが上手くできず困っております。

下記のソースを使って週ごとのデータを出力しようとしています。
ですが、
一部の期間のみ貼り付けができ、他はできない状態です。
エラーもでず、マクロ自体は正常終了しています…。
出力できる週はいつ実行しても動作し、他はいつやっても出来ません。

ちなみに、
クエリを直に動かすときちんとデータが出力されます。
(レコード数は0件ではありませんし、出力される週より少ない場合もあり。)

お心当たりあればアドバイス頂ければ幸いです。


↓↓↓ 以下、VBAのコードです。 ↓↓↓

Private Sub 出力ボタン_Click()

'DBオブジェクト
Dim db As DAO.Database
Set db = CurrentDb
Dim rs As DAO.Recordset
Set rs = Nothing
Dim qd As DAO.QueryDef

'Excelオブジェクト
Dim objEXE As Object
Set objEXE = Excel.Application
Dim objBOOK As Excel.Workbook
Dim objMacroBOOK As Excel.Workbook

'■■■■■■■■■ 処 理 開 始 ■■■■■■■■■

'Excel画面表示
objEXE.Visible = True

'Excelファイルのオープン
Set objBOOK = objEXE.Workbooks.Open("C:\xxx\出力ファイル.xls", 0, False, 1, "******")

'データ取得
Set qd = db.QueryDefs("クエリ1") 'クエリ指定
qd.Parameters("[期間_開始日]").Value = #2013/08/01#
qd.Parameters("[期間_終了日]").Value = #2013/08/04#
Set rs = qd.OpenRecordSet() 'データを抽出

'指定セルに貼り付け
objBOOK.Worksheets("Sheet1").Range("$A$1").CopyFromRecordset rs

'ファイルクローズ(上書き保存)
objBOOK.Close saveChanges:=True

'外部プログラム(Excel)終了
objEXE.Quit

'オブジェクト解放
Set rs = Nothing
Set db = Nothing
Set qd = Nothing

'完了
MsgBox "完了"

End Sub
・ツリー全体表示

【12403】Re:抽出クエリについて
回答  かるびの  - 13/8/17(土) 0:46 -

引用なし
パスワード
    一つのクエリでやるのは無理だと思います。

 まず、会社名別、かつ、製品名別の最大の登録日を求めるクエリ(Q最大日)を
作成します。
 次に、Q最大日とテーブルとを結合させた、
会社名、製品名及びランクの各フィールドを表示するクエリを
作成します。この場合の結合フィールドをどうするかは、考えてみてください。
・ツリー全体表示

【12402】抽出クエリについて
質問  ANUH  - 13/8/15(木) 22:22 -

引用なし
パスワード
   No
登録日
会社名
製品名
ランク

というテーブルがあります。
同じ製品を複数の会社が作製しており、会社ごとの製品のレベルをランク付けしています。ランクは変動をすることがあり、変動した場合は新しい行を追加をしています。

最新の状態のランクをクエリで抽出したいのですが、集計の機能で下記のように設定しましたがうまくいきません。どのようにすれば最新のランクの一覧表ができるのかのご教授をお願い致します。

No:最大
登録日:最大
会社名:グループ化
製品名:グループ化
ランク:最後
・ツリー全体表示

【12401】Re:accessのマクロ
回答  かるびの  - 13/7/23(火) 2:53 -

引用なし
パスワード
   >「ワークシート変換」アクションというのはaccessのマクロコマンドには入っていないのですが、「デ
>ータのインポート/エクスポート」アクションの「ワークシートのインポート/エクスポート」でしょう
>か??
 当方は2003であり、2003には「ワークシート変換」アクションがあります。
 逆に、2003には「データのインポート/エクスポート」アクションとか、
「ワークシートのインポート/エクスポート」アクションはないみたいです。

 なお、MSDNを見てみましたが、2013にも「ワークシート変換」アクションがあるようです
(エイチ ティー ティー ピー コロン スラッシュ スラッシュ msdn.microsoft.com/ja-jp/library/office/ff844793.aspx)。


 2003の「ワークシート変換」アクションというのは、VBAでは
DoCmd オブジェクトの TransferSpreadsheet メソッドです。
 MSDNで「データのインポート/エクスポート」アクションと
「ワークシートのインポート/エクスポート」アクションを調べてみました。
前者がエイチ ティー ティー ピー コロン スラッシュ スラッシュ msdn.microsoft.com/ja-jp/library/office/ff192107.aspx
であり、後者がエイチ ティー ティー ピー コロン スラッシュ スラッシュ msdn.microsoft.com/ja-jp/library/office/ff193927.aspx
です。
 「データのインポート/エクスポート」アクションは、VBAでは、DoCmd オブジェクトの TransferDatabase メソッドであり、
「ワークシートのインポート/エクスポート」アクションは、VBAでは、
DoCmd オブジェクトの TransferSpreadsheet メソッドだそうです。
 したがって、私の言う「ワークシート変換」アクションというのは、
「ワークシートのインポート/エクスポート」アクションと同じものではないかと思います。
・ツリー全体表示

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