2009-08-09 11 views
3

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

Répondre

4

Trois idées pourquoi la définition du nom peut échouer:

  1. Avez-vous déjà une feuille avec ce nom dans votre classeur?
    Essayer de définir un nom qui est déjà en cours d'utilisation se traduira par une « 1004 »

  2. Peut-être que le nom que vous essayez de définir contient des caractères illégaux:
    :/\ * ? [ ] ne sont pas autorisés

  3. Un vide chaîne ou une chaîne de plus de 31 caractères n'est pas autorisée, soit

+0

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

+0

Merci pour les commentaires, on ne sait jamais quand quelqu'un rencontrera le même problème ... – Treb

Questions connexes