Access VBA質問箱 IV

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

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


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

【7838】Re:任意のエクセルファイルのインポート
回答  小僧  - 06/5/19(金) 13:52 -

引用なし
パスワード
   ▼ぷーさん さん:
こんにちは。

Access2002ですと、Officeに付属しているFileDialogオブジェクトを
使用すると簡潔にコードが書けると思われます。

Sub ダイアログを呼び出す()
'要参照設定 Micosoft Office x.x Object Library 10.0以降
Dim FName As Variant

  Const IFName = "C:\"  'デフォルトのパスを設定

  With Application.FileDialog(msoFileDialogFilePicker)
    .AllowMultiSelect = True
    .Title = "インポートするファイルを選択(複数選択可)"
    .Filters.Add "Excel ファイル", "*.xls"
    .InitialFileName = IFName
    
    If .Show = -1 Then
      For Each FName In .SelectedItems
        Call インポート(FName)
      Next
    End If
  End With
End Sub

Function インポート(xName As Variant)
'こちらでTransferSpreadsheetメソッドを発行
  MsgBox xName

End Function


>ファイル名が違うデータを大量にインポートしていきたいのですが。。

後は同じテーブルに取り込むのか、
違うテーブルに取り込むのかが問題になってきますね。

同じテーブルに取り込みたいのでしたら
ちょっと工夫が必要になってくるかもしれません。
・ツリー全体表示

【7837】Re:任意のエクセルファイルのインポート
質問  ぷーさん  - 06/5/19(金) 11:43 -

引用なし
パスワード
   回答ありがとうございます。

OSはwinXP でアクセス2002です。

ファイルダイアログを検索したのですが、

すいませんド素人なものでこれをどのように利用するかわかりにくいです。

アクセスにインポートするコマンドとどのように関連づけるのでしょうか?

「Windows のコモン ファイル ダイアログ ボックスに含まれます」とありましたが、何処にあるのでしょうか。

「MFCですとコモンダイアログのファイル選択が簡単にできます」とありましたので、何か別のアプリケーションを使うようですね。

すいません、仕組みがわからないもので、簡単に流れを教えてもらいますか?
・ツリー全体表示

【7836】Re:フォームのデータを元に検索
質問  ののも  - 06/5/19(金) 10:07 -

引用なし
パスワード
   shin さん  こんにちは。


>>やはり入力データが無いレコードがあるから?でしょうか。
>
>その通りですよ
>素朴な疑問ですが、検索対象以外の物を表示する意味があるのでしょうか?


今のところ、デザインビューでクエリを開いて「備考」に対して抽出条件を
入れて検索をしているという状況です。

<クエリ>
コード 社員名 備考

とあって、「備考」には必要があればデータを入力しています。
入力するデータは全く任意です。

「備考」にデータが未入力のレコードと、既に入力済みのレコードが
混在していては、フォームからの検索実行が動きません。

クエリで直接検索はできるので、フォームからでもできるのでは?
という気がしたのですが・・・。
・ツリー全体表示

【7835】Re:フォームのデータを元に検索
発言  shin  - 06/5/18(木) 20:03 -

引用なし
パスワード
   ▼ののも さん:
こんにちは。


>やはり入力データが無いレコードがあるから?でしょうか。

その通りですよ

素朴な疑問ですが、検索対象以外の物を表示する意味があるのでしょうか?
・ツリー全体表示

【7834】フォームのデータを元に検索
質問  ののも  - 06/5/18(木) 17:15 -

引用なし
パスワード
   こんにちは。
行き詰ってこの掲示板にたどりつきました。

現在、フォームに入力したデータを元に検索ができる仕組みを作っています。

<クエリ>
コード 社員名 備考

上記のフィールドがあるとします。
ただし、備考は入力データがあるのと無いレコードがあります。


抽出条件に
Like "*" & [Forms]![フォーム名]![条件フィールド名] & "*"

と備考に設定すると結果が出ません。
やはり入力データが無いレコードがあるから?でしょうか。

この場合の回避策はあるのでしょうか?
アドバイスお願いします。
・ツリー全体表示

【7833】Re:任意のエクセルファイルのインポート
発言  小僧  - 06/5/18(木) 17:06 -

引用なし
パスワード
   ▼ぷーさん さん:
こんにちは。

>ファイル名が違うデータを大量にインポートしていきたいのですが。。

「ファイルダイアログ」についてWeb検索をされてみてはいかがでしょうか。

ファイルダイアログを使う場合、AccessやOSのバージョンによって
使えるものとそうでないものがあります。

ご使用の OSと Access のバージョンを明記されると
もうちょっと情報が出てくると思いますよ。
・ツリー全体表示

【7832】任意のエクセルファイルのインポート
質問  ぷーさん  - 06/5/18(木) 9:25 -

引用なし
パスワード
   エクセルファイルを、マウスポインターで反転させて選択し、それを読み込んでインポートすることは可能ですか。
インポートの命令文は下記のとおりとなっていますが、
「DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9,
"インポートするアクセスファイル名", "インポート元のエクセルファイル名", True, "シート!"」
その中の"インポート元のエクセルファイル名"の部分をSelectObjectとか、入れてもファイル名としてしか認識しません。
ファイル名が違うデータを大量にインポートしていきたいのですが。。
ご教授お願いします。
・ツリー全体表示

【7831】Re:顧客コードの頭に定型の番号を振る
質問  TB1  - 06/5/17(水) 15:01 -

引用なし
パスワード
   ▼The-Third-Man さん:
ご無沙汰しております。ようやく時間が出来ましたので再開させていただきます。
早速ですが、以下のコードで試してみました。

Private Sub Form_BeforeInsert(Cancel As Integer)
If DCount("正規会員コード", "会員情報", "店番=' " & Me.店番 & "'") = 0 Then
  Me![正規会員コード] = "22220" & Me.店番 & "00001"

  
  Else
   Me![正規会員コード] = Format(DMax("正規会員コード", "会員情報", "店番=' " & Me.店番 & "'") + 1, "000000000000")
  End If
End Sub

店番のコンボボックスを付け、そこで店番(ex.02)を選ぶと下の欄に自動的に会員コードが振られる、という具合に出来ました。

しかし、問題が。
出来上がったコードは10桁。店番が入っていないのです。
ここから先どのようにしたらよいでしょうか。どうかご教授ください。
宜しくお願いします。
・ツリー全体表示

【7830】日付型 の既定値
質問  ぷー  - 06/5/17(水) 14:29 -

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

テーブルやフォーム作成時、日付型の既定値に何も設定せずに作成し
実際に何も入力されずにその項目を日付型として、他のテーブルの日
付型に入れようとすると"null"でエラーとなります。

そこでテーブル作成時に既定値を指定すれば良いのかと思い、いろい
ろ試しましたが、「既定値でエラー 型が一致しません」となります。
日付型の既定値はなにを指定すれば良いのでしょうか?

よろしくお願いいたします。(ACCESS 2000使用)
・ツリー全体表示

【7828】Re:非連結フォームにテーブルの値を表示さ...
お礼  mho  - 06/5/16(火) 23:46 -

引用なし
パスワード
   ▼小僧さん:
こんばんは、

>主キーであるのであれば、
>grage class tuki chk
>1   1   1  yes
>1   1   1  yes
>1   1   1  no
>
>の様な事はないんですよね?
>grade と class と tuki でフィルタを掛けているのですから
>結果は0件ないし1件ではないのでしょうか。

はい、0件ないし1件です。


>ADO に拘るのであれば、
>
>Private Sub y_AfterUpdate()  
>Dim CN As ADODB.Connection
>Dim RS As ADODB.Recordset
>Dim strSQL As String
>  
>  strSQL = "SELECT chk FROM tbl1100_入力check " _
>      & "WHERE grade=" & Forms![α]![a] & " AND " _
>         & "class=" & Forms![α]![b] & " AND " _
>         & "tuki =" & Me.y
>
>  Set CN = CurrentProject.Connection
>  Set RS = CN.Execute(strSQL)
>    Me.cmdCHK = RS![chk]
>  RS.Close
>  Set RS = Nothing
>  CN.Close
>  Set CN = Nothing
>  
>End Sub
>
>
>特に拘らないのであれば
>
>
>Private Sub y_AfterUpdate()
>
>  Me.cmdCHK = DLookup("chk", "tbl1100_入力check", _
>            "grade=" & Forms![α]![a] & " AND " _
>           & "class=" & Forms![α]![b] & " AND " _
>           & "tuki =" & Me.y)
>
>EndSub
>
>こんな感じでしょうかね…
>
>(tbl1100_入力checkに該当データがなかった場合は考慮しておりません)

ADO、DLOOKUPを早速使わせていただき、希望通りのものができました。
大変早い回答で、とてもボランティアとは思えない、親切で満足しています。
ありがとうございました。
・ツリー全体表示

【7827】Re:非連結フォームにテーブルの値を表示さ...
回答  小僧  - 06/5/16(火) 14:30 -

引用なし
パスワード
   ▼mho さん:
こんにちは。

>はい、Loopをかけている対象は、複数レコードあります。
>grade(byt),class(byte),tuki(byte),chk(bln)のフィールド名と型が
>用意してあり、値はgrade が1〜3、classが1〜9、tukiが1〜12で
>3つのキーを主キーとする、

主キーであるのであれば、
grage class tuki chk
1   1   1  yes
1   1   1  yes
1   1   1  no

の様な事はないんですよね?

grade と class と tuki でフィルタを掛けているのですから
結果は0件ないし1件ではないのでしょうか。


ADO に拘るのであれば、

Private Sub y_AfterUpdate()  
Dim CN As ADODB.Connection
Dim RS As ADODB.Recordset
Dim strSQL As String
  
  strSQL = "SELECT chk FROM tbl1100_入力check " _
      & "WHERE grade=" & Forms![α]![a] & " AND " _
         & "class=" & Forms![α]![b] & " AND " _
         & "tuki =" & Me.y

  Set CN = CurrentProject.Connection
  Set RS = CN.Execute(strSQL)
    Me.cmdCHK = RS![chk]
  RS.Close
  Set RS = Nothing
  CN.Close
  Set CN = Nothing
  
End Sub


特に拘らないのであれば


Private Sub y_AfterUpdate()

  Me.cmdCHK = DLookup("chk", "tbl1100_入力check", _
            "grade=" & Forms![α]![a] & " AND " _
           & "class=" & Forms![α]![b] & " AND " _
           & "tuki =" & Me.y)

EndSub

こんな感じでしょうかね…

(tbl1100_入力checkに該当データがなかった場合は考慮しておりません)
・ツリー全体表示

【7824】Re:非連結フォームにテーブルの値を表示さ...
発言  mho  - 06/5/16(火) 0:25 -

引用なし
パスワード
   小僧さん

早速ご回答ありがとうございます。
説明不足でわかりづらく大変申し訳ありません。
もう少し詳しくご説明申し上げます。

>mhoさんが行いたい事が当方には良く解らないのですが、
>
>>  Do Until rs.EOF
>>    
>>    Me.cmdCHK = chk '<==このあたりがよくわかってません。
>>    rs.MoveNext
>>  Loop
>
>Loop をさせている、という事は複数レコードを検索していると思われるのですが、
>対象のチェックボックスは一つなのでしょうか?
>非連結のフォームである事を前提にすると、
>複数のチェックボックスの値を変えるのであれば
>当然複数のチェックボックスの名前が必要になってくると思われるのですが…。

はい、Loopをかけている対象は、複数レコードあります。

tbl1100_入力cheak というテーブルに
grade(byt),class(byte),tuki(byte),chk(bln)のフィールド名と型が用意してあり、値はgrade が1〜3、classが1〜9、tukiが1〜12で3つのキーを主キーとする、複合キーを利用し一意としています。レコード数は増減せず、chkの値だけが変化できるテーブルです。参考までに下記のようなものです。

grade class tuki  chk
 1   1  1  yes/no
 1   2  1  yes/no
 1   3  1  yes/no
 ・   ・  ・  yes/no
 ・   ・  ・  yes/no
 1   9  1  yes/no
 1   1  2  yes/no
 ・   ・  ・  yes/no
 ・   ・  ・  yes/no
 1   9  2  yes/no
 1   9  3  yes/no
 ・   ・  ・  yes/no
 ・   ・  ・  yes/no
 1   9  12  yes/no
 2   1  1  yes/no
 ・   ・  ・  yes/no
 ・   ・  ・  yes/no
 2   9  12  yes/no
 3   1  1  yes/no
 ・   ・  ・  yes/no
 ・   ・  ・  yes/no
 3   9  12  yes/no

このテーブルとは別にAテーブルとBテーブルが用意してあり、2つのテーブルは
code(一意)で関連づけられXクエリが作られています。

Aテーブル
code grade class  num name
1101  1   1   1 aaaa
1102  1   1   2 bbbb
1103  1   1   3 cccc
 ・  ・   ・   ・  ・
 ・  ・   ・   ・  ・
1140  1   1   40
1201  1   2   1
1202  1   2   2
1203  1   2   3
 ・  ・   ・   ・
 ・  ・   ・   ・
1240  1   2   40
1301  1   3   1
 ・  ・   ・   ・
 ・  ・   ・   ・
1940  1   9   40
2101  2   1   1
 ・  ・   ・   ・
 ・  ・   ・   ・
2940  2   9   40
3101  3   1   1
 ・  ・   ・   ・
 ・  ・   ・   ・
3940  3   9   40

Bテーブル
code tuki etc
1001  1
1001  2
1001  3
 ・  ・ 
 ・  ・
1001 12
1002  1
1002  2
 ・  ・ 
 ・  ・
1002 12
1003  1
 ・  ・ 
 ・  ・
3940 12

Xクエリは下記のように構成されています。
code grade        class       tuki        name etc
   非連結αフォーム.a  非連結αフォーム.b 非連結βフォーム.y

非連結αフォームを開き、a、bのコンボボックスからgradeとclassを選択し、コマンドボタンから非連結βフォームに移ります。βフォームではyをコンボボックスから選択しafterupdateをかけて name etc を参照、入力できるようにしてあります。
このとき、βフォームの中にcmdCHKという名前のboolenを1カ所だけ用意しておき、 grade & class & tuki に当たるテーブル(tbl1100_入力check)のyes/noにADO接続でチェックを入れられるようにしてあります。

このあとは最初の質問と同じですが、
次回、非連結フォームを開くとき特定レコード(grade & class & tuki に当たる)のチェックボックス値が表示されるようにしたいのです。

説明や設計があまりうまくなく、わかりづらくなっていますが、この設計で作りたいものですから、ご回答のほどよろしくお願いいたします。
・ツリー全体表示

【7823】Re:非連結フォームにテーブルの値を表示さ...
発言  小僧  - 06/5/15(月) 20:44 -

引用なし
パスワード
   ▼mho さん:
こんばんは。

>非連結フォームを開くとき特定レコードのチェックボックス値が
>表示されるようにしたいのです。

mhoさんが行いたい事が当方には良く解らないのですが、

>  Do Until rs.EOF
>    
>    Me.cmdCHK = chk '<==このあたりがよくわかってません。
>    rs.MoveNext
>  Loop

Loop をさせている、という事は複数レコードを検索していると思われるのですが、
対象のチェックボックスは一つなのでしょうか?

非連結のフォームである事を前提にすると、
複数のチェックボックスの値を変えるのであれば
当然複数のチェックボックスの名前が必要になってくると思われるのですが…。
・ツリー全体表示

【7822】Re:フィルター検索
回答  小僧  - 06/5/15(月) 20:32 -

引用なし
パスワード
   ▼スターフルーツ さん:
こんばんは。

スターフルーツさんの仕様が当方にはちょっと解りにくいので
まったく見当違いでしたら申し訳ありません。

まず、

>Q1.検索ボタンをクリックしたとき、確認msgが言葉にならず、「色名='5' AND   一般='1' AND特別='1'というようにID!?数字がでてしまう。

各コンボボックスの値集合タイプ、値集合ソースはどのようになっていますか?
ご提示された条件ですと、

cmb種類
値集合タイプ:値リスト
値集合ソース:一般;特別

cmb色名
値集合タイプ:テーブル/クエリ
値集合ソース:SELECT T色サンプル価格.色名 FROM T色サンプル価格;

で良さそうな気がするのですがいかがでしょうか。


>Q2.txt金額のコントロールソースにはなんと入れればいいですか?   
>   単純に価格X個数ですが、価格は「種類」で選択した一般又は特別のどちら
>   かになるのでその都度条件にあった価格をもっていきたいのですが、わかり
>   ません。


コントロールソースに指定するのではなく、
コマンドボタンを押した際に、テキストボックスに値が入るので宜しければ

Private Sub cmd検索_Click()
  Me.txt金額 = _
  DLookup(Me.cmb種類, "T色サンプル価格", "色名='" & Me.cmb色名 & "'") * Me.txt個数
  
End Sub

のようなやり方もあります。


>Q3.上記の文では、「Me.Filter = strfil」部分でデバッグとなってしまいま    す。

フィルタをかける必要があるのかどうか、という問題をおいておくとして、
上記のテーブル型式では「一般」「特別」でフィルタは掛けれないのではないでしょうか。


>息づまってしまったので、どなたか教えて下さい。

行き詰ったのでしたらご協力もできますが、
息が詰まったら死んでしまいますよ…。
・ツリー全体表示

【7821】非連結フォームにテーブルの値を表示させ...
質問  mho  - 06/5/15(月) 16:21 -

引用なし
パスワード
   初めて投稿します。よろしくお願いします。

さて、表題の件について質問します。
非連結フォーム(frm1000_入力chk)にチェックボックスがあり、ADO接続でチェックを入れることにより、テーブル(tbl1100_入力check)にyes/noが入ります。
次回、非連結フォームを開くとき特定レコードのチェックボックス値が表示されるようにしたいのです。


テーブル名 tbl1100_入力check
 フィールド名 grade(byt),class(byte),tuki(byte),chk(bln) 
フォーム名 frm1000_入力(tbl1100_入力chkとは非連結)

'--------------------------------------------------ここから
Private Sub 月入力_AfterUpdate()
  DoCmd.Requery

  Dim db As New ADODB.Connection
  Dim rs As New ADODB.Recordset
  Dim bytRet1 As Byte
  Dim bytRet2 As Byte
  Dim bytRet3 As Byte
  Dim blnRet4 As Boolean
  
  Set db = CurrentProject.AccessConnection
  rs.Open "tbl1100_入力check", db, adOpenKeyset, adLockOptimistic
   
  bytRet1 = Forms!frm0000_menu!年入力 '別フォームで入力済みです
  bytRet2 = Forms!frm0000_menu!組入力 '別フォームで入力済みです
  bytRet3 = Forms!frm1000_入力!月入力 'frm1000_入力で入力します
  
  rs.Filter = "(Grade = " & bytRet1 & ") And (Class = " & bytRet2 & ") And (tuki = " & bytRet3 & ")"
  
  Do Until rs.EOF
    
    Me.cmdCHK = chk '<==このあたりがよくわかってません。
    rs.MoveNext
  Loop
  
  rs.Close: Set rs = Nothing
  db.Close: Set db = Nothing

End Sub
'--------------------------------------------------ここまで
・ツリー全体表示

【7820】フィルター検索
質問  スターフルーツ  - 06/5/15(月) 14:35 -

引用なし
パスワード
   こんにちは。
息づまってしまったので、どなたか教えて下さい。

■テーブルの内容
テーブル名・・・T色サンプル価格
項目(フィールド)名・・・1.ID(オートナンバー型)
             2.色名
             3.一般(通貨型) 
             4.特別(通貨型)

■フォーム(帳票形式)の内容
コンボボックス名・・・1.種類(一般or特別)
           2.色名           
テキストボックス名・・・1.個数
            2.金額
コマンドボックス・・・1.検索

名前は上記名前の前にそれぞれコンボならcmb、テキストならtxtと
つけています。

と このような、テーブル、フォームを作っています。
フォームで、種類(一般or特別)、色名を選択し、個数を手入力して検索ボタンをクリックするとそれに合致した価格X個数が金額に表示するようにしたいんです。
自分なりに作成したのが下記になります。


Private Sub 検索_Click()
Dim strfil As String
  strfil = "色名 = '" & Me.cmb色名 & "' AND " _
     & "一般 = '" & Me.cmb種類 & "' AND " _
     & "特別 = '" & Me.cmb種類 & "'"
  Me.Filter = strfil
    MsgBox strfil
  Me.FilterOn = True

End Sub

としましたが、次のような問題点&行き詰っています。

Q1.検索ボタンをクリックしたとき、確認msgが言葉にならず、「色名='5' AND   一般='1' AND特別='1'というようにID!?数字がでてしまう。

Q2.txt金額のコントロールソースにはなんと入れればいいですか?   
   単純に価格X個数ですが、価格は「種類」で選択した一般又は特別のどちら   かになるのでその都度条件にあった価格をもっていきたいのですが、わかり   ません。

Q3.上記の文では、「Me.Filter = strfil」部分でデバッグとなってしまいま    す。

わかりにくい説明かも知れませんが、ヨロシクお願いします。
・ツリー全体表示

【7819】Re:初めてのお題で・・・
お礼  新人サラリーマン  - 06/5/15(月) 10:34 -

引用なし
パスワード
   返事が遅くなりました。
ランタイム版のメニューは設定でカバーできる様には
なってませんでした。
結局、他のサイトに掲載されていた
メニュー作成方法で、独自のメニューを追加でOKを
得る事ができました。
色々とありがとうございます。
・ツリー全体表示

【7818】Re:Excelを操作したい
回答  よろずや  - 06/5/14(日) 7:58 -

引用なし
パスワード
   Excel.Application
で検索すればいくらでも見つかりますよ。
・ツリー全体表示

【7817】Excelを操作したい
質問  nao  - 06/5/13(土) 15:46 -

引用なし
パスワード
   Accessで、Excelを操作したいのですが、
ExcelオブジェクトをSetする方法を教えていただけないでしょうか・・・
オブジェクトを登録するとかそういった設定が必要なのでしょうか?

Set Ex = ・・・
と出来れば、その先へ進めそうなのです。
よろしくお願いいたします。
・ツリー全体表示

【7816】Re:クエリの抽出結果の件数を取得したい
お礼  MIKA  - 06/5/12(金) 22:20 -

引用なし
パスワード
   ▼小僧 さん:
ご指導ありがとうございます。
Dcountで試してみたらちゃんと件数を抽出出来ました。
確かにテーブル作成クエリは動作が遅くなるので気になっていました。
親切にご指導いただいて有難うございました。
とても勉強になりました。これからも頑張ります!


>▼MIKAさん、まさ7251 さん:

>おはようございます。
>
>
>>> テーブルのレコードをカウントするとうまくいくのですが、
>>> クエリだと件数がうまくカウント出来ませんでした。
>
>クエリの内容が公開されてないので断言はできませんが、
>通常ならクエリだとできない、という事はないと思いますよ。
>
>
>>>「Count」を使うと抽出出来るのは
>
>YU-TANG さんも まさ7251 さんも
>「Count」でなく、「DCount」と仰っているのには気づいておられますか?
>
>MsgBox DCount("*","入出金")
>
>の1行で結果を出せる(はず)なのに
>何故わざわざレコードセットを取得しているのでしょうか?
>という話の流れだと思うのですがいかがでしょう。
>
>
>>> テーブル作成クエリで抽出した後でしたらちゃんと件数を抽出出来ましたので、
>>> その方法にしようと思います。
>
>何回もテーブルを作成したり消去したりするとMDBのファイル量が肥大してしまいます。
>最適化すると戻る場合もありますが、ゴミが残ってしまう場合もあります。
>
>今後も長く使っていこうと思われているシステムでしたら
>できる限り余計なオブジェクトは作成しない方が良いと思われます。
・ツリー全体表示

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