Excel 2007 VBA - Ошибка выполнения 1004 - PullRequest
3 голосов
/ 09 августа 2009

У меня есть книга 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

Буду очень признателен за любую помощь.

Спасибо

Мэтт

1 Ответ

4 голосов
/ 09 августа 2009

Три идеи, почему установка имени может быть неудачной:

  1. У вас уже есть лист с таким именем в вашей рабочей тетради?
    Попытка установить имя, которое уже используется, приведет к '1004'

  2. Возможно, имя, которое вы пытаетесь установить, содержит недопустимые символы:
    : / \ * ? [ ] не допускаются

  3. Пустая строка или строка длиной более 31 символа не допускается, либо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...