Excel 2007 VBA - 运行时错误1004
问题描述:
我有一个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
任何帮助,任何人都可以提供将不胜感激。
感谢,
马特
答
三个想法,为什么设置名称可能失败:
你已经在你的工作簿名称的表?
试图设置一个名称已在使用中会导致“1004”也许您正试图设置的名称包含了一些非法字符:
:/\ * ? [ ]
不准空字符串或超过31个字符的字符串是不允许的,无论是
感谢您的信息,名字没有必须任何特殊字符,他们在那里所有长度小于20个字符,但数据库中的字段是一个varchar(50),当名字被应用时,它试图插入50个字符。我现在修改了数据库结构,使它只有30个字符(名字永远不会比这更大),并且我还使用了Trim()。 感谢信息堆,它是不胜感激。 Matt – Lima 2009-08-09 12:28:53
感谢您的反馈,您永远不知道何时会有人遇到同样的问题... – Treb 2009-08-09 17:12:46