Невозможно задать имена рабочих листов для переменных, возвращает «Ошибка времени выполнения« 9 »: нижний индекс вне диапазона» - PullRequest
0 голосов
/ 02 апреля 2019

Я работаю над проектом по фильтрации нескольких таблиц / столбцов. Первым шагом является определение количества строк со значениями в первом столбце таблицы «Данные радужной оболочки» и построение вокруг этого (так как это будет снова использоваться с новыми данными, удалено, выполнено снова и т. Д.). У меня сейчас код не работает, и возвращает ошибку «Ошибка времени выполнения« 9 »: индекс вне диапазона». Поскольку во многих примерах используется универсальный «Лист1», я попытался скопировать / вставить те же данные в новый лист с именем «Лист1», и это было успешно. К сожалению, переименование листов, по мнению моего руководителя, не вариант. Возможно, я мог бы немного изменить его, но ненамного.

Итак, мой вопрос, это проблема именования с пробелом в «Iris Data»? Какой-то другой вопрос?

Я попытался изменить на «IrisData» или «Iris_Data», и это также возвращает ошибку RunTime 9. Я также попытался установить «Sheet1» = «Iris Data», и это также возвращает ошибку RunTime 9.

Sub Helping_Out_Alex()

Dim wb As Workbook              'identify source workbook
Dim IrisData As Worksheet       'identify Iris Data worksheet
Dim xlApp As Object             'tie workbook/worksheet into an object
Dim lastRow As Long             'identify numerical value for # of rows
Dim Sheet1 As String            'issue with spaces in name, work-around

Sheet1 = "Iris Data"            'Added this as a work around

Set xlApp = CreateObject("Excel.Application")    'set variable to object                                                         
Set wb = 
xlApp.Workbooks.Open("\\uk1.group.internal\data\PERSONAL\GorowsR\My 
Documents\Equiniti\Helping_Out_Alex.xlsm")       'set varaible to workbook

Set IrisData = wb.Worksheets("Sheet1")           'set variable to first sheet

With xlApp                 'Example code                                                   
    .Visible = True        'Example code                                             
    .EnableEvents = True   'Example code                                           
End With                   'Example code                                           

With ActiveSheet
lastRow = IrisData.Cells(.Rows.Count, "A").End(xlUp).Row            'This is the variable I'm trying to define as a number so I know the range each time
    MsgBox "the value is" & lastRow
End With

End Sub

Ответы [ 2 ]

3 голосов
/ 02 апреля 2019

Линия

 Set IrisData = wb.Worksheets("Sheet1") 

указывает Excel указать на лист, имя которого (как показано на вкладке Excel в нижней части экрана) - Sheet1. Вы также можете указать лист по его кодовому имени (показан в окне проводника проекта vbeditor), так что

Set IrisData = wb.Worksheets(Fred)

Или по номеру индекса, где первый лист слева равен 1: так

 Set IrisData = wb.Worksheets(1)

Похоже, ваша проблема в том, что ваш лист называется "Iris Data" так что вам нужно либо

   Set irisdata = wb.worksheets("Iris Data")

или (возможно, проще), поскольку вы говорите, что это первый лист, просто

  Set IrisData = wb.Worksheets(1)      
2 голосов
/ 02 апреля 2019

Вы можете получить доступ к листу по его имени (строка) или по номеру (целое число). Пробел в имени не проблема, вы можете получить к нему доступ по имени.

Все это должно сделать:

Const sheetName = "Iris Data" 
Set IrisData = wb.Worksheets(sheetName)
- or - 
Set IrisData = wb.Worksheets("Iris Data")
- or - 
Set IrisData = wb.Worksheets(1) ' This assumes that the sheet is the 1st sheet in  Workbook.

Может быть, вы боретесь за

Sheet1 = "Iris Data" 
...
Set IrisData = wb.Worksheets("Sheet1") 

Там вы устанавливаете (строковую) переменную с именем Sheet1 для имени листа, но позже вы не получаете доступ к листу с именем, которое хранится в переменной, а к листу с именем "Sheet1" ( и, как он отсутствует, вы получаете ошибку времени выполнения 9). Просто опустите кавычки, чтобы добиться цели (однако я бы рекомендовал использовать другое имя переменной).

Set IrisData = wb.Worksheets(Sheet1) 
...