実行時エラー3075演算子がありません
実行時エラー3075演算子がありません
調べているうちに、下記のような製品名コードっていうのが、エラーが出てない時は、数値形式でしたが、今回は、テキスト形式なのです。
そういう場合は、文字列型の場合は、シングルコーテーションが必要なのです。
Me.受注製品コード = DLookup("製品名コード", "dbo_mst_product", "製品名コード=" & Me.製品コード検索)
じゃなくて、
Me.受注製品コード = DLookup("製品名コード", "dbo_mst_product", "製品名コード='" & Me.製品コード検索 & "'")
結構しらべるのに大変だった。
以前まとめたことがあるので、下記も参考にしてください。
https://pctips.jp/pc-soft/access-dlookup-howto2019/
meの使い方
非連結のテキストボックスにあるテーブルの最大値をフォームを開いたときに入力したかっただけだが、
#Name?とか、コンパイルエラー
がでて路頭に迷った。
結局、Meの使い方が間違っていただけのようだ。これで1時間をロスした。
Private Sub Form_Load()
input_ID = DMax("ID", "dbo_data_id")
End Sub
Me.input_ID = DMax("ID", "dbo_data_id")
とかやっていたらダメだった訳です。
以下参考情報
●完全な記述とMeキーワード
サンプルフォームfrm_sample詳細部分の背景をフォームを開いた時に変更するプロシージャを記述。
●完全な記述
Private Sub Form_Open(Cancel As Integer)
Forms!frm_sample.詳細.BackColor = 123
End Sub
●Meキーワードの利用
Private Sub Form_Open(Cancel As Integer)
Me.詳細.BackColor = 123
End Sub
●Meキーワードの利点
同じ記述で他のフォームに流用することがでる。高速に動作。
●Meキーワードの欠点
PublicのFunctionやSubプロシージャ内で使うことができない。
Function、Subプロシージャ内では、「何処の誰それ」と特定する必要がある。
この例では、Forms!frm_sample.詳細.BackColor = 123 の形式で記述
オブジェクトまたはクラスがこのイベントセットをサポートしていません
突然、マクロのある一部分の部分で、このエラーが出てきた。
検索かけると、違うバージョンのアクセスがはいっているから、片方を抜けば治るとか。
VBのランタイム版をいれればなおるとか。
権限を管理者権限・・・いままでちゃんと動いていたのに???
いろいろとありましたが、結局、
ファイル>>最適化と修復
で治りました。
重複入力時にメッセージを出す
フォームからデータを入力するときに、テーブルの重複なしにしておくと入力できないと表示がでて完全に入力させないようにできるが、同じテーブルで合理的に利用したいときに、フラグで完了時は、そのレコードは無効にしている場合がある。
しかし、入力規制で、重複なしにしておくと、容赦なく入力ができない様になっている。
そこで、フォームに入力窓に設定して重複時はメッセージを表示するようにする。
フォームのテキストボックスの名前を[txt受付番号]
[txt受付番号]のプロパティの[データ]タブにある[入力規則]に以下のように書き込みます。
DCount("*","T_申込","[受付番号]=[txt受付番号]")=0
エラーメッセージの欄には、「重複していますので確認してください。」などの文章を記入する。
これで、重複している場合は、エラーメッセージが表示され、「OK」ボタンをクリックしないと先に進めなくなる。
重複登録チェック
フォームに非連結のテキストボックスがあり、そのデータをレコードに登録する。
しかし、同じデータがある時は、登録できないようにしたい。
簡単なクエリーとVBAで実現できた。
クエリは、選択クエリで、重複しては困るフィールドを選択して抽出できるようにしておけばいい。testクエリとする。
あとは、VBAの中に下記を書き込んでおけば、メッセージがでて、VBAも停止する。
If DCount("*", "test") <> 0 Then
MsgBox "既に登録があります。ご確認ください。"
Exit Sub
End If
こんな感じで使います。
Private Sub HNO検索_AfterUpdate()
If DCount("*", "dbo_mst_parts", "HNO=HNO検索") = 0 Then
MsgBox "存在するデータがありません。ご確認ください。"
Exit Sub
End If
更新ができない余計なスペース
SQL = "SELECT * FROM dbo_accounts WHERE MNO =" & Me!edit_NO & ""
Debug.Print edit_NO
の内容をイミディエイトウインドウでみると、半角スペースが入ってちゃんと検索がされない状態になります。
なぜか???
edit_NO のテキストボックスの書式を「数値型」にかえるだけで解決した。
テキストボックスの書式が関係するなんて・・・。注意しなければならない。
それでも変なスペースが入ってしまう時は、関数を使って空白スペースを削除する方法がある。
参考
LTrim
(文字列)[文字列]の先頭から空白を取り除く
RTrim
(文字列)[文字列]の末尾から空白を取り除く
Trim
(文字列)[文字列]の先頭と末尾から空白を取り除く
rs.RecordCount 型が一致しません
普通に動いていたのに、Office365のACCESSで動かしたら、
ココに注意
rs.RecordCount の部分でVBAエラー
です。なんで?
ADODB.Recordset.RecordCount プロパティは、32ビット版ではLong型ですが、64ビット版ではLongLong型となるようです。
#If Win64 Then
' 64ビット版のとき
Dim
cnt
As
LongLong
#Else
' 32ビット版のとき
Dim
cnt
As
Long
#End If
cnt = rs.RecordCount
上記の64ビット版と32ビット版の両方にしたらエラーが消えました。