Access VBA質問箱 IV

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

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


1 / 500 ページ 前へ→

【13141】Re:テキストボックス使い方のお尋ね
回答[NEW]  亀マスター  - 17/4/25(火) 23:43 -

引用なし
パスワード
   フォーム上のテキストボックスなどに表示したいということでしょうか?
例示されたSub AB() がテキストボックスを配置したフォームに書かれたコードなら
  テキストボックス名.Value = ABCD
で表示されるはずです。

Sub AB() が他のフォームや標準モジュールに書かれたコードなら、
  Forms("フォーム名").テキストボックス名.Value = ABCD
で表示されるはずです。

テキストボックスの内容を指定するのが テキストボックス名.Value ですが、
テキストボックスではなくラベルであれば、ラベル名.Caption になります。
・ツリー全体表示

【13140】テキストボックス使い方のお尋ね
質問[NEW]  よろしくお願いいたします  - 17/4/25(火) 18:05 -

引用なし
パスワード
   Accessの勉強中です。

以下のことを実現したくて、試してみましたが、結果がでなくて、
ご教授ください。

実現したいのは、Cドライブに保存されているファイルのタイムスタンプ情報を
フォームに表示されるようにしたいこと。

以下ののVBAを使って、Access上では、成功しています。
しかし、その結果をどうやって、フォームに表示させるかは、わからなくて、
困っています。
-------------------------------------------------------------
Sub AB()
ABCD = FileDateTime("C:\ツール\元データ.CSV")
Debug.Print ABCD
End Sub
-------------------------------------------------------------
・ツリー全体表示

【13139】Re:A4縦のレポートに折り目をつけたい
お礼  オスマン  - 17/4/10(月) 17:02 -

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

解決することができました。
・ツリー全体表示

【13138】Re:A4縦のレポートに折り目をつけたい
回答  hatena  - 17/4/7(金) 13:11 -

引用なし
パスワード
   >Access2003のレポートで
>A4の縦サイズの帳票があり3つ折りの折り目を表示したいと思います。
>具体的には長さ数ミリの直線を高さ99mmと198mmのところに表示したい。

レポートのページフォーマット時のイベントで
Lineメソッドで直線を描画すればいいでしょう。


Private Sub Report_Page()
  Dim lTop As Long
  Dim lWidth As Long
  
  lTop = CLng(99 - 15) * 56.7 '上余白15mmの場合
  lWidth = 210 * 56.7
  Me.Line (0, lTop)-(lWidth, lTop)
  
  lTop = lTop + 99 * 56.7
  Me.Line (0, lTop)-(lWidth, lTop)

End Sub
・ツリー全体表示

【13137】A4縦のレポートに折り目をつけたい
質問  オスマン  - 17/4/5(水) 11:34 -

引用なし
パスワード
   お世話になります。

Access2003のレポートで
A4の縦サイズの帳票があり3つ折りの折り目を表示したいと思います。
具体的には長さ数ミリの直線を高さ99mmと198mmのところに表示したい。

レポートの仕様はグループヘッダと詳細があり
グループごとに表示してます。

どのように行えばよいでしょうか?
よろしくお願いします。
・ツリー全体表示

【13136】Re:レコードロック違反をどうにかしたい
お礼  norimasa E-MAIL  - 17/3/5(日) 16:19 -

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

【13135】レコードロック違反をどうにかしたい
質問  norimasa E-MAIL  - 17/3/5(日) 11:32 -

引用なし
パスワード
   皆様のお知恵をお借りしたいです。

DoCmd.RunSQL "UPDATE T_Ipt " & _
             "SET T_Ipt.請求月 = CStr(Year(T_Ipt![時刻])) & CStr(Format(Month(T_Ipt![時刻]),'00'))"

人様のプログラムですが、これを実行すると時々レコードロック違反ですべての
レコードの更新ができないことがあります(全レコードが違反で落とされます)。

この前後でADODBでレコードセットを開いたりはしていますが、このクエリを実行する
前は必ず閉じています。

この更新クエリを必ず成功させる方法がありましたらご教示いただきたいです。
よろしくお願いします
・ツリー全体表示

【13134】Access2016 VBA ボタンのイベントプロシ...
質問  shinyaYS E-MAIL  - 17/2/7(火) 13:01 -

引用なし
パスワード
   Access2016の環境でプログラムを実行を実行させているのですが、
ボタンに割り付けたクリックイベントのプロシージャが呼ばれないという現象が発生しています。

同じプログラムを他のPCで動作させると、そのイベントプロシージャが呼ばれるので、このPCのAccessの環境設定設定だと思うのですが、
分かりません。

どなたか、ご教授下さい。
・ツリー全体表示

【13133】価格値上がりの際マスターを触りたくない
質問  悩めるサリー  - 17/1/20(金) 17:03 -

引用なし
パスワード
   購入商品はすべて価格契約をしているのですが

今度値上することになりました

こういう場合新しくコードを振るのが通例だと思いますが、このコードは購入先でも管理しているコードのなので変更できません

例)
    商品コード 商品名    価格
旧価格 100001   いちごケーキ  @300
新価格 100001   いちごケーキ   @350

となります、価格を変更すると、今までの購入履歴の金額がすべて変わってしまうのでできません
商品コード以外にユニークなキーコードを持たせるべきだったのでしょうが、元々ありませんでした。

考えたこと:

今から通番ユニークキーを持たせる
通番の違う商品コード100001がふたつあることになります

で、商品購入(初回投入時)は新価格のリストからしか選べない様にする

という風に考えたのですが

もともと商品コードは主キーを設定していたため重複ありにしようとするとはずさなければなりません

主キーをはずそうとすると、エラーメッセージが出ます
主キーを変更できません。

このテーブルは、リレーションシップの主テーブルになっています。

主キーを変更または削除するには、リレーションシップウィンドウで関連するリレーションシップを削除する必要があります。

ここで、リレーションシップを削除することによっておこる不都合は何がありますでしょうか?

リレーションシップは

注文用の主テーブルとその中にあるサブテーブル(一対多でつながっている)

と一対多でリレーションされています

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

【13132】Re:全ページに折り目
回答  hatena  - 17/1/12(木) 15:07 -

引用なし
パスワード
   レポートでの話ですよね。

ページヘッダーの任意の位置に直線コントロールを配置すればどうでしょう。
・ツリー全体表示

【13131】全ページに折り目
質問  オスマン  - 17/1/11(水) 12:10 -

引用なし
パスワード
   お世話になります。

A4ページを横向きに使用しているのですが
用紙の上の箇所に3つ折りの折り目として
1mmの縦線を表示したいのですが、何かいい方法が
ありますでしょうか?

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

【13130】Re:数量が2つならレコードをコピー
お礼  まき  - 16/12/11(日) 22:15 -

引用なし
パスワード
   hatena様

お礼が遅くなってすみません
教えていただいたテーブルで書き換える方法で
できました

ありがとうございました!
・ツリー全体表示

【13129】Re:ACCESS2010のVBA64ビットについて
発言  亀マスター  - 16/12/9(金) 21:42 -

引用なし
パスワード
   手元に64bit版のOfficeがないのでなんとも言えませんが、32bit版のExcel 2013とAccess 2013で試したところ、ちゃんと機能しましたね。

ところで、この現象の原因とは関係ないかもしれませんが、このコードでは文字列と数値の区別がついていないようで、不具合が出そうだなという印象を持ちました。

AAAは数値を入れるのだと思いますが、Left関数の第1引数は文字列です。AAAの上位2桁を抽出したいということであれば、数学的に計算するのが適切かと思います。(IDなどで文字列として扱うものだとしたらすみません)

あと、Select Caseで"01" To "50"のような書き方をしていますが、これは数字として1〜50の範囲を指定するのだとしたら不適切です。
この書き方では数字としての意味は一切なく、文字列として辞書的配列に従って判断されることになります。
今回はLeft関数で2文字を引っ張ってるので問題にならないでしょうが、もし6〜9の数字を1桁表記にしたものを指定したら、1〜50ではなく51〜99の方に該当していまいますよ。
・ツリー全体表示

【13128】ACCESS2010のVBA64ビットについて
質問  pesan  - 16/12/8(木) 22:12 -

引用なし
パスワード
   32ビットのACCESS2010で作成したアプリケーションを64ビットのACCESS2010で動かすと想定した結果が返ってきません。

VBAスクリプトの抜粋です。

(渡した引数の上位2桁を判断させ、条件によって文字列の編集をする処理です)
--------------------------------------------------------------
Private Function syori1(AAA) As String
Select Case Left(AAA, 2)
 Case "01" To "50": syori1 = "111" & AAA
 Case "51" To "99": syori1 = "222" & AAA
 Case Else: syori1 = ""
End Select
End Function
--------------------------------------------------------------
AAAには「6060」が入っているとします。(AAAの値は確認しました)
32ビットでは、戻りが、「2226060」になりますが、64ビットだと「」(Elseに分岐します)になります。
32ビットと同じ結果を返すにはどういった対応が必要になりますか?

いろいろと調べてみたのですが、解決できなかったので
よろしくお願いします。
・ツリー全体表示

【13127】Re:複数表示の仕方について
回答  nao  - 16/12/7(水) 15:02 -

引用なし
パスワード
   更新クエリにて解決しました。
・ツリー全体表示

【13126】Re:数量が2つならレコードをコピー
回答  hatena  - 16/12/6(火) 17:57 -

引用なし
パスワード
   商品数分のラベルを作成したいということなら、クエリでいいでしょう。
ただし、クエリだと更新できませんので、台帳として使用して、
他にもフィールドがあり入力する必用があるならテーブルにする必用がありますね。

その場合、現状のテーブル「テーブル1」自体を書き換えるという方法と、
別に台帳用のテーブルを用意してそこに追加していくという方法が考えられます。

使用方法によって最適な方法は変わってきますのでよく検討してみてください。

とりあえず、現状のテーブルを書き換える場合のコードを例示しておきます。


テーブル1
ID フィールド1 数量
1 データ1 2
2 データ2 3
3 データ3 1



ID フィールド1 数量
1  データ1    1
1  データ1   1
2  データ2    1
2  データ2   1
2  データ2   1
3  データ3   1

に変換Public Function AutoNew()

  Dim db As DAO.Database
  Dim rs As DAO.Recordset
  Dim rsA As DAO.Recordset
  Dim c As Long, i As Long

  Set db = CurrentDb
  Set rs = db.OpenRecordset("SELECT * FROM テーブル1 WHERE 数量>1;", dbOpenDynaset)
  Set rsA = db.OpenRecordset("テーブル1", dbOpenTable, dbAppendOnly) '追加のみ許可

  Do Until rs.EOF
    c = rs!数量 - 1
    rs.Edit
    rs!数量 = 1
    rs.Update
    For i = 1 To c
      rsA.AddNew
      rsA!ID = rs!ID
      rsA!フィールド1 = rs!フィールド1
      rsA!数量 = rs!数量
      rsA.Update
    Next
    rs.MoveNext
  Loop

  rs.Close: Set rs = Nothing
  rsA.Close: Set rsA = Nothing
  db.Close: Set db = Nothing

End Function
・ツリー全体表示

【13125】Re:DBの形式の違い
お礼  オスマン  - 16/12/6(火) 11:22 -

引用なし
パスワード
   亀マスターさま

ご指摘いただいた内容を確認してみると
やはり罫線関係の表記やVBAによるものでした。
ありがとうございました。
・ツリー全体表示

【13124】Re:数量が2つならレコードをコピー
発言  まき  - 16/12/5(月) 12:14 -

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

書き忘れました
概ねhatena様のご回答通りのことがしたいのですが、一点追加がありまして、

テーブル1

ID フィールド1 数量
1 データ1 2
2 データ2 3
3 データ3 1

欲しい出力結果

ID フィールド1 数量
1  データ1    1
1  データ1   1
2  データ2    1
2  データ2   1
2  データ2   1
3  データ3   1

と言うように、数量を入れたいです
(数量はすはすべて1)
宜しくお願いします
・ツリー全体表示

【13123】複数表示の仕方について
質問  nao  - 16/12/5(月) 10:01 -

引用なし
パスワード
   お世話になります。
アクセスのクエリでカンマ区切りの複数数値の場合にテーブルから複数の値をもってくる方法についてご教示ください。

データのほうに、IDが1つであればもってこれるのですが複数になると持ってこれません。

データ:1,3,8となっている場合、保有資格テーブルから保有1,保有3,保有8という風にクエリで持ってきたいです。

説明のしかたが悪くてすいません。
どなたかご教示お願いします。
・ツリー全体表示

【13122】Re:数量が2つならレコードをコピー
発言  まき  - 16/12/5(月) 8:19 -

引用なし
パスワード
   hatena様

ご回答ありがとうございます

やりたいことはhatenaさまのおっしゃる通りです
数量分レコードをづくりたいです
最終目的はラベルと台帳です
商品1 3個なら

商品1 1
商品1 1
商品1 1

としたいです

クエリで出来るのですか?
・ツリー全体表示

1 / 500 ページ 前へ→
ページ:  ┃  記事番号:
969293
(SS)C-BOARD v3.8 is Free