Access (VBA)

Access VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Pro : Access 2013)
Access2013で実行時エラー3265が発生します。対処方法を教えてください。
投稿日時: 20/06/23 16:36:20
投稿者: tekuteku5050

Windows10を32bit版から64bit版にアップグレードしたところ、プログラム作成中だったAccess2013で実行時エラー3265が発生するようになりました。
他のPC(Win10の64bit&Office64bit)数台で確認しましたが、同じプログラムで実行時エラーは発生しません。原因不明で困っております。対処方法のアドバイスをお願いいたします。
 
今までに実施・確認した内容
1.参照設定を他の正常に動作するPCと合わせました。→NG※変化なし。
2.Windowsupdateを実施しました。→NG※変化なし。
3.Office2013の64bit版をアンインストールして、Office2013の32bit版をインストールしました。→NG※変化なし。

回答
投稿日時: 20/06/24 10:01:28
投稿者: sk

引用:
Windows10を32bit版から64bit版にアップグレードしたところ、
プログラム作成中だったAccess2013で実行時エラー3265が発生するようになりました。
他のPC(Win10の64bit&Office64bit)数台で確認しましたが、
同じプログラムで実行時エラーは発生しません。

VBA のコードの実行中に発生しているエラーなのであれば、
具体的にどのようなコードを記述していて、どのステートメントが
実行されようとした際にそのエラーが発生するのかを明記されることを
お奨めします。

投稿日時: 20/06/24 16:04:47
投稿者: tekuteku5050

sk様、有難うございます。
下記が実行時エラーが出るコードです。
15行目の⇒のところで実行時エラー3265が発生します。
 
 
Private Sub コマンド3_Click()
 
    Dim cn1 As ADODB.Connection '「Q_Dummy支給部材_集計」クエリ用
    Dim rs1 As ADODB.Recordset
   
    Dim cn2 As ADODB.Connection '「部品DATA」テーブル用
    Dim rs2 As ADODB.Recordset
 
    Set cn1 = CurrentProject.Connection '「Q_Dummy支給部材_集計」クエリ用
    Set rs1 = New ADODB.Recordset
   
    Set cn2 = CurrentProject.Connection '「部品DATA」テーブル用
    Set rs2 = New ADODB.Recordset
 
    rs1.Open "Q_Dummy支給部材_集計", cn1, adOpenKeyset, adLockOptimistic
 
    rs2.Open "部品DATA", cn2, adOpenKeyset, adLockOptimistic
 
    rs1.MoveFirst
     
          Do Until rs1.EOF
            rs2.AddNew
            ⇒rs2!W_子プロジェクト番号 = rs1!子プロジェクト番号
              rs2!W_品目コード = rs1!品目コード
              rs2!W_品目名称 = rs1!品目名称
              rs2!W_規格_型番 = rs1!規格_型番
              rs2!W_手配数 = rs1!手配数の合計
              rs2!W_オーダ番号 = rs1!オーダ番号
              rs2!W_オーダ明細番号 = rs1!オーダ明細番号
              rs2!W_C_DAS支給日 = rs1!C_DAS支給日
              rs2!W_レベル = rs1!レベル
              rs2!W_順序 = rs1!順序
              rs2!W_プロジェクト内連番 = rs1!プロジェクト内連番
         
            rs2.Update
            rs1.MoveNext
           Loop
 
    rs1.Close
    Set rs1 = Nothing
    cn1.Close
    Set cn1 = Nothing
   
    rs2.Close
    Set rs2 = Nothing
    cn2.Close
    Set cn2 = Nothing
 
    End sub

回答
投稿日時: 20/06/24 16:49:27
投稿者: sk

引用:
15行目の⇒のところで実行時エラー3265が発生します。

引用:
rs1.Open "Q_Dummy支給部材_集計", cn1, adOpenKeyset, adLockOptimistic

引用:
rs2.Open "部品DATA", cn2, adOpenKeyset, adLockOptimistic

引用:
rs2!W_子プロジェクト番号 = rs1!子プロジェクト番号

・[Q_Dummy支給部材_集計]には[子プロジェクト番号]という名前の
 フィールドが定義されていない(ので見つからない)。
 
・[部品DATA]には[W_子プロジェクト番号]という名前の
 フィールドが定義されていない(ので見つからない)。
 
実行時エラー 3265 の原因として通常考えられるのは
以上のいずれか、または両方です。
 
とりあえず、コード上で指定されている通りの名前のフィールドが
[Q_Dummy支給部材_集計]及び[部品DATA]に存在しているか否かを
確認されることをお奨めします。

投稿日時: 20/06/24 17:26:01
投稿者: tekuteku5050

sk様
アドバイス有難うございます。
ご指摘のフィールドの定義ですが、この名前のフィールドは存在します。
また、他のPCではエラーが発生しません。何故か私のPCのみ実行時エラーが出るようです。

回答
投稿日時: 20/06/24 18:19:22
投稿者: sk

引用:
ご指摘のフィールドの定義ですが、この名前のフィールドは存在します。

では念のため、以下のプロシージャを実行し、新規作成された Excel ブックの
ワークシート上に展開された照合結果をご確認下さい。
 
(標準モジュール)
---------------------------------------------------------------
Option Compare Database
Option Explicit

Sub GetFieldList()

    Debug.Print CheckFieldName("Q_Dummy支給部材_集計", "子プロジェクト番号")
    Debug.Print CheckFieldName("部品DATA", "W_子プロジェクト番号")

End Sub

Private Function CheckFieldName(TableName As String, FieldName As String) As Boolean
On Error GoTo Err_CheckFieldName

    Dim xlsApp As Object
    Dim xlsBook As Object
    Dim xlsWorksheet As Object

    Dim cn As ADODB.Connection
    Dim rs As ADODB.Recordset
    Dim fld As ADODB.Field
    
    Dim lngRow As Long
    Dim blExist As Boolean
    
    CheckFieldName = False
    
    Set cn = CurrentProject.Connection
    
    Set rs = New ADODB.Recordset
    With rs
        Set .ActiveConnection = cn
        .CursorLocation = adUseClient
        .CursorType = adOpenStatic
        .LockType = adLockReadOnly
        .Source = TableName
        .Open
    End With
    
    On Error Resume Next
    Set xlsApp = GetObject(, "Excel.Application")
    If Err.Number <> 0 Then
        Err.Clear
        On Error GoTo Err_CheckFieldName
        Set xlsApp = CreateObject("Excel.Application")
        xlsApp.Visible = True
    End If
    On Error GoTo Err_CheckFieldName
    
    xlsApp.ScreenUpdating = False
    
    Set xlsBook = xlsApp.Workbooks.Add
    Set xlsWorksheet = xlsBook.Worksheets(1)
    
    lngRow = 1
    
    With xlsWorksheet
        .Name = "フィールドリスト"
        .Cells(lngRow, 1).Value = "オブジェクト名:"
        .Cells(lngRow, 2).Value = TableName
        
        lngRow = lngRow + 1
        .Cells(lngRow, 1).Value = "検索フィールド名:"
        .Cells(lngRow, 2).Value = FieldName
        
        lngRow = lngRow + 2
        
        .Cells(lngRow, 1) = "フィールド名"
        .Cells(lngRow, 2) = "照合結果"
        
        For Each fld In rs.Fields
            lngRow = lngRow + 1
            .Cells(lngRow, 1).NumberFormat = "@"
            .Cells(lngRow, 1).Value = fld.Name
            .Cells(lngRow, 2).Value = (fld.Name = FieldName)
            If (blExist = False) And (fld.Name = FieldName) Then
                .Cells(lngRow, 2).Interior.Color = RGB(0, 255, 255)
                blExist = True
            End If
        Next
        
        .UsedRange.EntireColumn.AutoFit
        
        lngRow = lngRow + 2
        
        If blExist Then
            .Cells(lngRow, 1).Value = "[" & FieldName & "]という名前のフィールドが見つかりました。"
        Else
            .Cells(lngRow, 1).Value = "[" & FieldName & "]という名前のフィールドは見つかりませんでした。"
        End If
        
    End With
    
    xlsApp.UserControl = True
    
    CheckFieldName = blExist
    
Exit_CheckFieldName:
On Error Resume Next
    
    Set xlsWorksheet = Nothing
    Set xlsBook = Nothing
    xlsApp.ScreenUpdating = True
    Set xlsApp = Nothing
    
    Set rs = Nothing
    Set cn = Nothing
    
    Exit Function
    
Err_CheckFieldName:
    
    Dim strMsg As String
    
    strMsg = Err.Number & ": " & Err.Description

    Debug.Print strMsg
    MsgBox strMsg, vbCritical, "実行時エラー(CheckFieldName)"

    Resume Exit_CheckFieldName
End Function
---------------------------------------------------------------
 
また、可能であれば[Q_Dummy支給部材_集計]の
SQL ビューの内容を明記されることをお奨めします。

投稿日時: 20/06/25 08:29:11
投稿者: tekuteku5050

sk様
 
有難うございます。
照合結果は、以下のようになりました。
 
部品DATAの[W_子プロジェクト]が半角になっている為のようですね。
一番初めにこの半角を疑って、入力し直したはずなんですが。
ただ、他のPCでは何故エラーにならないのでしょうか?疑問です。
元々のExcelシートのフィールドが半角になっているので、そのまま読み込んでいたのですが、読み込み時に
他の名称(アルファベット)に変更した方が良さそうですね。
他にアドバイスがあればお願いします。
 
 
オブジェクト名:    Q_Dummy支給部材_集計
検索フィールド名:    子プロジェクト番号
    
フィールド名    照合結果
子プロジェクト番号    TRUE
品目コード    FALSE
品目名称    FALSE
規格_型番    FALSE
手配数の合計    FALSE
オーダ番号    FALSE
オーダ明細番号    FALSE
C_DAS支給日    FALSE
レベル    FALSE
順序    FALSE
プロジェクト内連番    FALSE
    
[子プロジェクト番号]という名前のフィールドが見つかりました。    
 
 
オブジェクト名:    部品DATA
検索フィールド名:    W_子プロジェクト番号
    
フィールド名    照合結果
部品ID    FALSE
W_子プロジェクト番号    FALSE
W_品目コード    FALSE
W_品目名称    FALSE
W_規格_型番    FALSE
W_手配数    FALSE
W_オーダ番号    FALSE
W_オーダ明細番号    FALSE
W_C_DAS支給日    FALSE
W_レベル    FALSE
W_順序    FALSE
W_プロジェクト内連番    FALSE
SEIBAN_ID    FALSE
受入れ日時    FALSE
受入れ者ID    FALSE
受入れ数    FALSE
ロケーション日時    FALSE
ロケーション者ID    FALSE
取付日時    FALSE
取付者ID    FALSE
バーコードNo    FALSE
    
[W_子プロジェクト番号]という名前のフィールドは見つかりませんでした。
 
[Q_Dummy支給部材_集計]のSQL ビューは、以下の通りです。
 
SELECT T_Dummy支給部品2.子プロジェクト番号 AS 子プロジェクト番号, T_Dummy支給部品2.品目コード, T_Dummy支給部品2.品目名称, T_Dummy支給部品2.[規格/型番] AS 規格_型番, Sum(T_Dummy支給部品2.手配数) AS 手配数の合計, T_Dummy支給部品2.[オーダ番号], T_Dummy支給部品2.[オーダ明細番号], T_Dummy支給部品2.[C-DAS支給日] AS C_DAS支給日, T_Dummy支給部品2.[レベル] AS レベル, T_Dummy支給部品2.順序, T_Dummy支給部品2.[プロジェクト内連番]
FROM T_Dummy支給部品2
GROUP BY T_Dummy支給部品2.子プロジェクト番号, T_Dummy支給部品2.品目コード, T_Dummy支給部品2.品目名称, T_Dummy支給部品2.[規格/型番], T_Dummy支給部品2.[オーダ番号], T_Dummy支給部品2.[オーダ明細番号], T_Dummy支給部品2.[C-DAS支給日], T_Dummy支給部品2.[レベル], T_Dummy支給部品2.順序, T_Dummy支給部品2.[プロジェクト内連番]
HAVING (((T_Dummy支給部品2.[オーダ番号]) Is Not Null) AND ((T_Dummy支給部品2.[オーダ明細番号]) Is Not Null))
ORDER BY T_Dummy支給部品2.順序;
 
 
 
 
    

回答
投稿日時: 20/06/25 09:44:03
投稿者: sk

引用:
部品DATAの[W_子プロジェクト]が半角になっている為のようですね。
一番初めにこの半角を疑って、入力し直したはずなんですが。
ただ、他のPCでは何故エラーにならないのでしょうか?疑問です。

半角文字と全角文字を区別するか否かは、それぞれの実行環境や、
データベースが新規作成された時点における照合順序の設定などによって
異なります。
 
恐らく、システム(または Access のオプション)における地域と言語に関する設定が、
他のコンピュータとはずれているのではないでしょうか。
 
引用:
元々のExcelシートのフィールドが半角になっているので、
そのまま読み込んでいたのですが、読み込み時に
他の名称(アルファベット)に変更した方が良さそうですね。

その環境の場合、アルファベットでも半角文字と全角文字は
区別されるはずですので、オブジェクトやフィールドの命名規則を
より厳格化されることが望ましいでしょう。
(ユーザーから提供されたブックの場合、その辺りの調整が難しいかも知れませんが)

投稿日時: 20/06/25 11:24:53
投稿者: tekuteku5050

sk様
 
有難うございます。
お蔭様で実行エラーが回避できました。
今年に入ってからAccessの勉強を本格的に初めて、今回のプログラムが最初に取り組んだシステムでした。
素人で何をやっても上手くいきませんでしたので、本当に助かりました。
Excelデータを読み込んだ後に、カタカナ表記のフィールド名をクエリで半角のアルファベットに変更しました。
一応、現在は解決しておりますが、ご指摘の通りアルファベットでも半角と全角がありますので、命名規則を厳格化させたいと思います。
本当に色々とお世話になり有難うございました。感謝、感謝です。
今後ともよろしくお願い致します。

投稿日時: 20/06/26 12:52:48
投稿者: tekuteku5050

当問題については、解決致しました。