У меня есть книга Excel 2007, которую я использую для подключения к серверу MSSQL 2008, чтобы вытащить некоторые имена, я могу добиться этого. Моя проблема в том, что я хотел бы, чтобы новые рабочие листы были созданы из имен, которые он получает от SQL Server.Excel 2007 VBA - Ошибка времени выполнения 1004
Я смог создать массив результатов и выполнить итерацию по массиву, создав новый лист, но не могу его переименовать, 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
Спасибо за информацию, имя не имеет никаких специальных символов, и они имеют длину менее 20 символов, однако поле базы данных был varchar (50), когда имя было применено, оно пыталось вставить 50 символов. Теперь я изменил структуру базы данных так, чтобы она составляла всего 30 символов (имя никогда не будет больше этого), и я также использовал Trim(). Спасибо за кучу информации, мы очень благодарны. Matt – Lima
Спасибо за отзыв, вы никогда не знаете, когда кто-то столкнется с одной и той же проблемой ... – Treb