Excel 2007 VBA-运行时错误1004

Excel 2007 VBA-运行时错误1004,excel,vba,Excel,Vba,我有一个Excel 2007工作簿,我正在使用它连接到MSSQL 2008服务器以下拉一些名称,我能够成功地实现这一点。我的问题是,我希望使用从SQL Server获取的名称创建新的工作表 我已经能够创建一个结果数组,并在数组中迭代创建一个新的工作表,但无法让它重命名工作表,VB返回一个运行时错误1004:应用程序定义错误或对象定义错误。我创建了一个msgbox,当Im在其中迭代时输出数组结果,并且msgbox中显示的名称是正确的,并且数量正确 有没有人能指出我的代码有什么问题,或者解释这个错误

我有一个Excel 2007工作簿,我正在使用它连接到MSSQL 2008服务器以下拉一些名称,我能够成功地实现这一点。我的问题是,我希望使用从SQL Server获取的名称创建新的工作表

我已经能够创建一个结果数组,并在数组中迭代创建一个新的工作表,但无法让它重命名工作表,VB返回一个运行时错误1004:应用程序定义错误或对象定义错误。我创建了一个msgbox,当Im在其中迭代时输出数组结果,并且msgbox中显示的名称是正确的,并且数量正确

有没有人能指出我的代码有什么问题,或者解释这个错误的含义和解决方法?我的代码在将activesheet重命名为数组中的名称的行上出错。如果要将名称设为I的值,则会重命名activesheet

以下是我正在使用的代码:

    Public Sub Dataextract()
      ' Create a connection object.
      Dim cnPubs As ADODB.Connection
      Set cnPubs = New ADODB.Connection
      ' Provide the connection string.
      Dim strConn As String

      strConn = "Source=OLEDB;Provider=SQLOLEDB.1;Integrated Security=SSPI;" _
                "Persist Security Info=True;Data Source={REMOVED};"
      'Now open the connection.
      cnPubs.Open strConn
      ' Create a recordset object.
      Dim rsPubs As ADODB.Recordset
      Set rsPubs = New ADODB.Recordset
      With rsPubs
        ' Assign the Connection object.
        .ActiveConnection = cnPubs
        ' Extract the required records.
        ' The Select Query to display the data
        .Open "SELECT DISTINCT [databaseName] FROM [DBMonitor].[dbo].[dbGrowth]"
        ' Copy the records into cell A2 on Sheet1.
        'Sheet1.Range("A2").CopyFromRecordset rsPubs
        vArray = rsPubs.GetRows()
        rowsreturned = UBound(vArray, 2) + 1
        For i = 0 To rowsreturned - 1
           ' Added the following to see if it errors anywhere else, or if it is
           ' just the one record.
           'On Error Resume Next
           Sheets.Add After:=Sheets(Sheets.Count)
           ' FAILS HERE....
           ActiveSheet.Name = vArray(0, i)
           MsgBox (i & " " & vArray(0, i))
        Next i
       ' Tidy up
       .Close
     End With
     cnPubs.Close
     Set rsPubs = Nothing
     Set cnPubs = Nothing
  End Sub
任何人能提供的任何帮助都将不胜感激

谢谢


Matt

设置名称可能失败的三个原因:

  • 您的工作簿中是否已有同名的工作表?
    尝试设置已在使用的名称将导致“1004”

  • 可能您试图设置的名称包含一些非法字符:
    :/\*?[]
    是不允许的

  • 也不允许使用空字符串或超过31个字符的字符串


  • 感谢您提供的信息,名称没有任何特殊字符,它们的长度都小于20个字符,但是数据库字段是varchar(50),当应用名称时,它试图插入50个字符。现在,我修改了数据库结构,使其仅包含30个字符(名称永远不会大于此字符),并且还使用了Trim()。非常感谢您提供的信息,非常感谢。谢谢你的反馈,你永远不知道什么时候会有人遇到同样的问题。。。