Microsoft Access 掲示板

views
4 フォロー
6,278 件中 1,081 から 1,120 までを表示しています。
1

便利だなと思ったのはMe.まで入力すると入力補助でテキストボックスとかの名前が出てくることくらいです。

これはかなりのメリットだと思いますが。これがあるおかげで、コード入力がはかどりますし、タイプミスによるエラーも防げます。
また、Me.があれば、フォーム(レポート)に関連するコントロール、メソッド、プロパティと分かりますので、コードを後から読むときに解読しやすいです。ないと、それ以外の何かの可能性も考慮しつつ読む必要がでてきます。
他の関数などと名前が重複したりすると、バグの原因になりかねません。

.Valueに関しては、教材に載っているけど説明が乏しく、何のためにあるのか全く分かりません。

Valueはそのオブジェクトが持っている値を取得するプロパティです。
このプロパティはよく使用することが多いので既定のプロパティとされていて、省略することができます。
値を取得したいときは省略してもいいのですが、関数などと名前が重複したりするとバグの原因になったりするので、大きなプロジェクトの場合は、省略しない方がいいと思います。

また、テキストボックスを[]で囲む時と囲まない時の違いが分かりません。

通常は囲まなくても大丈夫ですが、コントロール名に半角スペースが含まれていたり、VBAのコードとバッティングする記号が含まれていたりするとコントロール名と認識できない場合がありまので、その時は必要になります。

3
すずやん 2023/11/24 (金) 09:58:55

Accessのvbaで処理する方法を探していたんですね。それは気づけませんでした。

以下の記載は参考になるでしょうか。

https://support.microsoft.com/ja-jp/office/sharepoint-にデータをインポート-リンク-または移動する-65bf7b03-74bf-445c-959a-24b7a401ddee

https://naberium.com/2022/07/22/adoを利用してsharepoint-listの一覧を取得する/
↑これはエクセルの場合ですが

以下のように有料のドライバーとしても売ってるので、それなりに難しそうですね。
https://www.cdata.com/jp/kb/tech/sharepoint-odbc-access-linked-tables.rst

2
すぅ 2023/11/24 (金) 09:08:18 fbd7f@b9210

すずやんさま 返信ありがとうございます。
手動でパスを取得する方法はわかっています。
access vbaで処理する方法を模索しています。
access側でボタンをクリックするとsharepointのドキュメント内フォルダを
一覧表示するのが目的です。
宜しくお願いいたします。

4
名前なし 2023/11/24 (金) 04:15:05 4dbaf@07047

すずやん様
もしかすれば、Accessも歴史が長く、ハードもソフトも未熟・非力な時に決まった軽量な既定がそのまま遺産になったのかもしれないですね。

ともあれ、ありがとうございました。

3
すずやん 2023/11/23 (木) 13:09:18

んー、なんでしょうね。
「とりあえず実行は許可して結果から判断できるようにする」てのを既定値にしているのかもしれませんね。
じゃないと「OptionDatabase.Execute」の設定や記述がおかしいのか、それとも実行した内容がおかしいのかが判別しにくいから、というのかもしれません。

2

ヘルプだと同じような RecordsetOptionEnum を持つ OptionDatabase.Execute メソッドの既定値が dbInconsistent らしいんです。
「(既定値) 矛盾した更新を実行します (Microsoft Access ワークスペースのみ)。」
実験してませんが、ソースぐらいしか指定しないと矛盾を許してるんでしょうか。
Executeのほうも、何故既定があえてユルいのか不思議です。

1
すずやん 2023/11/23 (木) 08:12:18

sharepointは使っていませんが、このあたりの方法ではどうでしょうか。
https://begin-prog.site/sharepoint-how-to-get-file-folder-link

1
すずやん 2023/11/23 (木) 08:01:38

ちょっと調べてみましたが、たしかに分からないですね。
希望する動作の値をセットするしかないのかもしれません。

3
みりん梅酒 2023/11/22 (水) 17:19:55 d5f54@e2687

Shift-JISに無い文字を抽出すれば良いのであれば、いったんcsv(sjis)に出力して文字化けさせて
csvを一時テーブルにインポートして元テーブル結合させて絞り込み~じゃダメですかね。
元テーブルに名前以外の主キーがある前提ですが、こんな感じのvbaで。

Public Sub A()
Dim 元テーブル名 As String
Dim 一時テーブル名 As String
Dim 主キー As String
Dim 一時ファイル As String

元テーブル名 = "T_住所録"
一時テーブル名 = "TMP"
主キー = "ID"
一時ファイル = "C:\temp\名前リスト.CSV"

    On Error Resume Next
    CurrentDb.Execute "drop table " & 一時テーブル名, dbFailOnError
    DoCmd.TransferText acExportDelim, , 元テーブル名, 一時ファイル, True  
    DoCmd.TransferText acImportDelim, , 一時テーブル名, 一時ファイル, True

    Dim Qdf    As DAO.QueryDef
    Dim strSQL As String
    strSQL = "SELECT A.氏名 FROM " & 元テーブル名 & " A  INNER JOIN " & 一時テーブル名 & " B  ON A." & 主キー & "=B." & 主キー & " WHERE INSTR(B.氏名,'?')"
    Set Qdf = CurrentDb.CreateQueryDef("文字化けチェッククエリ", strSQL)

    CurrentDb.QueryDefs("文字化けチェッククエリ").Sql = strSQL
    CurrentDb.QueryDefs.Refresh

    Set Qdf = Nothing
    DoCmd.OpenQuery "文字化けチェッククエリ"
End Sub

2

「環境依存文字」という定義が今となっては難しいですね。

はしご高、立つ崎は、現在のUnicode対応のフォントならたいてい普通に表示できると思いますが。
どのようなフォントを使かおうとしているのでしょうか。

1
hiroton 2023/11/22 (水) 14:50:19 fee61@f966d

ここはチャット型掲示板ではないので、最低でも1日程度はまたないとそもそも網にかかってないのだろうと感じることがありますね

ちょっと前に似たような話題がありました
外字を含むレコードを抽出したい

スマートな方法はありません

19
マスオ 2023/11/22 (水) 12:18:40 ddfe5@e6213

りんごさん相対関係は最初作ろうと思ってたのですが内容的にお互い全てが対象となりますので不可なのです。品目はコンボで選択する形になっており、よくあるパターンとして絞り込みは出来る様にしているのです。

18
りんご 2023/11/22 (水) 12:00:44 935bc@0e907

サブにはA、Bの品目・金額は両方とも入力必要で(相対品目として)、繰越入力の時は説明した通りの決まった切り分けとなります。

 品目の相対関係を管理するテーブルを別に作らないの?
 まずは、きちんと正規化しておかないと、質問して完成しても、設計が杜撰だから破綻している、捨てて下さいとなるだけですよ。残念ながら。

17
マスオ 2023/11/22 (水) 11:40:35 ddfe5@e6213

りんごさん イメージとしてはそんな感じですが、日付や取引先(Nullの場合あり)・伝票番号・その他テキストはメインテーブルにしてます。サブにはA、Bの品目・金額は両方とも入力必要で(相対品目として)、繰越入力の時は説明した通りの決まった切り分けとなります。

16
りんご 2023/11/22 (水) 11:17:36 935bc@0e907 >> 15

品目A 金額A   品目B・金額B
>あ   1000    繰越  1000
>繰越  500     い   500

要するにこういう事?

品目日付金額区分
1,000入庫
500振替出庫
500振替入庫
15
マスオ 2023/11/22 (水) 10:35:58 ddfe5@e6213

りんごさん 財務の振替の様なもので伝票に記入するイメージで直感的にそれに沿った処理フォームにしています。実際は
品目A 金額A   品目B・金額B
あ   1000    繰越  1000
繰越  500     い   500
で金額AとBの合計値は合致させる必要があります。(繰越入力フォーム基のクエリでこうなる様にしてます)
繰越時はA・Bどちらかになるかは決まってますが日々の処理ではどちらかになるかはランダムなのです。
これも説明不足でした(すみません)。

14
りんご 2023/11/22 (水) 09:54:56 935bc@0e907 >> 13

>●処理イメージ(サブ)
品目A 金額A   品目B・金額B
あ   1000
          い   500

但し品目のグループにより品目A・金額Aに入るか品目B・金額Bに入るかの切り分けがあります

下記のようにしない理由は?
●処理イメージ(サブ)

品目金額グループ
1,000A
500B
13
マスオ 2023/11/22 (水) 09:32:14 ddfe5@e6213

hatenaさん情報不足で色々すみません。非連結の認識は勘違いしてました。対象のフォームに直接関係ないイメージでとらえてました。今回の関連するテーブル構成としては下記になってます。
①処理メイン:メインID、日付、伝票番号、その他項目  ②処理サブ:サブID、品目A、品目B、金額A、金額B、メインID、その他の項目 *品目と金額入力欄が各2ヶ所あり  ③品目一覧:品目ID、品目名、繰越金額、グループID  ④グループ一覧:グループID、グループ名
社内用財務関係のファイルです(作成途中)。
特定の品目に繰越金額を入力して(半年毎)、それを処理メイン、サブに追加したいのです(日付設定は任意)。但し品目のグループにより品目A・金額Aに入るか品目B・金額Bに入るかの切り分けがあります(繰越時)。
③の品目一覧テーブルを基に特定の項目に対する繰越金額を入力できるフクエリを作成しました。入力したら品目A・金額A、Bに切り分ける為にIIFで処理してます。入力し易い様にこのクエリを基にリスト型フォームを作成し、処理メイン、サブに追加できるコマンドボタンを用意したいのです。
●繰越入力イメージ
品目  繰越   IIFにて切り分け    ★フォームには任意の日付欄と伝票番号(共に非連結)
 あ  1000 ⇒ 品目A・金額A
 い  500  ⇒ 品目B・金額B 
●処理イメージ(メイン)
日付  伝票番号
3/31   0000
●処理イメージ(サブ)
品目A 金額A   品目B・金額B
あ   1000
          い   500

1レコードづつ追加は教えて頂いたDAOコードで出来ましたのでそれに繰り返し処理が出来たらいいかなと思ってます。
でもそれはどうやってしたらいいか分からなくて。
お手数かけます。

12

金額等の数字だけを入力してまして(項目は固定)それを別テーブルに追加する形です。追加先は日々の処理用でメインが日付や他の項目、サブに必要な項目や金額等が入ります。そのリスト型フォーム上のデータをコマンドボタンで追加したいのです。

それぞれのテーブル名、フィールド構成、を提示して、
それぞれのデータ例を提示して、
どのような結果が欲しいのか説明してもらえますか。

11

hatenaさん すみません40件程のレコードは非連結というか、あるテーブルに保存されたものです。そのテーブルを加工したクエリがありそれを基に作成したリスト形式のフォームがあります。

非連結という言葉の意味を誤解しているようですね。
フォームがテーブルと連結してたら非連結とはいいません。
VBAでするならForループでレコード件数分繰り返せはいいでしょう。
ただ、テーブルがあるのなら追加クエリの方が楽です。

どのような意味で「非連結」という言葉を使ったのでしょうか。

10
マスオ 2023/11/21 (火) 17:44:09 2952d@962d7

hatenaさん すみません40件程のレコードは非連結というか、あるテーブルに保存されたものです。そのテーブルを加工したクエリがありそれを基に作成したリスト形式のフォームがあります。そのフォームにはサブフォームはありません。金額等の数字だけを入力してまして(項目は固定)それを別テーブルに追加する形です。追加先は日々の処理用でメインが日付や他の項目、サブに必要な項目や金額等が入ります。そのリスト型フォーム上のデータをコマンドボタンで追加したいのです。

24

式1: InStr(1,Nz([T_出力].[住所1],""),[T_置換用テーブル].[置換前],0)
というような演算フィールドは更新できませんからね。

9

あとついでにお聞きするのですが rs.Close の後は Set rs = Nothing と記述した方がいいのでしょうか?

プロシージャを抜ければ、自動で廃棄してくれますので、なくても問題ないです。(あっても問題はないですが。)

プロシージャが長くて、途中で使用済みになったというようなときに、使用済みということを明確にするために、
Set rs = Nothing とするということはありえます。

8

40レコード程あるとのことですが、非連結フォームなんですよね。
40レコード分の非連結コントロールがあるということですか。

それとも一時テーブルをレコードソースとするサブフォームが埋め込まれているとか。

23
Anko 2023/11/21 (火) 13:25:03 修正 7fdfc@46fae >> 19

HatenaさんのSQLビューをコピーしてデザインビューを確認したところ、住所1とInstrの2つに分かれました。1つのフィールドに書こうとしていたから上手くいかなかったのですね。

22

デザインビュー見ました。
更新するフィールドと抽出条件を設定するフィールドは別にしないと。

上記の回答で新規作成したクエリをデザインビューにして違いを確認してください。

21

クエリを新規作成して、SQLビューにして、下記のSQLを貼り付けて実行するとどうなりますか。

UPDATE T_出力, T_置換用テーブル
SET T_出力.住所1 = Replace(Nz([T_出力].[住所1],""),[T_置換用テーブル].[置換前],[T_置換用テーブル].[置換後])
WHERE InStr(1,Nz([T_出力].[住所1],""),[T_置換用テーブル].[置換前],0)>0;
20

見にくいかもしれませんが、スクショでのデザインビューです。画像1

7
マスオ 2023/11/21 (火) 13:12:08 ddfe5@e6213

hatenaさんへ 追加クエリではなく教えて頂いたDAOでしました。追加は出来たのですが、サブには1レコードづつなのですね? 40レコード程あるのですが、(メイン1つに対して)一括では出来ないのでしょうか? (知識不足ですみません)
あとついでにお聞きするのですが rs.Close の後は Set rs = Nothing と記述した方がいいのでしょうか?

19

SQLビューを開こうとしましたが、'InStr(1,[T_出力].[住所1],[T_置換用テーブル].[置換前],0)'が見つかりません、パラメータや別名が正しいこと、、、を確認してくださいというエラーが出ます。

18
hatena 2023/11/21 (火) 13:03:27 修正

""をとってみましたが、見つかりません、パラメータや別名を確認してくださいというエラーが出ました。

このエラーが出ているクエリのSQLを提示してください。

エラーの出ないSQLを提示されても意味ないですよね。

一応、下記のSQLを実行してみましたが、エラーなく実行できました。

UPDATE T_出力, T_置換用テーブル
SET T_出力.住所1 = Replace(Nz([T_出力].[住所1],""),[T_置換用テーブル].[置換前],[T_置換用テーブル].[置換後])
WHERE InStr(1,Nz([T_出力].[住所1],""),[T_置換用テーブル].[置換前],0)>0;
17

すみません、現状のSQLとは、Instrに書き換えた方(エラーが出ている方)のことでしょうか?

16

SQLを見る限りは問題なさそうですね。
簡単なサンプルを作成して確認してみましたが、問題なく実行できました。

クエリを新規作成して、SQLビューに提示のSQLをコピーして貼り付けて実行したらどうなりますか。

15

下記提示致します。

14
Anko 2023/11/21 (火) 11:26:28 修正 7fdfc@46fae
UPDATE T_出力, T_置換用テーブル SET T_出力.住所1 = Replace(Nz([T_出力].[住所1],""),[T_置換用テーブル].[置換前],[T_置換用テーブル].[置換後])
WHERE (((T_出力.住所1) Like "*" & [T_置換用テーブル].[置換前] & "*"));

住所1のみのSQLです。

7
カンカン 2023/11/21 (火) 11:12:17 d8b37@658b3 >> 5

ありがとうございます。
2台のPCでテストしましたが、どちらも発生しました。
よってaccessのバクかと思われます。(office2002ではこのような現象はなかった)

8
うさぎ 2023/11/21 (火) 10:56:50 >> 6

ご回答ありがとうございます!
無事に合計値出すことができました。

テキストボックスとラベルについて性質を理解していないので勉強してみようと思います。
ありがとうございました。

13

[T_置換用テーブル].[置換前] のテーブル名、フィールド名に間違いはないですか。

間違いないなら、現状のクエリのSQLを提示してください。

9
すずやん 2023/11/21 (火) 09:53:04

ご質問の文章を拝見すると、「規定の文字数」の規定の理由が明確に記載されてなかったので、回答が迷走している感じがします。

最初に「レポートは最大サイズが決まっていますので、どこまでもテキストボックスを広げるわけにはいきません。」という記載があれば、その後の回答がスムーズになったかと思います。
※そういう意味で「何か特別な理由があるならば提示したほうが回答がつき易いですよ?」と記載されているのかと思います。

使用される環境によって、出力帳票の仕様は様々かと思いますので、同しようもないときもありますね。大きな会社ですと、レイアウトを一箇所変えるのも申告書が必要だったり、工場側のすべてのプリンターで正常に表示されるか確認が必要になることもあるので、結構厄介なケースもあります。

ただ規定の理由が不明瞭な場合、修正コストを考えると「ちょっとテキストボックスを広げるだけ」のほうが圧倒的に簡単ですぐに修正できます。

なので、自分の望む方向の回答が欲しい場合は、なるべくすべての条件を記載されるのが良いかなと思います。

8
りんご 2023/11/21 (火) 09:24:43 935bc@0e907

>> 7
 ExcelやWordに例えるとわかります。
 文字列が途中で途切れたらセルの幅を広げたり、最大文字列に合わせて列の幅を広げたり、しませんか?
 印刷用紙に収まらないならば、レイアウトが崩れるならば、規定の文字数を最初からオーバーしないように入力項目・内容から再検討しませんか?
 データベースのレコードが文字数調整で更新・保存される事は普通ではありません。最初からそうならないように設計からやり直さないの?
 うーん、納得いかなければ、hatenaさんに意見を求めてみたらどうですか?