2009-08-09 59 views
3

私はいくつかの名前をプルダウンするためにMSSQL 2008サーバーに接続するために使用しているExcel 2007ブックを持っていますが、これを正常に達成することができます。私の問題は、新しいワークシートをSQL Serverから取得した名前から作成したいということです。Excel 2007 VBA - 実行時エラー1004

私は結果の配列を作成し、新しいシートを作成する配列を反復することができましたが、シートの名前を変更できませんでした。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 

:ここ

は、私が使用していたコードです。

おかげで、

マット

答えて

4

三のアイデアなぜ名前が失敗することがあります設定:

  1. は、あなたはすでに、ブック内にその名前のシートを持っていますか?
    既に使用されている名前は、「1004」

  2. になります設定しようとすると、たぶん、あなたが設定しようとしている名前は、いくつかの不正な文字が含まれています
    :/\ * ? [ ]が空

  3. を許可されていません文字列または31文字を超える文字列は許可されていません

+0

情報をいただきありがとうございます。名前には特別な文字がありません。長さは20文字未満ですが、データベースフィールドvarchar(50)でした。名前が適用されていたときに、50文字を挿入しようとしていました。私はデータベース構造を30文字に変更しました(この名前はこれより大きくなることはありません)。また、Trim()も使用しました。 情報のおかげで、それは非常に感謝しています。 Matt – Lima

+0

フィードバックをお寄せいただきありがとうございます。誰かが同じ問題に遭遇する時期は決してありません。 – Treb

関連する問題