2009-08-09 271 views
3

我有一個Excel 2007工作簿,我正在使用它連接到MSSQL 2008服務器以拉下一些名稱,我能夠成功實現此目標。我的問題是我想要從SQL Server獲得的名稱創建新的工作表。Excel 2007 VBA - 運行時錯誤1004

我已經能夠創建一個結果數組並迭代創建一個新工作表的數組,但無法讓它重新命名工作表,VB返回一個1004的運行時錯誤:應用程序定義或對象定義錯誤。我創建了一個msgbox,輸出數組結果作爲Im遍歷它,並且msgbox中顯示的名稱是正確的且數量正確。

是否有人能夠指出我的代碼有任何問題,或者可能解釋這個錯誤意味着什麼以及如何解決它?我的代碼在activesheet被重命名爲數組中名稱的行上出錯。如果我要將名稱作爲i的值,則重命名活動頁面。

這裏是我使用的代碼:

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 

任何幫助,任何人都可以提供將不勝感激。

感謝,

馬特

回答

4

三個想法,爲什麼設置名稱可能失敗:

  1. 你已經在你的工作簿名稱的表?
    試圖設置一個名稱已在使用中會導致「1004」

  2. 也許您正試圖設置的名稱包含了一些非法字符:
    :/\ * ? [ ]不準

  3. 空字符串或超過31個字符的字符串是不允許的,無論是

+0

感謝您的信息,名字沒有必須任何特殊字符,他們在那裏所有長度小於20個字符,但數據庫中的字段是一個varchar(50),當名字被應用時,它試圖插入50個字符。我現在修改了數據庫結構,使它只有30個字符(名字永遠不會比這更大),並且我還使用了Trim()。 感謝信息堆,它是不勝感激。 Matt – Lima 2009-08-09 12:28:53

+0

感謝您的反饋,您永遠不知道何時會有人遇到同樣的問題... – Treb 2009-08-09 17:12:46

相關問題