Je dispose d'un classeur Excel 2007 que j'utilise pour me connecter à un serveur MSSQL 2008 afin d'extraire certains noms, ce que je peux faire avec succès. Mon problème est que je voudrais créer de nouvelles feuilles de calcul à partir des noms qu'il obtient de SQL Server.Excel 2007 VBA - Erreur d'exécution 1004
J'ai été capable de créer un tableau des résultats et de parcourir le tableau en créant une nouvelle feuille, mais je n'arrive pas à le renommer, VB renvoie une erreur d'exécution de 1004: Défini par l'application ou par l'objet Erreur. J'ai créé un msgbox qui produit les résultats du tableau comme Im iterating à travers elle et les noms qui sont affichés dans le msgbox sont corrects et de la bonne quantité.
Quelqu'un peut-il signaler des problèmes avec mon code ou peut-être expliquer ce que cette erreur signifie et comment le résoudre? Mon code est erroné sur la ligne où la feuille active est renommée en le nom dans le tableau. Si je devais donner au nom la valeur de i, la feuille d'activité est renommée.
Voici le code que je utilise:
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
Toute aide tout le monde peut fournir sera grandement appréciée.
Merci,
Matt
Merci pour l'information, le nom n'a pas de caractères spéciaux et ils ont tous moins de 20 caractères, mais le champ de la base de données était un varchar (50), lorsque le nom était appliqué, il essayait d'insérer 50 caractères. J'ai maintenant modifié la structure de la base de données pour qu'elle ne soit que de 30 caractères (le nom ne sera jamais plus grand que cela), et j'ai aussi utilisé Trim(). Merci tas pour l'information, il est grandement apprécié. Matt – Lima
Merci pour les commentaires, on ne sait jamais quand quelqu'un rencontrera le même problème ... – Treb