Access VBA質問箱 IV

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

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


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

【9612】Re:255フィールを超えるCSVファイルを読み...
発言  小僧  - 07/6/25(月) 23:54 -

引用なし
パスワード
   ▼おすぎ♪ さん:
こんばんは。

>VBA等を利用してでも読む方法はないでしょうか?


こちらの掲示板の過去ログにあるもので応用ができそうですね。

h tp://www.vbalab.net/vbaqa/c-board.cgi?cmd=ntr;tree=5349;id=access
(直リンク禁止の為、補完して下さい。)

> 1) 取り込んでからクエリ等で加工する。
>
> 2) 取り込む際に加工しながら取込む。
>
> 3) 取り込む前に加工し、加工したテキストを読み込む


今回は 1) の方法は使えない為、2) および 3) の方法が使えると思われます。

先の回答では当方は「FileSystemObject」、
hatenaさんは「Openステートメント」を使われてますが
どちらを使っても結果は出るかと思われます。
・ツリー全体表示

【9611】配列変数の引き渡し方
質問  メイ子  - 07/6/25(月) 15:40 -

引用なし
パスワード
   こんにちは。メイ子と申します。
いろいろ探してみましたが、どうしてもわかりませんでしたので、どなたかご教示お願いいたします。

曜日ごとや出席日だけ色を変えたかったので、カレンダーコントロールが使えないため、小さなラベルを7列6段分つなげて6ヶ月分(3ヶ月前〜2ヶ月後)作り、ラベル名をa1〜a42・・・f1〜f42としました。毎月同じフォームを使えるようにラベルの日にちはループでロードしたときにセットされます。
同じフォーム内に日付を入力するテキストボックス1があり、上記ラベルの一つをクリックすると、カレンダーコントロールのように日付が入力されるようにしたいのですが、ラベルには日にちだけ表示しているので、実際の年月日のデータはテキストボックス1に入りません。よって、配列変数に年月日のデータを入れるようにしてみましたが、例えば、ラベル「d14」をクリックしたときにその配列変数の(3,14)番目の値をテキストボックス1に入れられるようにするにはどうしたらよいでしょうか?

Private Sub form_load()

Dim tsuki(5) As String
  tsuki(0) = "a"
  tsuki(1) = "b"
  tsuki(2) = "c"
  tsuki(3) = "d"
  tsuki(4) = "e"
  tsuki(5) = "f"
Dim i As Integer
Dim j As Integer
Dim k As Integer
Dim p As Variant
Dim aaa As String
Dim bbb As String
 
  j = 0
  p = DateSerial(Year(DateAdd("m", -3, Date)), _
    Month(DateAdd("m", -3, Date)), 1)
    
    For j = 0 To 5
      For i = Weekday(Month(DateAdd("m", -3 + j, Date)) & "/" & 1) _
          To Day(DateSerial(Year(DateAdd("m", -2 + j, Date)), _
          Month(DateAdd("m", -2 + j, Date)), 0)) + _
          Weekday(Month(DateAdd("m", -3 + j, Date)) & "/" & 1) _
          - 1
        Me(tsuki(j) & i).Caption = Day(p)
        aaa = aaa & "," & p
        p = p + 1
      Next i
      p = DateSerial(Year(DateAdd("m", -3 + j + 1, Date)), _
        Month(DateAdd("m", -3 + j + 1, Date)), 1)
      bbb = bbb & "," & j
      avarData = Array(Mid(bbb, 2), Mid(aaa, 2))
    Next j

End Sub

↓ここで「イベントプロパティに指定した式読み込み時でエラーが発生しました。プロジージャの宣言がイベントまたはプロシージャの定義と一致していません」
というエラーがでます。
Private Sub d14_Click(ByRef avarData())
 
  Me.ActiveControl.Value = avarData(3, 14)

End Sub
・ツリー全体表示

【9610】255フィールを超えるCSVファイルを読みたい
質問  おすぎ♪  - 07/6/25(月) 15:23 -

引用なし
パスワード
   アクセス2002を使用しているのですが読み込みフィールドの限界が255であるためおよそ300フィールドを持つCSVファイルがあるのですが、何とか
VBA等を利用してでも読む方法はないでしょうか?

テーブルは2つに分かれてもかまいません。
必要処理はクエリーで処理出来ますので

CSVの中身は ”,” と「""」(かんまとダブルこーテーション)で作られています。
・ツリー全体表示

【9609】Re:他のテーブルのフィールドを表示したい
お礼  AT  - 07/6/25(月) 14:07 -

引用なし
パスワード
   こんにちは、ご連絡遅くなってすみません。
小僧さん、ご教授ありがとうございます。

仕様書段階では、まず5個まで行かないから、大丈夫ということでしたが、
運用段階になって、例外として5つ以上になることが発生してしまいました。
現在、ロット5以上はほとんどが例外ということで、頻繁には起こらない
ということで、ロット1〜ロット5で対応しています。
『素材ミル』は【ミルNo】があり、【ワークNo】、【チャージNo】が重複
しても問題ないので、内容をコピーしたレコードも持たせ、
ロット6に相当するロットNoを、【ロット1】に保存するようにしています。

>まず、仕様面の確認なのですが、
>素材ミルテーブル においてロットNoが5つ以上になる事はありえないのでしょうか。
>もし現在は 5つまでで足りるけど、
>今後6以上になる事もあり得るのでしたら
>早めにテーブルの変更をお勧めします。
>後からになると、関連するテーブル、クエリ、モジュール、フォーム等
>テーブルの仕様変更に伴うAccess全体の修正は結構大変ですよ。

ユニオンクエリの方法で試してみます。
いろいろありがとうございました。

>AT さんご提示の様に別テーブル(ワークテーブル)に結果を書いていく方法の他、
>ユニオンクエリでも対応できるかもしれませんね。
>SELECT ロット1 AS ロットNo, ミルNo, 耐力, 引張, 伸び
>FROM 素材ミル
>UNION
>SELECT ロット2 AS ロットNo, ミルNo, 耐力, 引張, 伸び
>FROM 素材ミル
>UNION
>SELECT ロット3 AS ロットNo, ミルNo, 耐力, 引張, 伸び
>FROM 素材ミル
>UNION
>SELECT ロット4 AS ロットNo, ミルNo, 耐力, 引張, 伸び
>FROM 素材ミル
>UNION
>SELECT ロット5 AS ロットNo, ミルNo, 耐力, 引張, 伸び
>FROM 素材ミル;
>
>このクエリをいったん保存して、
>ロット台帳テーブルと結合する方法でもうまく行きそうな気がします。
・ツリー全体表示

【9608】Re:他のテーブルのフィールドを表示したい
回答  小僧  - 07/6/24(日) 12:58 -

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

まず、仕様面の確認なのですが、
素材ミルテーブル においてロットNoが5つ以上になる事はありえないのでしょうか。

もし現在は 5つまでで足りるけど、
今後6以上になる事もあり得るのでしたら
早めにテーブルの変更をお勧めします。
後からになると、関連するテーブル、クエリ、モジュール、フォーム等
テーブルの仕様変更に伴うAccess全体の修正は結構大変ですよ。


またデータの持ち方もあまり良くありませんよね。
仮にこのままのテーブルで行うにしても
ロット1〜5のフィールドにロットNoが見つかれば
ワークNo、チャージNoは引っ張って来れそうですので
ロット台帳テーブルにも持つ必要はないかと思われます。


> 抽出結果が多い場合、すごく時間がかかってしまうような気がします。

現在のテーブル仕様ですと、時間が掛かってしまう事は
避けられない様に思われます。

AT さんご提示の様に別テーブル(ワークテーブル)に結果を書いていく方法の他、
ユニオンクエリでも対応できるかもしれませんね。


SELECT ロット1 AS ロットNo, ミルNo, 耐力, 引張, 伸び
FROM 素材ミル
UNION
SELECT ロット2 AS ロットNo, ミルNo, 耐力, 引張, 伸び
FROM 素材ミル
UNION
SELECT ロット3 AS ロットNo, ミルNo, 耐力, 引張, 伸び
FROM 素材ミル
UNION
SELECT ロット4 AS ロットNo, ミルNo, 耐力, 引張, 伸び
FROM 素材ミル
UNION
SELECT ロット5 AS ロットNo, ミルNo, 耐力, 引張, 伸び
FROM 素材ミル;

このクエリをいったん保存して、
ロット台帳テーブルと結合する方法でもうまく行きそうな気がします。
・ツリー全体表示

【9607】Re:目次作成時にレポートのページ数を取得...
お礼  ゆずぽん  - 07/6/23(土) 0:33 -

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

深夜に早速の回答ありがとうございます
スペースを入れたら上手くできました。

>SQLでは半角空白も大きな意味を持ちますので、
>おろそかにはできません。

VBAで適当に入力してもスペースが自動で開いていたので
あまりスペースを気にしたことがなかったのですが、
スペースって大事なんですね!

>テキスト型の場合は、'' で囲みます。
>" WHERE 商品名 ='" & Me.商品名 & "';"

テキストのフィールドでもうまくいきました!

本当にありがとうございます。
・ツリー全体表示

【9606】Re:目次作成時にレポートのページ数を取得...
回答  hatena  - 07/6/23(土) 0:19 -

引用なし
パスワード
   >CurrentDb.Execute _
>"UPDATE 商品テーブル SET 目次用ページ =" & Me.Page & _
>"WHERE 管理番号 =" & Me.管理番号 & ";"

WHERE の前の半角空白が抜けてます。

" WHERE 管理番号 =" & Me.管理番号 & ";"

SQLでは半角空白も大きな意味を持ちますので、
おろそかにはできません。

>管理番号(商品番号)は私のテーブルにはなかったので新しく作成いたしました。
>ちなみにテキスト型を用いるとこの構文は変わるのでしょうか?
>テキスト型のフィールドを試しに入れてみましたが同じエラーが出ました。

テキスト型の場合は、'' で囲みます。

" WHERE 商品名 ='" & Me.商品名 & "';"
・ツリー全体表示

【9605】Re:目次作成時にレポートのページ数を取得...
質問  ゆずぽん  - 07/6/23(土) 0:04 -

引用なし
パスワード
   ▼hatena さん:
回答ありがとうございます。
>
>If Me.Pages = 0 And FormatCount = 1 Then
>  CurrentDB.Excecute _
>    "UPDATE 商品テーブル SET 目次用ページ = " & Me.Page & _
>    " WHERE 商品コード=" & Me.商品コード & ";"
>End If
>
>これで、レポートをプレビューまたは、印刷すると、商品テーブルに目次用ページが
>書き込まれると思います。

CurrentDb.Execute _
"UPDATE 商品テーブル SET 目次用ページ =" & Me.Page & _
"WHERE 管理番号 =" & Me.管理番号 & ";"

と入力いたしましたがエラーが出ます。

実行時エラー3075
クエリ式'1WHERE 管理番号 = 7343'の構文エラー:演算子がありません

という内容です。
自分なりにエラーの内容を本などで調べてみましたが良く分かりません。
ちなみにExecuteメソッドであってますよね?

>
>商品テーブルの主キーは商品コードで、数値型との前提でコーディングしてます。

管理番号(商品番号)は私のテーブルにはなかったので新しく作成いたしました。
ちなみにテキスト型を用いるとこの構文は変わるのでしょうか?
テキスト型のフィールドを試しに入れてみましたが同じエラーが出ました。

VBAは苦手なもので返信が遅くなりスミマセンでした。
・ツリー全体表示

【9604】Re:大文字半角英数に変換
回答  Gin_II  - 07/6/22(金) 17:17 -

引用なし
パスワード
   >帳票フォーム形式にして一覧にした場合、どのようにしたらいいか分からず
>教えてください。
>
>入力時に大文字半角英数で入力できるように、
>  モード設定する方法はないでしょうか?

同じだと思いますが、できませんか?
ただ、定型入力プロパティと、IME入力モードを組み合わせてもいいかも。

Access2000ヘルプより。

"InputMask/定型入力" プロパティ

A
"A" の位置には、A 〜 Z の半角文字と全角文字または 0 〜 9 の半角数字と全角数字を入力することができます。いずれも入力を省略できません。

>
すべての文字が大文字に変換されます(アルファベットのみ)。
・ツリー全体表示

【9603】他のテーブルのフィールドを表示したい
質問  AT  - 07/6/22(金) 16:46 -

引用なし
パスワード
   お世話になります。
どなたか、教えてください。

抽象的な質問になってしまいますが、よい方法がありましたら教えてください。
『ロット台帳』テーブルと『素材ミル』テーブルがあります。
『ロット台帳』主キー:ロットNo その他フィールド:ワークNo,チャージNo,etc
『素材ミル』主キー:ミルNo その他フィールド:ワークNo,チャージNo,
      ロット1,ロット2,ロット3,ロット4,ロット5,耐力,引張,伸び,etc
『ロット台帳』の検索フォームで、検索条件を入力してもらい、
ロット情報をリスト表示しています。
このリストに【耐力】、【引張】、【伸び】を追加したいです。
『ロット台帳』には、『素材ミル』のミルNoはフィールドにありません、
つながりは、【ワークNo】、【チャージNo】です。
『素材ミル』には、【ロット1】〜【ロット5】に結びついたロットNoが
どこかに入っています。
『素材ミル』には、同一【ワークNo】& 同一【チャージNo】が複数存在します。
『ロット台帳』と『素材ミル』をLEFT JOIN (ワークNo,チャージNo)で結んで、
クエリを作成し、リスト表示すると同一ロットNoが2件表示されてしまいます。
『素材ミル』データから、DISTINCTなどでクエリを一旦つくって、
そのクエリとLEFT JOIN (ワークNo,チャージNo)で結んでやっても同じでした。

質問です
1.まず、ロットNoは1つなので1件のみの表示にしたいです。
2.方法として、新しいテーブルを作成しておき、『ロット台帳』の
  抽出結果データをこの新しいテーブルに格納して、テーブルの1レコード
  ずつ、『素材ミル』の【ワークNo】、【チャージNo】と一致するものを
  検索し、一致したレコードの【ロット1】から【ロット5】までに
  セットしたロットNoがあるかどうかを調べて、あったらその
  耐力】、【引張】、【伸び】をテーブルに追加する。
  という方法を考えたのですが、抽出結果が多い場合、すごく時間が
  かかってしまうような気がします。
  もっとよい方法はないでしょうか。

ながながと書いてしまい申し訳ありませんが、よろしくお願いします。
・ツリー全体表示

【9602】大文字半角英数に変換
質問  初心者  - 07/6/22(金) 13:39 -

引用なし
パスワード
   入力した製品コードを大文字半角英数に変換しているのですが
1件だけの入力画面の時は、フォームのイベントを下記でできたのですが
帳票フォーム形式にして一覧にした場合、どのようにしたらいいか分からず
教えてください。

入力時に大文字半角英数で入力できるように、
  モード設定する方法はないでしょうか?
 

Function 製品文字変換()
  Dim myStrConv As String
  Dim strCon As String
  strCon = Form_製品マスター!製品コード  
  myStrConv = StrConv(strCon, vbUpperCase)
  myStrConv = StrConv(strCon, vbNarrow)
  Form_製品マスター!製品コード = strCon
End Function
・ツリー全体表示

【9601】Re:目次作成時にレポートのページ数を取得...
回答  hatena  - 07/6/22(金) 9:57 -

引用なし
パスワード
   >試した内容。
>商品テーブルにページを保存するフィールド「目次用ページ」を作成
>↓
>レポートの詳細部分に非連結のテキスト1.を作成。
>↓
>ページフッターのページを表示するテキスト2.を作成
>(コントロールソース=[page])
>↓
>テキスト1.のコントロールソースに(=テキスト2.)と入力
>↓
>レポートを開いた状態でテーブルの「目次用ページ」にテキスト1.
>が入力されるよう更新クエリを実行
>
>という手順でやってみました。するとテキスト1.にはきちんとテキスト2.
>と同じページが表示されているのにテーブルの「目次用ページ」は全て
>”1”になってしまいます。試しに更新クエリでテキスト2.を入力しても
>全て”1”でした。

どのイベントで、どのような更新クエリを実行したのでしょうか。

実際に確認はしてませんが、
下記のようにすればうまくいくと思います。

レポート上にコントロールソース =[Pages] のテキストボックスを配置
(可視は「いいえ」でも可)
レポートの詳細セクションのフォーマット時のイベントプロシージャで、

If Me.Pages = 0 And FormatCount = 1 Then
  CurrentDB.Excecute _
    "UPDATE 商品テーブル SET 目次用ページ = " & Me.Page & _
    " WHERE 商品コード=" & Me.商品コード & ";"
End If


これで、レポートをプレビューまたは、印刷すると、商品テーブルに目次用ページが
書き込まれると思います。

商品テーブルの主キーは商品コードで、数値型との前提でコーディングしてます。
・ツリー全体表示

【9600】目次作成時にレポートのページ数を取得し...
質問  ゆずぽん  - 07/6/21(木) 21:02 -

引用なし
パスワード
   教えてください。XPでaccess2000を使用中です。
商品のデータベースで在庫の一覧表(レポート)を作成中です。
一覧表は分類順(菓子・パンなど)の為、カナ順の目次(レポート)
を作成したいのですが、各商品が載っているページの番号が取得できません。
ちなみにレポート1ページ中に表示されるデータ数はページごとに
異なります。

試した内容。
商品テーブルにページを保存するフィールド「目次用ページ」を作成

レポートの詳細部分に非連結のテキスト1.を作成。

ページフッターのページを表示するテキスト2.を作成
(コントロールソース=[page])

テキスト1.のコントロールソースに(=テキスト2.)と入力

レポートを開いた状態でテーブルの「目次用ページ」にテキスト1.
が入力されるよう更新クエリを実行

という手順でやってみました。するとテキスト1.にはきちんとテキスト2.
と同じページが表示されているのにテーブルの「目次用ページ」は全て
”1”になってしまいます。試しに更新クエリでテキスト2.を入力しても
全て”1”でした。
想像ではこれで商品のレコードにページ数が保存され後はクエリで
カナ順に並べ替えれば大成功!と思ったのですが…。

解決策はありますでしょうか?
・ツリー全体表示

【9599】Re:当月の表示
回答  Gin_II  - 07/6/21(木) 15:32 -

引用なし
パスワード
   >アクセスのレポートに当月たとえば”○月度”と表示したい時、当月を自動表示する関数を

テキストボックスのコントロールソースプロパティに、

=Format(Now(),"m月度")
のように入れてみてください。

もしくは、
 コントロールソース:=Now()
 書式:m月度

でもいいと思います。
・ツリー全体表示

【9598】当月の表示
質問  宇野愛子  - 07/6/21(木) 15:13 -

引用なし
パスワード
   アクセスのレポートに当月たとえば”○月度”と表示したい時、当月を自動表示する関数を教えてください。
・ツリー全体表示

【9597】Re:リストボックス中の書式
回答  Gin_II  - 07/6/20(水) 11:47 -

引用なし
パスワード
   > リストボックスの値に金額があるとして、右詰め、桁カンマを入れたい等
> リストボックス中の書式の設定をすることは可能なのでしょうか。
> 可能であれば、どのように設定すれば良いのでしょうか。

書式として設定することはできないと思います。
文字列として編集してやれば、そのように見せることは可能だと思います。

リストボックスの値集合ソースを、クエリなりSQL文にしてください。
で、表示部のフィールドを

Right(Space(5) & Format([フィールド名], "#,##0"), 5)

などのようにすれば、
> 右詰め、桁カンマを
のような状態になると思います。

リストボックスのフォントは、MS 明朝や、MS ゴシックなどの
プロポーショナルフォント以外のものを設定しておいてください。
・ツリー全体表示

【9596】リストボックス中の書式
質問  カダワン  - 07/6/20(水) 11:31 -

引用なし
パスワード
   お願い致します。Access2000です。
リストボックスの値に金額があるとして、右詰め、桁カンマを入れたい等
リストボックス中の書式の設定をすることは可能なのでしょうか。
可能であれば、どのように設定すれば良いのでしょうか。
宜しくご教示お願いします。
・ツリー全体表示

【9595】Re:csvファイルの取込みについて
回答  Gin_II  - 07/6/19(火) 6:55 -

引用なし
パスワード
   >ExcelのCSVファイルを取込みしたいですが、対処方法はまったくわからなくて、
>毎回xlsへ変換してそして手動で取込みをやっています。
>作業効率が悪くて、改善したいです。

テキスト変換アクション(TransferText メソッド)
について、ヘルプ等で確認してみてください。
・ツリー全体表示

【9594】csvファイルの取込みについて
質問  夜勤労働者  - 07/6/19(火) 6:42 -

引用なし
パスワード
   ExcelのCSVファイルを取込みしたいですが、対処方法はまったくわからなくて、
毎回xlsへ変換してそして手動で取込みをやっています。
作業効率が悪くて、改善したいです。
よろしくお願いします。
・ツリー全体表示

【9593】Re:文字列の処理方法
お礼  夜勤労働者  - 07/6/19(火) 6:24 -

引用なし
パスワード
   問題解決!
ありがとうございました。
・ツリー全体表示

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