У меня есть книга Excel 2007, которую я использую для подключения к серверу MSSQL 2008, чтобы вывести некоторые имена, и я могу добиться этого успешно. Моя проблема в том, что я хотел бы, чтобы новые рабочие листы создавались из имен, которые он получает от SQL Server.
Я смог создать массив результатов и перебрать массив, создав новый лист, но не могу заставить его переименовать лист, VB возвращает ошибку времени выполнения 1004: ошибка приложения или объекта , Я создал msgbox, который выводит результаты массива, так как я перебираю его, а имена, отображаемые в msgbox, правильные и правильного количества.
Кто-нибудь может указать на какие-либо проблемы с моим кодом или, возможно, объяснить, что означает эта ошибка и как ее устранить? Мой код содержит ошибку в строке, где активный лист переименовывается в имя в массиве. Если бы я присвоил имени значение 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
Буду очень признателен за любую помощь.
Спасибо
Мэтт