2016-11-29 161 views
0

我已经继承了一个vba项目,并且最近已经开始用vba开发我的脚了。运行我最近编辑过的代码的一部分时,我发现了一个错误Compile Error Object Required。由于这是一个编译错误,我无法在运行时看到哪一行正在抛出错误。我修改的唯一代码是ElseIf块在下面的代码...所有帮助表示赞赏。需要VBA编译错误对象

  If tableType = 1 Then 'Resident/Local 
       Set db = CurrentDb 
       db.Execute "ALTER TABLE [" & TableName & "] ALTER COLUMN [" & KeyColumn & "] COUNTER(1,1)" 
      ElseIf tableType = 4 Then 
       Set conn = New ADODB.Connection 
       Dim connectionString As String 
       Set connectionString = DLookup("[Connect]", "[MSysObjects]", "[Name] = '" & TableName & "'") 
       conn.connectionString = connectionString 
       conn.Open 
       Dim cmd As ABODB.Command 
       Set cmd = New ADODB.Command 
       cmd.ActiveConnection = conn 
       cmd.CommandText = "ALTER TABLE [" & TableName & "] ALTER COLUMN [" & KeyColumn & "] COUNTER(1,1)" 
       cmd.Execute 
       conn.Close 
      Else 'Linked Table 
       Set wsp = DBEngine.Workspaces(0) 
       Set db = wsp.OpenDatabase(DLookup("[Database]", "[MSysObjects]", "[Name] = '" & TableName & "'")) 
       db.Execute "ALTER TABLE [" & TableName & "] ALTER COLUMN [" & KeyColumn & "] COUNTER(1,1)" 'reset the autonumber column value 
      End If 

回答

2

删除来自该行的Set

Set connectionString = DLookup("[Connect]", "[MSysObjects]", "[Name] = '" & TableName & "'") 

Set仅用于分配对象引用,并connectionStringString

为了将来的参考,如果您使用菜单中的Debug-> Compile,VBE将突出显示带有编译错误的行。

-1

一般来说,如果我写的,如果声明Ø将有它这样的

If tableType = 1 Then 'Resident/Local 
      Set db = CurrentDb 
      db.Execute "ALTER TABLE [" & TableName & "] ALTER COLUMN [" & KeyColumn & "] COUNTER(1,1)" 
     Else 
If tableType = 4 Then 

给一个庆典。可能只是蜂格式错误

+3

OP代码中没有“格式化”(语法?)错误,而不是错误地使用“Set”关键字来分配字符串。另外,使用嵌套的'If/Else/If''语句而不是'ElseIf'会导致不必要的复杂/嵌套的'If'块并阻碍可读性和可维护性(意大利面代码) –