Microsoft Access 掲示板

views
4 フォロー
5,901 件中 241 から 280 までを表示しています。
4
りんご 2024/03/08 (金) 08:12:24 935bc@0e907 >> 3

やり方をすっかり忘れてしまいました。

思い出すきっかけになれば。T‘sWare AccessTips
テーブル構造、フォーム情報(連結コントロールソースなど)があれば、みんなの回答が増えると思います。

3
ちばまもる 2024/03/08 (金) 00:22:58 0bf9d@6f372

>「先に入れた数値がテーブルに保持されている状況を作って、別の列に計算したもう一つの数値を代入したいのです」、とい>う流れになるのが普通だと思います。

おっしゃる通りです。たとえば株の場合、為替が上がるかどうかは重要な要素だと思うのですが、個人的に為替が上がるという予想をして、それを他のデータと合わせて機械学習して、日経平均があがるかどうかを調べようとする場合、為替が上がるという個人的な予想と、実際に為替があがったかどうかのデータは両方持っておかねばならないと思うのです。というのは、為替が上がったかどうかは事前に判断できないので、その代わりに一つの要素として個人的な予想を入れているので、訓練のためには実際にどうだったかを使うことになるからです。あるいは個人的な予想をそのまま使ったほうがいいかもしれないですけど。いずれにしても、為替が上がるかどうかという個人的な予想と、実際に上がったかどうかのデータはひとつは同じところにおいておき、もう一つはそのままの状態で保持したいということです。

別に機械学習の専門家ではなく、個人的な楽しみでやっていますので、そんなのダメやん、みたいなことはあると思いますが、とりあえずそういうニーズで言っているということです。

2
ちばまもる 2024/03/07 (木) 23:42:10 0bf9d@6f372

メッセージありがとうございます。昔の参考書を引っ張り出して調べたら、ADDまたはDAOを使う方法、SQLを使う方法があるようです。そんなに難しくなかったような気がするのですが。ただデータの追加の仕方は書いてあるのですが、そのデータをどのテーブルのどこに入れるかが、SQLの場合はWHERE句を使った指定ができるかどうかが参考書には書いてないので、ちょっと不安です。明日か明後日書いてみて、具体例をお示し出来たらと思います。

1
りんご 2024/03/07 (木) 22:00:34 修正 935bc@0e907

具体的に数値のデータを示して説明しないと、伝わらないでしょう。

>先に何を入れたかが後で確認したいので、コンボボックスを使って代入したところとは別の列にもう一つ数値を代入したいのです。

「先に入れた数値がテーブルに保持されている状況を作って、別の列に計算したもう一つの数値を代入したいのです」、という流れになるのが普通だと思います。限られた情報からですが、あべこべな仕組みを実装しようとしているのかしら?

4

CSVファイルは、1行目が空白行、2行目が項目(データあり)、3行目からデータな形式になっており、
実際にデータとして取得したいのは、3行目以降となります。

別の方法でも構いません

別案( Windows標準のpowershellワンライナーをVBAから実行 )をご紹介します

・ UTF8のテキストファイルを読み書き
・ テキストファイルの先頭X行を読み飛ばす

の両立に関しては、ADODB.Streamの利用より記述が簡潔になります
 

Sub SampleTK()
    Const TARGET    As String = "D:\Work\UTF-8のテキスト.csv"
    Const SKIP_ROWS As Long = 1  '←読み飛ばす行数
    Dim tail_path   As String
    Dim command     As String
    
    With CreateObject("WScript.Shell")
        tail_path = .SpecialFolders("Desktop") & "\TK_" & Format$(Now, "yyyymmddhhnnss"".csv""")
        command = "powershell ""gc -Path '" & TARGET & "' -Encoding UTF8 " _
                & "| select -Skip " & CStr(SKIP_ROWS) & " | out-file '" & tail_path & "' -Encoding UTF8"""
        .Run command, 0, True
    End With
    
    DoCmd.TransferText acImportDelim, , "T_サンプル", tail_path, True, , 65001
    Kill tail_path
    MsgBox Prompt:=command, Buttons:=vbOKOnly, Title:=CStr(SKIP_ROWS) & "行の読み飛ばし"
End Sub
9

まずは基本が理解できていないと、このスレッドの内容の理解は難しいかな。
私の説明もかなり端折ってますので。
すこしでも理解の助けになるように補足説明をしておきます。

まず、引数と何かを理解するようにしましょう。
一言では説明しきれないので「VBA 引数」でWEB検索して研究してみてください。
例えば、下記とか。
【Excel VBA入門】引数とは|エクセル マクロ | Gakushiki

引数がある程度理解出来たら、次はイベントプロシージャの引数ですが、
これは普通のプロシージャの引数とは少し違う働きをします。

例えば、キークリック時の場合は、

Private Sub コンボ_KeyDown(KeyCode As Integer, Shift As Integer)

の KeyCode As Integer, Shift As Integer の部分が引数になりますが、
KeyCode引数にはキーを押したときにどのキーを押したのかの情報が入っています。
Shift引数は、Shiftキー、Ctrlキー、Altキーが押されているかどうかの情報が入ってます。

さらに、この引数に値を代入することで、別のキーが押されたことに変更することもできます。

keyCode = vbKeySpace

とするとどのキーを押してもスペースキーが押されたことになります。そして、

keyCode = 0

とすると何もキーが押されなかったことになると決められています。

イベントにより引数があるものとないものがあります。これは決まっているのでユーザーが勝手に引数をいれることはできません。

他に、例えばフォームを開くときのイベントプロシージャなどのようにCancel引数があるものもあります。
このようなイベントは

Cancel = True

というようにTrueを代入するとイベント自体をキャンセル(なかったことにする)できます。
つまりフォームは開くことができないということになります。

このようにイベントプロシージャの引数は他のプロシージャの引数とはすこし役割が異なります。

次に、引数の値渡し(ByVal)と参照渡し(ByRef)の違いについて理解する必要が出てきます。
これもなかなか難解な概念なので、ここで説明するより「VBA ByVal ByRef」をキーワードに検索して、
いろいろなページで研究してください。

上のhirotonさんの投稿内で、下記のコードがありますが、

Private Sub proKey1(c As Integer)

これは、

Private Sub proKey1(ByRef c As Integer)

と同じコードになります。By〇〇 を省略したときは、ByRef になるというのがVBAの仕様なのです。
つまり、参照渡しをしていることになります。

参照渡しとは、簡単にいうと、変数そのものをそのまま渡しているということです。
いいかえると、一つの変数を別の場所から見たり、触ったりしているということです。
(これで伝わっているかな?)

つまり、下記の「これ」で指し示したものは、全て同じものです。

Private Sub コンボ_KeyDown(KeyCode As Integer, Shift As Integer)
                           ↑これ
    Call proKey1(KeyCode)
                 ↑これ
End Sub

Private Sub proKey1(c As Integer)
                    ↑これ
    Select Case c
    Case 9, 17, 67
        '何もしない
    Case Else
        c = 0
        ↑これ
    End Select
End Sub

つまり、
proKey1内で、

c = 0

としたということは、
コンボ_KeyDown内で、

keyCode = 0

としたことと同じ意味になるということです。

なんか回りくどい説明になりましたが、少しは理解の助けになったでしょうか。

3

CSVファイルは、1行目が空白行、2行目が項目(データあり)、3行目からデータな形式になっており、実際にデータとして取得したいのは、3行目以降となります。

そのようなファイルはCSVファイルとは言えません。
どのような経緯で入手したものか分かりませんが、入手先にCSVの仕様にそった形式にできないかまずは確認してみましょう。

それが不可能なら、
2行目以降はCSVの仕様に沿っているなら、1行目を削除して上書保存して、それを前回の回答の方法でインポートするとシンプルかつ高速に処理できると思います。

テキストファイルへの書き込み方法はOffice TANAKAさんのサイトにあります。

Office TANAKA - ファイルの操作[UTF-8形式のテキストファイルに書き込む]

1行目の削除は下記のコードでできます。

    Dim pos As Long
    pos = InStr(buf, vbCrLf)
    buf = Mid(buf, pos + 2)
2

回答ありがとうございます。
言葉足らずの説明で大変申し訳ありません。
CSVファイルは、1行目が空白行、2行目が項目(データあり)、3行目からデータな形式になっており、実際にデータとして取得したいのは、3行目以降となります。
もし、回答頂いたコードで実現できるとしたら、どのようなコードになりますでしょうか?
もちろん、別の方法でも構いません。
ご教示よろしくお願いします。

8
hiroton 2024/03/07 (木) 10:41:43 48496@f966d

こんな回りくどい話になるつもりじゃなかったんですが・・・

エラーが出てないとなると、モジュールレベルでKeyCodeを変数宣言してるとかなんですかねぇ

プロシージャを分割して、元のプロシージャの値を使いたいってだけなら引数で渡せばいいよで済んだんですが

Private Sub コンボ_KeyDown(KeyCode As Integer, Shift As Integer)
    Call proKey1(KeyCode)
End Sub

Private Sub proKey1(c As Integer)
    Select Case c
    Case 9, 17, 67
        '何もしない
    Case Else
        c = 0
    End Select
End Sub

Function+戻り値にするかどうかは悩みどころ


よくわからないけどエラーも出ずに処理が終わるコードが出来上がってしまったほど怖いものはないですねぇ

7
hiroton 2024/03/07 (木) 10:25:27 48496@f966d

そうですね。モジュール(VBA記述画面)だけを見ていると理解できないんですが、各コントロールのプロパティで[イベント プロシージャ]を指定して自動生成できるプロシージャはその引数に特別な意味を持つ特別なプロシージャになります

これらは、コントロール名_イベント名([引数])の書式になり(引数はイベントによりあったりなかったり)自動生成せずに、モジュールで直接記述(コピペ)してからコントロールに[イベント プロシージャ]を設定しても同じです。データ上はただのテキストでしかありません

このようなちょっと理解しにくい仕組みの上で、コンボ_KeyDownプロシージャの中でKeyCodeを操作すると、実際のACCESS上でのキー入力を制御できるという仕組みが成り立っています


前の質問でも少し言葉が出ましたが、「スコープ」が問題になります

Private Sub コンボ_KeyDown(KeyCode As Integer, Shift As Integer)

End Sub

「このプロシージャで宣言されているKeyCodeという引数を操作することにより、ほにゃららできる」というのが諸々の趣旨になりますが、引数はそのプロシージャの中でのみ有効です
hirotonの指摘の本質ですが、「コンボ_KeyDownプロシージャの中で記述したKeyCodeのみ」が、その時のキー操作の制御に影響します。その他の場所で記述されたKeyCodeは、それが有効となる宣言方法に従って動作します

やりたいことは「コンボ_KeyDownプロシージャの中KeyCodeの操作」なので、どんなに他の場所でKeyCodeの変数宣言を行っても「コンボ_KeyDownプロシージャの中KeyCode」を変更することはできません。これは、不意の動作が行われないように守られているとも言えますし、「KeyCode」という簡単な名前を至る所で使うことに問題がないようになっているとも言えます。これが、スコープ問題というやつです


ここまで理解した上でようやく、スコープが制限されている値を変更するためにはどうしたらいいか?スコープを跨ぐ方法は?となります。ここまで来れば、hatenaさんの回答につながる(回答を見て理解できる)でしょう

6
XS 2024/03/07 (木) 08:58:25 ddfe5@52efc

hirotonさん ありがとうございます。モジュール以前の事でした。変数宣言の重要性もわかりました。コピペだけで分かったつもりになってました。いつもプロパティからイベントでコード記述してたので今回も自動的にKeyCodeが変数になっている認識がありませんでした。Private Sub ***のあとの()内も大きな意味があるのですね。cancelなんかもそうなのですね。
hatenaさんの回答の意味もようやくわかりました(ByRefにしないとやりとり出来ない)。⇒コードを正しく記述したら今回の事は解決しました。
今回のプロシージャ作成も単純にコードを短縮文字に置き換えてるだけという認識しかありませんでした。もっともっと深いものでした。まだまだ浅いところしか理解できてないと思いますが、色々きずかせて頂きありがとうございました。

16

まず、回答者の名前を間違えるという失礼な行為を指摘されたのに、それに対してなんの反応もないのはどうかと思います。

そのうえ、
skさんの下記の質問に対してなんの回答もないですね。

どのステートメントを実行しようとした時にその実行時エラーが発生したのかを具体的に明記して下さい。

私も前のスレッドで何度も状況を把握しようと質問をしましたが、正確な情報を得られませんでした。

そのような状況では適切な解答をすることは不可能と判断して回答するのを諦めました。

質問者と回答者のやりとりがうまく行かない原因は、
質問者(rinrinさん)がAccessの基本知識の不足にあると思います。

あと、正確な情報を整理して提示するという努力(能力?)も不足しているようです。

どちらにしても、現状のコードの一部を修正してどうにかなるレベルの問題ではないでしょう。コードを一から書きなおす必要があります。テーブル設計、フォーム設計も見直す必要があるでしょう。

おそらく現在の質問者のスキルでどうにかできるレベルの問題ではないです。

もし、どうしてもこれを作り上げる必要があるのなら、
まずは初心者用のAccess解説書を購入して基本から勉強されることをお勧めします。

1

最終目的は、UTF-8のCSVファイルをAccessのテーブルにインポートしたいということでしょうか。

だとしたら、そんな面倒なことせずに、下記の1行でできますが、それではだめですか。

Docmd.TransferText acImportDelim, , “T_サンプル”, "D:\Work\UTF-8のテキスト.csv", True, , 65001

最後の 65001 が文字コードを UTF-8 と指定してます。
その他の文字コードに関しては下記を参照に。

コード ページ識別子 - Win32 apps | Microsoft Learn

上記の方法でだめなのなら、その理由を説明してもらえますか。

5
hiroton 2024/03/06 (水) 15:38:00 20532@f966d

記述位置は

対象フォーム内のVBA画面の一番最後

で合ってますよ。「フォームモジュール」がそこのことです

Private Sub proKey1()

'//KeyCodeが変数宣言されていない

  'プロシージャの作成(名前:proKey1)
    If KeyCode = 9 Or KeyCode = 17 Or KeyCode = 67 Then 'Tab・Ctrl・C キーのみ使える
       Exit Sub
    Else
       KeyCode = 0  'Tab・Ctrl・C キー以外は禁止
    End If
End Sub

質問のコードはKeyCodeが謎の存在です。VBA自体は変数宣言は必須ではありませんが、一般的にはOption Explicit宣言により変数宣言を強制します。エラーが出ないということはOption Explicit宣言がないということですが、基本的に使わないメリットよりも使うメリットが優る機能です。より深い知識を学ぶよりも先に、基本的にやって当たり前のことはできるようにしましょう

hatenaさんの回答が答えですが、変数とは、名付けに従って思った通りに動くようなものではありません。KeyCodeと記述したからと言って、思った通りのKeyCodeになるわけではないのです。思った通りに動くように、指示・命令・操作をしてあげなければなりません

今回は、(コピペで解決するような)思ったような動作が組めたかったことよりも、謎の存在を生み出してしまったこと、また、それが謎の存在であると気づけなかったことのほうがよほど大きな問題でしょう

4
XS 2024/03/06 (水) 15:09:11 ddfe5@52efc

hirotonさん:ありがとうございます。最初のコード記述(プロシージャ)は対象フォーム内のVBA画面の一番最後にしました。構文エラーはでなかったのですがCallで機能しませんでした。VBEお勧めもありがとうございます。じっくり読んで参考にします。
hatenaさん:ありがとうございます。そういう事だったのですね。戻り値のTrue、Falseをコード内に設定しても機能しないので再質問しようと思ってました。フォームモジュールとしての作成方法分からなかったので 挿入→クラスモジュールに下記を記述しました(クラスモジュールのClass1に作成されました)
   If KeyCode = 9 Or KeyCode = 17 Or KeyCode = 67 Then 'Tab・Ctrl・C キーのみ使える
       Exit Sub
    Else
       KeyCode = 0  'Tab・Ctrl・C キー以外は禁止
    End If
そして
  Private Sub コンボ_KeyDown(KeyCode As Integer, Shift As Integer)
     Call proKey1(KeyCode)
  End Sub
試しにキー入力すると”コンパイルエラー:Sub、Function、または Property が定義されていません。(Error 35)”
となりました。
⇒モジュールの作成が間違えていると思うのですが知識不足で解決出来てません。(すみません)

6
すずやん 2024/03/06 (水) 14:04:34 >> 4

仮に[社名1]に「みかん」が設定されているとします。
その場合、「T_会社マスター.社名2」の内容を「みかん」の前方一致で検索したいわけです。

Like "[社名1]*"
↑これの場合、全てをそのまま文字列として扱ってしまいますので、「[社名1]」の前方一致で検索してしまいます。

Like [社名1] & ""
↑これの場合、[社名1]に設定されている文字列、つまり「みかん」と「
」をくっつけた文字列「みかん*」で検索を行います。

3

KeyCode = 0 でキー入力をキャンセルしようとしているのだと思いますが、残念ながらそれでは動きません。

キークリック時の自動生成されるイベントプロシージャをみると、下記のようになっています。

Private Sub テキスト0_KeyDown(KeyCode As Integer, Shift As Integer)

End Sub

引数に KeyCode というのがありますが、この引数に 0 を代入することでキー入力がなかったことになります。
別のプロシージャ内の変数 KeyCode とは何の関連もないので、別のプロシージャで KeyCode=0 としても意味はないです。

このような場合は、別プロシージャで、イベントプロシージャの KeyCode を参照渡しで渡せば、別のプロシージャ内でも、KeyCode にアクセスできるようになります。

フォームモジュール

Private Sub proKey1(ByRef KeyCode As Integer)
    If KeyCode = 9 Or KeyCode = 17 Or KeyCode = 67 Then 'Tab・Ctrl・C キーのみ使える
       Exit Sub
    Else
       KeyCode = 0  'Tab・Ctrl・C キー以外は禁止
    End If
End Sub

Private Sub コンボ_KeyDown(KeyCode As Integer, Shift As Integer)
    Call proKey1(KeyCode)
End Sub

引数には値渡し(ByVal)と参照渡し(ByRef)がありますが、その違いについてはWEB検索して研究してみてください。

13
驚天動地!前任者失踪丸 2024/03/06 (水) 13:36:35 23e8e@44ebd

回答でも何でもないただの感想なのですが、都道府県と市町村がずらっと並んでて、その数だけチェックボックスがある入力フォーム・・・目が疲れそうです^^;

2
hiroton 2024/03/06 (水) 12:35:39 20532@f966d

回答の前に、その「モジュール」はどのように作られたものですか?

(VBAとしてという意味ではなく)一般的には、そのプロシージャは動きません。構文エラーが発生します

https://www.google.com/search?q=option explicit
VBEのオプション設定のお勧めを徹底解説(hatena chipsさん)

1
XS 2024/03/06 (水) 12:32:52 ddfe5@52efc

先ほど投稿したのですが1点間違いに気がつきました。プロシージャの Exit Subは他の箇所には無効となりますね。
そこを修正して試してみます。それで上手く行かないときはまた投稿します。
宜しくお願いします。

12
rinrin 2024/03/05 (火) 20:30:06 b4dc9@c7f00

メインフォームには
コンボボックスが四つ
☆ID
☆担当者
☆都道府県
☆最寄駅
テキストボックスが三つ
☆開始日
☆終了日
☆備考
それと市区町村が50個くらい並んでます。。。。。。。。;;

それとサブフォームがあります。。。。。。。^^

4
XS 2024/03/05 (火) 15:45:23 ddfe5@52efc

hatenaさん重ね重ねありがとうございます。「VBA スコープ」少し調べました。記述位置以外にも Private、Publicで範囲が変わってきますね。使いこなすことが出来れば大分コードが集約されそうです。参考になりました。
OpenArgsも初めて知りました。これも重宝しそうです。
大変お世話になりました。

3

ものすごく初歩的な質問なのですが Private rptName As String  はVBA画面の一番上に記述するから参照出来るのですね?(フォーム内の色々な所に)

モジュールレベル変数となり、モジュール内のコードならどこからでも参照できる変数になります。他のモジュールからは参照できません。

どの範囲で参照できるかをスコープといいます。「VBA スコープ」のキーワードにWEB検索してみてください。解説ページがいろいろ見つかると思いますので研究してみてください。


レポート上に小さい埋め込み画像があります。この画像を条件により表示/非表示にしたいのです。このレポートは入力フォーム上のボタンでプレビューさせ、フォーム上の画像あり/なしのオプションボタンで条件設定をしようと考えてます。

フォーム上のプレビューボタンでレポートをプレビューするときに、Docmd.OpenReportメソッドの OpenArgs引数でオプショングループの値を渡せばいいでしょう。

下記のような設定と仮定します。

オプショングループ

名前関連付けされたラベルの標題
フレーム1小さい埋め込み画像

このオプショングループ内に下記のオプションボタンが2つ配置してある

名前オプション値関連付けされたラベルの標題
opt表示1表示
opt非表示2非表示

プレビューボタンクリック時

Private Sub プレビューボタン_Click()
    DoCmd.OpenReport "レポート1", acViewPreview, "", "", acWindowNormal, Me.フレーム1.Value
End Sub

レポートの読み込み時

Private Sub Report_Load()
    If OpenArgs = 1 Then
        Me.イメージ1.Visible = True
    Else
        Me.イメージ1.Visible = False
    End If
End Sub
2
XS 2024/03/05 (火) 12:28:35 ddfe5@52efc

hatenaさん ありがとうございます。このコードで上手くいきました。Screen.ActiveReportの事は初めて知りました。
ものすごく初歩的な質問なのですが Private rptName As String  はVBA画面の一番上に記述するから参照出来るのですね?(フォーム内の色々な所に)
あともう一つの質問の方の レポート上に小さい埋め込み画像(イメージ1)の表示有無はどうやって実現可能でしょうか?

1

入力用フォームに配置したコマンドボタンでレポートプレビューさせた時にオリジナルの簡単な印刷設定フォーム(名前:F印刷設定)も一緒に開く様にしてます。

レポートをプレビューした直後に印刷設定フォームも開くということですね。
ならば、Screen.ActiveReport で直前に開いたレポートを取得できますので、それを利用すればどうでしょう。

F印刷設定のフォームモジュール

Option Compare Database
Option Explicit
Private rptName As String  
    
Private Sub Form_Open(Cancel As Integer)
    On Error Resume next
    rptName = Screen.ActiveReport.Name
    If Err <> 0 Then
        Cancel = True
        MsgBox "レポートが開いていません。"
    End If
End Sub

Private Sub ボタン1_Click()
    If vbOK = MsgBox("直ちに印刷を開始します。", vbOKCancel) Then
        DoCmd.OpenReport rptName, acViewNormal, "", "", acNormal
    Else
        MsgBox "印刷処理を中止します。", vbCritical
        End
    End If
End Sub

Private Sub ボタン2_Click()
    DoCmd.SelectObject acReport, rptName, False
    DoCmd.RunCommand acCmdPrint
End Sub
5
驚天動地!前任者失踪丸 2024/03/05 (火) 10:42:57 23e8e@44ebd >> 4

素晴らしいです、上手く抽出することが出来ました。
ありがとうございます。

疑問なのですが、何故

Like "[社名1]*"

ではなく

Like [社名1] & "*"

なのでしょうか??

4

デザインビューで下記でどうでしょう。

フィールド社名2
テーブルT_会社マスター
レコードの更新Replace([社名2],[社名1],"")
抽出条件Like [社名1] & "*"
11

直前の投稿に対する返信だと思いますが、その投稿者は私(hatena)ではありません。
skさんの投稿です。

3
驚天動地!前任者失踪丸 2024/03/05 (火) 08:37:25 23e8e@44ebd >> 2

Hatenaさん、こちらわかりますでしょうか?

10
rinrin 2024/03/04 (月) 20:35:11 b4dc9@c7f00

hatenaさん。。。。。。。いつもいつもほんとにありがとうございます。。。。。
ご指導何卒宜しくお願い致します。。。^^

メインフォーム サブフォームどっちも非連結です。。。※そこは何も変換してません。。。
前述したように、、、48の都道府県を選び、、、そこに更に該当する市区町村を選択し、、、最後に住所の詳細を記入するユーザーフォームを作りたいと思っています。。。^^
結構件数があり、、、人でも限られているので、、、少しでも効率的なプログラムを作りたいと思っております。。。^^

テーブルは4つあり、、、リレーションシップで最初につなげてあります。。。^^(※クエリじゃないです。。;;)
メインとなる軸のテーブル名は”MST実査実績一覧”で、、、
ID :オートナンバー型
年月日 :日付/時刻型
担当者 :短いテキスト
都道府県 :数値型
北海道 :Yes/No型

沖縄 :Yes/No型
実査住所 :短いテキスト
(※最後にここに正式な住所を作成し、、、サブフォーム(テーブル)に格納したいと思っております。。。^^)
最寄駅 :短いテキスト
駅から目的地までの公共手段
:数値型
役職名 :数値型
実査flg :Yes/No型

二つ目のテーブル名が”MST都道府県”です。。。。。
id :オートナンバー型
都道府県名 :短いテキスト

三つ目のテーブル名が"MST役職名"
ID :オートナンバー型
役職名 :短いテキスト

最後が "MST駅から目的地までの手段"です。。。。。。
ID :オートナンバー型
駅から目的地までの手段
:短いテキスト
4っつのテーブルをリレーションシップした状態で、、、サブフォームに、、、一覧表として設定してます。。。

hatenaさんのおかげで、、、ドンガメ状態でも なんとかメインフォームから市区町村まで、、、チェックを入れることはできたんですけど、、、、
最後にそれを選択し、、、詳細を記入する段階で、、、エラーが出ちゃいます。。。
☆確か二度目のチェックボックスの値が サブフォームに収まった状態で、、、テキストボックスに詳細を記入して登録しようとすると、、、
オブジェクトが必要ですとか、、、実行時エラーが表示されちゃいます。。。。。。。;;ソースコード持ち出せない。。。;;わかんないです。。::

開示できる情報の全てです。。。^^
何卒宜しくお願い致します

6
ssassakki 2024/03/04 (月) 11:38:56 27741@c61b7 >> 3

hirotonさん、castするかdatetime型に変更するのは最後の手段にしたいです。
接続方法で回避は出来そうです。

5
ssassakki 2024/03/04 (月) 11:28:43 27741@c61b7

toneさん、貴重な情報ありがとうございます。
せめてMS社が提供している各接続方法の結果は統一して欲しいですね。

いろいろ試した結果
NativeClient 〇/oledb ×/microsoft odbc driver17 〇
理由は不明

9

メインフォームに"txt住所"という名前のテキストボックスと”cmd新規登録”という名前のコマンドボタンと、チェックボックス48個都道府県があります。これと”Chk実査flg”という名前のチェックボックスがあります。

1回目のcmd新規登録をクリックし、サブフォームへの入力が許可されます。

2回目のchk新規入力ボタンをクリックすると
選んだ都道府県が テキストボックスに表示

3回目のcmd新規入力コマンドボタンをクリックして確定して、
サブフォームにレコードが収まる

これらの機能を1つのコマンドボタンに集約しているのであれば、ソースコード云々以前にフォームの設計自体に問題があると申し上げざるを得ません。

実行時エラーが表示され、、、オブジェクトが必要ですと、実行時エラーが表示されちゃいます

どのステートメントを実行しようとした時にその実行時エラーが発生したのかを具体的に明記して下さい。

'ADO接続開始
Dim Cn ADODB.Connection
Dim Rs ADODB.Recordset

もし上記のステートメントを本当にこの通りに記述されているのであれば、変数名と型の間に As キーワードが記述されていないため、実行時エラーどころかコンパイルエラーが発生するはず。

Rs.Open"MST実査実績一覧",Cn, adOpenKeyset, adLockOptimistic

また、Cn にも Rs にも何のオブジェクトも渡されていない状態なのであれば、このステートメントでも実行時エラーが発生します。

Dim Cn As ADODB.Connection
Dim Rs As ADODB.Recordset

Set Cn = CurrentProject.Connection
Set Rs = New ADODB.Recordset

Rs.Open "MST実査実績一覧", Cn, adOpenKeyset, adLockOptimistic

If Me.Chk北海道.Value=True Then
Me.Txt住所.Value = "北海道札幌市"
Rs!実査住所 = Me.Chk北海道札幌市.Value
Rs!実査住所 = Me.Txt実査住所.Value
Exit Sub
End If

そこは Exit Sub ステートメントを呼び出すべきタイミングではないでしょう。

Update

Rs.Update

現状(あからさまに判る範囲で)修正すべき箇所として挙げられるのは以上のみ。
他のステートメントについては、現時点では評価のしようがありません。

  • メインフォームは連結フォームであるか、それとも非連結フォームであるか。

  • メインフォームが連結フォームである場合、メインフォームのレコードソースはどのテーブルであるか。

  • (サブフォームのレコードソースであると思われる)テーブル[MST実査実績一覧]の定義内容(各フィールドの名前/データ型およびキー定義)

とりあえず、以上の点について明示されることをお奨めします。

参照先のテーブルについての情報も判らない状況では、rinrin さんが求められている「正しいソースコード」を提示することなど誰にもできないでしょう。

6
あん 2024/03/04 (月) 09:55:57 b41ab@001b1

hatena様

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

サブデータシートかレポートの重複データ非表示よりポップアップフォームでの更新かのどちらかでやってみます。

両方作ってみて見栄えや操作のしやすさなどでどちらか決めたいと思います。

8
名前なし 2024/03/03 (日) 16:48:58 eec97@9f7fc

削除テキスト市区町村まではテキストボックスに入るんです。。。
それ以下入力するとエラーが出ちゃうんです。。。
何がいけないんですか?どこを修正 どうすればいいんですか?

7
rinrin 2024/03/03 (日) 08:43:00 b4dc9@c7f00

ソースコードのアドバイスが何も来ないの。。。。。;;

6
rinrin 2024/03/02 (土) 21:29:24 b4dc9@c7f00

でも。。。。。。あたしの質問は
コンボボックスで選択した都道府県に。。。市を選択して
そこから手入力で 住所の細部を記入して、、、再度 テキストボックス(※DB)に戻したいってことなんですけど。。。
ちょっと回答が   ずれちゃってるような気がするんですけど。。。。。。。。^^ごめんなさい。。。;;

5
rinrin 2024/03/02 (土) 21:24:11 b4dc9@c7f00

わかりました。。。。。。ありがとうございます
これはこれで取り組みますね