パソコン(ソフト)

【Access】テキストに載ってないエラー回避Tips6選

実行時エラー3075演算子がありません

 

 

実行時エラー3075演算子がありません

 

調べているうちに、下記のような製品名コードっていうのが、エラーが出てない時は、数値形式でしたが、今回は、テキスト形式なのです。
そういう場合は、文字列型の場合は、シングルコーテーションが必要なのです。

Me.受注製品コード = DLookup("製品名コード", "dbo_mst_product", "製品名コード=" & Me.製品コード検索)

 

じゃなくて、

 

Me.受注製品コード = DLookup("製品名コード", "dbo_mst_product", "製品名コード='" & Me.製品コード検索 & "'")

 

結構しらべるのに大変だった。

 

以前まとめたことがあるので、下記も参考にしてください。

 

【Access】Dlookupなどで、文字列、数値、and検索時の注意

 

 

 

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ビット版の両方にしたらエラーが消えました。

 

 

 

 

-パソコン(ソフト)
-, , , ,

Copyright© PCTips , 2019 All Rights Reserved.