2016-11-28 8 views
2

私はVBAプロジェクトを継承しており、受信しているエラーをデバッグしようとしています:Invalid use of Null。しばらくすると、エラーが発生している場所がわかりましたが、問題の特定の原因や解決策をまだ見つけられていません。 (例外を投げる行はコメントで注釈されている)は、次のsnippitを参照してください:私はTableName変数を検査して、それがnullでなく、それが有効なテーブル名ですVBA無効なnullの使用

Dim db As Database, wsp As Workspace 
    Dim retVal As Variant 
    Dim tableType As Long 

    'Check to see if the table name exists in the zLinked_Tables table; if it does, that means its a SQL table 
    If DCount("*", "[zLinked_Tables]", "[LocalName] = '" & TableName & "' AND [ObjectType] = 'Table'") > 0 Then 
     'SQL Table 
     retVal = ExecuteSPT("TRUNCATE TABLE [" & TableName & "]", 0) 'truncate the table via passthrough query on server 
     If KeyColumn <> "" Then 
      retVal = ExecuteSPT("DBCC CHECKIDENT([" & TableName & "],RESEED,1)", 0) 'reset the identity column value via passthrough query on server 
     End If 
    Else 
     'MS Access Table 
     tableType = DLookup("[Type]", "[MSysObjects]", "[Name] = '" & TableName & "'") 
     DoCmd.SetWarnings False 
     DoCmd.RunSQL "DELETE * FROM [" & TableName & "]" 'delete all records from table 
     If KeyColumn <> "" Then 
      DoCmd.SetWarnings True 
      If tableType = 1 Then 'Resident/Local 
       Set db = CurrentDb 
       db.Execute "ALTER TABLE [" & TableName & "] ALTER COLUMN [" & KeyColumn & "] COUNTER(1,1)" 
      Else 'Linked Table 
       Set wsp = DBEngine.Workspaces(0) 
       Set db = wsp.OpenDatabase(DLookup("[Database]", "[MSysObjects]", "[Name] = '" & TableName & "'")) 'ERROR THROWN ON THIS LINE 
       db.Execute "ALTER TABLE [" & TableName & "] ALTER COLUMN [" & KeyColumn & "] COUNTER(1,1)" 'reset the autonumber column value 
      End If 
      DoCmd.SetWarnings False 
      Set db = Nothing 
     End If 
    End If 
    Exit Function 

答えて

2

あなたのDLookupはMSYSObjectsで「データベース」フィールドには値(NULL)を持っていない行を返します。直下のウィンドウに次のように入力して実行します。その可能性を可能にするコードを追加する必要があります。

完全なパスを取得しようとしていますか?

?(DLookup("[Database]", "[MSysObjects]", "[Name] = '" & "Table1" & "'")) 
2

がいくつかありますこの行で起こっている。 TableNameにヌルをチェックすることに加えて、wspもヌルですか?何らかの理由でSet wsp = DBEngine.Workspaces(0)が失敗しますか?

dlookupは失敗していますか? DLookup("[Database]", "[MSysObjects]", "[Name] = '" & TableName & "'")。それはあなたが表示されるエラーを与えるwsp.OpenDatabase()nullを渡していることを意味nullの場合:

enter image description here

関連する問題