Access VBA質問箱 IV

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

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


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

【7670】顧客コードの頭に定型の番号を振る
質問  TB1  - 06/4/10(月) 17:12 -

引用なし
パスワード
   宜しくお願いします。
12桁の顧客コードを作成する際、頭5桁は22220と決まっております。
次に02など各店番が来ます。そして、下5桁が個々人でオリジナルのナンバーになっています。

フォームで新規登録をする際、店番を入れると自動で
2222002
のようになり、下5桁のみの入力でコードを生成するように作りたいのです。

会員情報というテーブルを使って下記のようなコードを書いたのですが、間違ってました。

Private Sub Form_BeforeInsert(Cancel As Integer)
  If DCount("正規会員コード", "会員情報") = 0 Then
  Me![正規会員コード] = "222200000001"
  Else
  me![正規会員コード] ="22220" & format(dcount("店番", "会員情報"), _
  ("会員番号", "会員情報") + 1, "000000000000")
  
  End If
  
End Sub

考え方は、頭に22220という整数をつけ、会員情報テーブルの店コードを拾い、オリジナルの5桁会員番号を入力すると、会員情報テーブルの正規会員コードに12桁のコードが生成される、というつもりでした。

コードは赤くなってました。ろくに知識無いままやっております。
どうか教えてください。
・ツリー全体表示

【7669】Re:サブフォーム日付にフォーカス移動
回答  小僧  - 06/4/10(月) 11:36 -

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

サブフォームのコントロールにフォーカスして
レコードを検索させる、という様なコードになります。


メインフォームの cmb日付 に日付を入れると
サブフォームの日付フィールドを検索する場合、

Private Sub cmb日付_AfterUpdate()
  Me.埋め込み0.SetFocus
  Me.埋め込み0.Form![日付].SetFocus
  DoCmd.FindRecord CDate(Me.cmb日付), , True, , True
End Sub

の様なコードになると思います。

(エラーチェック等の処理は全て省いてあります)
・ツリー全体表示

【7668】Re:特定のファイルを指定して…
発言  TB1  - 06/4/10(月) 9:41 -

引用なし
パスワード
   たぬきさん
報告送れてすみません。
いまテスト中です。結果を後ほど報告します。
宜しくお願いします。
・ツリー全体表示

【7667】Re:サブフォーム日付にフォーカス移動
質問  ユミちゃん  - 06/4/10(月) 2:35 -

引用なし
パスワード
   ユミちゃん:
小僧 さん:
小僧さん、いつもお世話になります。
申し訳ありません。再度のご質問です。
過去ログ[#3649]クロさんの回答を参考にさせていただきましたが、私の未熟
さでいまだ解決できません。
メインフォームで日付入力(例 06/04/15)
サブフォーム
   日付  A施設入場者   B施設入場者  C施設入場者
    1日
    15日  この日付にカーソルを移動
    .
    .
    30日
メインフォームで指定した日付にカーソルを移動したいのですが?
何卒よろしくお願いいたします。
・ツリー全体表示

【7666】Re:データのエクスポート
回答  小僧  - 06/4/7(金) 13:44 -

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

>当方、以下の環境です。
>Windows2000 Professional SP4
>Access 2000

Ac2002より、FileDialogオブジェクトがサポートされて
ダイアログ表示を実装しやすくなったのですが、Ac2000ですと残念ながら使用できません。

そこで下記の様な方法が考えられます。

1.WindowsAPIを使う
 こちらは Windows の機能を Access から呼び出すものです。
 Accessのバージョンに左右されにくいのですが、
 API特有の表現が出てくるので慣れるまでに時間が掛かるかもしれません。

'----------------------------------------------------------------------
Option Compare Database
Option Explicit

Private Declare Function GetSaveFileName Lib "comdlg32.dll" _
  Alias "GetSaveFileNameA" (pOpenfilename As OPENFILENAME) As Long

Private Type OPENFILENAME
  lStructSize    As Long  '構造体のサイズ
  hwndOwner     As Long  '親ウィンドウのハンドル
  hInstance     As Long  'モジュールのインスタンスハンドル
  lpstrFilter    As String 'VBのファイルパターン
  lpstrCustomFilter As String 'カスタムフィルタ
  nMaxCustFilter  As Long  '同バイト数
  nFilterIndex   As Long  'フィルタのインデックス
  lpstrFile     As String 'フルパス名を受取るバッファ
  nMaxFile     As Long  '同バイト数
  lpstrFileTitle  As String 'ファイル名を受取るバッファ
  nMaxFileTitle   As Long  '同バイト数
  lpstrInitialDir  As String '初期ディレクトリ名
  lpstrTitle    As String 'ダイアログボックスのキャプションタイトル
  flags       As Long  '動作を指定する定数の組合せ
  nFileOffset    As Integer 'フルパス中のファイル名までのオフセット
  nFileExtension  As Integer '同 拡張子までのオフセット
  lpstrDefExt    As String 'デフォルトの拡張子
  lCustData     As Long  'フックプロシージャに渡すデータ
  lpfnHook     As Long  'フックプロシージャOFNHookprocへのポインタ
  lpTemplateName  As String 'テンプレートリソース名
End Type

Private Const OFN_HIDEREADONLY = &H4
Private Const OFN_OVERWRITEPROMPT = &H2
Private Const OFN_FILEMUSTEXIST = &H1000
Private Const OFN_PATHMUSTEXIST = &H800
Private Const OFN_EXPLORER = &H80000

'----------------------------------------------------------------------

Private Sub コマンドボタン_Click()
Dim tOpenFileName As OPENFILENAME
Dim lngRet    As Long
Dim strFileName  As String
  
  With tOpenFileName
    .lStructSize = Len(tOpenFileName)
    .hwndOwner = Me.Hwnd
    .lpstrFilter = "Excelファイル(*.xls)" & vbNullChar & "*.xls"
    .lpstrFile = strFileName & String$(256, Chr$(0))
    .nMaxFile = 256
    .lpstrFileTitle = String$(256, Chr$(0))
    .nMaxFileTitle = 256
    .lpstrInitialDir = "C:\"
    .lpstrTitle = "名前を付けて保存"
    .flags = OFN_PATHMUSTEXIST Or OFN_FILEMUSTEXIST Or _
         OFN_HIDEREADONLY Or OFN_OVERWRITEPROMPT
  End With
  
  lngRet = GetSaveFileName(tOpenFileName)
  
  If lngRet = 0 Then
    strFileName = ""
    Exit Sub
  Else
    strFileName = Left$(tOpenFileName.lpstrFile, _
        InStr(tOpenFileName.lpstrFile, vbNullChar) - 1)
  End If
  
  MsgBox strFileName
End Sub
'----------------------------------------------------------------------


Private Sub コマンドボタン_Click()を適宜変更された後
フォームに上記コードを記載して実行されてみて下さい。

後は こちらで得られた strFileName の値と
TransferSpreadsheet メソッドと組み合わせる事になります。


2.WizHookオブジェクトを使う

こちらは非公開オブジェクトであり動作の保証はできませんが、
Ac2000に用意されている機能です。

こちらについてはYU-TANGさんのサイトで詳しく触れられているので
目を通されてみてはいかがでしょうか。

YU-TANG's MS-Access Discoveryさん
[ファイルを開く] ダイアログを表示する方法

http://x7net.com/~access/AcTipsGetFileName.html

(GetFileName メソッドの引数 を変えることにより[ファイルを保存] も行えます。)
・ツリー全体表示

【7665】Re:データのエクスポート
質問  koike  - 06/4/7(金) 11:42 -

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

有難うございます。
ダイアログボックスっていうんですね!!
検索したんですが、なかなかコレというものが見つかりませんでした。
お手数ですが、お教えいただけますでしょうか?
当方、以下の環境です。
Windows2000 Professional SP4
Access 2000

よろしくお願いします。
・ツリー全体表示

【7664】Re:サブフォーム日付にフォーカス移動
お礼  ユミちゃん  - 06/4/7(金) 2:22 -

引用なし
パスワード
   小僧さん。
前回もお世話になりました。
有難うございます。
教えていただきました過去ログで再度チャレンジします。
・ツリー全体表示

【7663】Re:リストボックスでデータを抽出
お礼  chubuchubu E-MAIL  - 06/4/6(木) 22:28 -

引用なし
パスワード
   ▼たぬき さん:
ありがとうございます。
来週、ちょっと試してみます。
でも、意味が分からないのですが、"リスト0"って何ですか?
ここには、リストボックスの名前が入るとか・・・?
あと、"xxx"って言うのと、
"ken"っていわゆる県のことでしょうけれど、
私の作ってある都道府県テーブルには「県」付きでデータがあります。
つまり、IDと北海道、青森県、秋田県・・・という感じなので、都道府県データと言っても一般の文字列と同様です。
このままVBAに入力してもきっとダメなんでしょうね。
もし上手くいかなかった時は、詳細をご説明しますのでよろしくお願いします。
・ツリー全体表示

【7662】Re:リストボックスでデータを抽出
発言  たぬき  - 06/4/6(木) 18:27 -

引用なし
パスワード
   ▼chubuchubu さん:

こんな感じではだめですか?

  Dim ListIdx As Variant
  Dim ken As String
  

  For Each ListIdx In Me.リスト0.ItemsSelected
    ken = ken & Me.リスト0.Column(0, ListIdx) & "','"
  Next ListIdx
  
  ken = Left(ken, Len(ken) - 2)

  xxx.RowSource = "SELECT * FROM T_都道府県 WHERE 都道府県名 IN('" & ken & ");"
  xxx.Requery
・ツリー全体表示

【7661】Re:リストボックスでデータを抽出
お礼  chubuchubu  - 06/4/6(木) 17:48 -

引用なし
パスワード
   やっぱりクエリの抽出の部分に式を入れただけではできないのですね。
VBAは確かに色々と作ったりしてはいるのですが、VBAのコマンドが多すぎて意味が分からないのです。
残念ですが、あきらめるしかなさそうです。
ありがとうございました。
・ツリー全体表示

【7660】Re:データのエクスポート
回答  小僧  - 06/4/6(木) 16:48 -

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

>また、前述したマイドキュメントに自動的に保存されるのは何故なのでしょうか?
>規定の保存先ということでしょうか?

コードの所々に記載されている Excel ファイル名をフルパスにしてみましょう。

>      If Dir("名簿.xls") = "名簿.xls" Then
→      If Dir("C:\名簿.xls") = "名簿.xls" Then

フルパス表記でしたらお好きな所に保存できると思います。
(Dir の返り値だけはファイル名になります)

>出来れば通常使用するような「名前をつけて保存」の時に表示されるような
>ボックスが表示できればと思います。

上記のようなボックスを「ダイアログボックス」と呼びます。
Web検索で調べると色々と出てくると思いますが、
Accessのバージョンによって使用できるもの、使用できないものがあります。


検索しても解らなく、またご質問される際には
OS と Access のバージョンを明記して下さいね。
・ツリー全体表示

【7659】Re:データの並べ替えについて
回答  小僧  - 06/4/6(木) 16:37 -

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

>の「Max(P.FLD1)」の役割はなんでしょうか?

TRANSFORM句 は 集計(グループ化)をして横展開するよう役割があります。
SinjiM さんがご提示された様なデータですと特に問題はないのですが

>Name FLD1 FLD2 FLD3
>--------------------
>AAA   1  2  3



Name FLD1 FLD2 FLD3
--------------------
AAA   1  2  3
AAA   4  5  6


のようなデータである場合、合計を求めるのであれば Sum
最大値ならば Max といった様な集計関数を使う事になります。

SinjiMさんの場合、Nameに対して 1つずつしかデータが存在しない為、
最大値でも最小値でも合計でも全て同じ結果を返すため
Max以外の集計関数でも同じ結果が返ると思います。
・ツリー全体表示

【7658】データのエクスポート
質問  koike  - 06/4/6(木) 16:14 -

引用なし
パスワード
   下記コードにて、データをエクスポートするように設定しているのですが、
自動的に開いているPCのマイドキュメントに保存されます。
ここまではなんとか出来たのですが、
出来れば通常使用するような「名前をつけて保存」の時に表示されるようなボックスが表示できればと思います。
方法はありますでしょうか?
ご教授頂きたく、よろしくお願いします。

また、前述したマイドキュメントに自動的に保存されるのは何故なのでしょうか?規定の保存先ということでしょうか?

Private Sub 保存ボタン_Click()
  yesno = MsgBox("データをエクスポートします。", vbYesNo + vbInformation)
  If yesno = vbYes Then
      If Dir("名簿.xls") = "名簿.xls" Then
        yesno = MsgBox("既に同じ名前のファイルが存在しています。上書きしてもよろしいですか?", vbYesNo + vbExclamation)
          If yesno = vbYes Then
          DoCmd.TransferSpreadsheet acExport, 8, "名簿クエリ", "名簿.xls", False
          End If
      Else
        DoCmd.TransferSpreadsheet acExport, 8, "名簿クエリ", "名簿.xls", False
      End If
  End If
End Sub
・ツリー全体表示

【7657】Re:リストボックスでデータを抽出
回答  まさ7251  - 06/4/6(木) 16:11 -

引用なし
パスワード
   >クエリを開いて、手入力で試したときに、「北海道」だけなら抽出できるのですが、複数入力するとだめでしたので…。
>";"や","等の区切りでもだめでしたので、複数選択した場合はどういう文字配列になっているのかなぁと思っていたのです。

SQL文のWHERE句が、以下のような感じになる必要があります。

項目名 = "北海道" Or 項目名 = "東北"

または、

項目名 In ("北海道","東北")
・ツリー全体表示

【7656】Re:リストボックスでデータを抽出
お礼  chubuchubu  - 06/4/6(木) 13:43 -

引用なし
パスワード
   >複数選択できるようにした場合、これでは出来ません。
>どのような値が入っているか確認してみればわかるでしょう。

やはりそうですか。
クエリを開いて、手入力で試したときに、「北海道」だけなら抽出できるのですが、複数入力するとだめでしたので…。
";"や","等の区切りでもだめでしたので、複数選択した場合はどういう文字配列になっているのかなぁと思っていたのです。
ありがとうございました。
・ツリー全体表示

【7655】Re:サブフォーム日付にフォーカス移動
回答  小僧  - 06/4/6(木) 13:06 -

引用なし
パスワード
   ▼ユミちゃん さん:

>メインフォームで入力日を指定した時にサブフォームの該当日付に
>カーソルを移動して該当日付行の色を変更して人数の入力をしたいのですが、
>カーソルの移動ができません。

過去ログ[#3649]にある、クロさんの回答が参考になりませんでしょうか。
・ツリー全体表示

【7654】Re:リストボックスでデータを抽出
回答  まさ7251  - 06/4/6(木) 12:27 -

引用なし
パスワード
   処理を行うイベントは、適当なイベントでやってみてください。
どのような操作をしたときに、どのようなイベントが動いているのかを
確認すれば、どれが適しているのかはわかるかと思います。

>複数の都道府県を選択して、抽出することは不可能なのでしょうか?
>ちなみに、再クエリでの抽出条件は、
>[forms]![都道府県別検索]![都道府県]
>としてあります。

複数選択できるようにした場合、これでは出来ません。
どのような値が入っているか確認してみればわかるでしょう。

複数選択されている値を取得するには、
ItemsSelected、ItemData辺りを見る必要があります。
この辺を、ヘルプ等で確認して見てください。
VBAは必須になるかと思います。
・ツリー全体表示

【7653】リストボックスでデータを抽出
質問  chubuchubu  - 06/4/6(木) 10:07 -

引用なし
パスワード
   Access超初心者ですのでよろしくお願いします。
Access2000を使っています。
フォームの中に「都道府県」のリストボックスをつくりました。
まず、リストボックスのプロパティの「複数選択」を「拡張」にして、複数の都道府県を選べるようにしました。そして、「更新後の処理」で再クエリを実行させて、ユーザー名をサブフォームに抽出できるようにしたいのですが、抽出ができません。「更新後の処理」でも「クリック時」でも、また「フォーカス喪失時」でも同様です。都道府県をクリックすると、下の「フォームビュー」の部分で「計算しています」というメッセージは出ます。
コンボボックスでは問題なく抽出できるのですが、コンボボックスでは複数の都道府県で選択できないためにリストボックスを使いたいのです。
そもそも、リストボックスではフォームを開いたときに、『リストを表示』という意味になっていて、そこからデータを選択するという意味ではないのでしょうか?
複数の都道府県を選択して、抽出することは不可能なのでしょうか?
ちなみに、再クエリでの抽出条件は、
[forms]![都道府県別検索]![都道府県]
としてあります。
[都道府県別検索]はリストボックスのあるフォーム名です。
また、クエリのみを実行すると「都道府県」聞いてきますが、その時に都道府県名を入力して、OKボタンを押すと正常にユーザー名を抽出することができます。
・ツリー全体表示

【7652】Re:データの並べ替えについて
質問  SinjiM  - 06/4/6(木) 8:36 -

引用なし
パスワード
   小僧さん
 回答をいただきありがとうございます。以下のように
すこしアレンジして、動かしました。
問題ありません。データの持ち方はやはり問題ありますので、見直しします。
TRANSFORMの使い方について、教えていただきたいです。

TRANSFORM Max(P.FLD1) AS FLD1の最大
の「Max(P.FLD1)」の役割はなんでしょうか?

>TRANSFORM Max(P.FLD1) AS FLD1の最大
>SELECT P.code
>FROM [
>SELECT
>テーブル名.code,    
>テーブル名.name & "_" & テーブル名.FLD1 AS FLD0,
  修正⇒テーブル名.name & "_" & "FLD1" AS FLD0,
>テーブル名.FLD1
>FROM テーブル名
>UNION ALL
>SELECT
>テーブル名.code,
>テーブル名.name & "_" & テーブル名.FLD2 AS 式1,
  修正⇒テーブル名.name & "_" & "FLD2" AS FLD0,
>テーブル名.FLD2
>FROM テーブル名
>UNION ALL
>SELECT
>テーブル名.code,
>テーブル名.name & "_" & テーブル名.FLD3 AS 式1,
  修正⇒テーブル名.name & "_" & "FLD3" AS FLD0,
>テーブル名.FLD3
>FROM テーブル名
>]. AS P
>GROUP BY P.code
>PIVOT P.FLD0;

データの持ち方はやはり問題ありますので、見直しします。
・ツリー全体表示

【7651】サブフォーム日付にフォーカス移動
質問  ユミちゃん  - 06/4/6(木) 3:22 -

引用なし
パスワード
   いつもお世話になります。
ある複数施設への入場者数の月単位、日別入場者数の入力処理をしています。
(1)メインフォームで入力日(書式 日付 (S))を入力
(2)サブフォームでテーブルより1ヶ月間の日付、施設名を表形式でクエリーで   表示しています。(日付はmid関数で日の2桁表示)
メインフォームで入力日を指定した時にサブフォームの該当日付にカーソルを移動して該当日付行の色を変更して人数の入力をしたいのですが、カーソルの移動ができません。ACCESS2003を使用しております。
何卒よろしくお願いいたします。
・ツリー全体表示

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