2014-02-07 6 views
0

В настоящее время я пытаюсь извлечь определенные данные из книги, чтобы поместить в другую книгу. У меня есть рабочая книга, чтобы открыть с помощьюНевозможно получить диапазон рабочего листа excel

Application.GetOpenFile  

, а затем присвоить это книге. Затем я назначаю лист активной рабочей таблице из этой книги.

Моя проблема связана с попыткой получить диапазон рабочего листа. Я использую массив строк (как

columnLetter(0) = "A" 
    columnLetter(1) = "B" 

и так далее, чтобы попытаться проверить через все столбцы для определенных строк (которые перечислены в заявлении, если с тонной «или» с. специфические строк варьируется от файла к файлу, так что мой план был поиск первой строки, затем второй строки, и т.д., пока не находит одну из строк Итак, я использую это:.

lastRow = brokerSheet.Range(columnLetter(i) & Rows.Count).End(xlUp).Row 

чтобы получить количество строк в этом столбце. Когда я запускаю программу, я получаю ошибку

Method 'Range' of object '_Worksheet' failed 

сверху эта линия. Я предполагаю, что это потому, что я пытаюсь использовать

 columnLetter(i) 

, который имеет через R, возложенные на него, вместо «A» или что-то подобное для имени столбца. Однако я попытался использовать 1, 2, 3 и т. Д. Для представления первого столбца, второго столбца, третьего столбца ... но это не сработало. На листе всего около 90 строк (хотя некоторые из них будут иметь 400, как только я получу эту работу). Есть ли другой способ сделать это? Я мог бы написать «A» «B» «C» и т. Д. Для всех из них, но должен быть лучший способ указать, какой столбец проверить, чем это.

+0

каких расширения ваших обоих файлов? Есть ли один с расширением 'xls' (excel 2003)? Попробуйте использовать 'lastRow = brokerSheet.Range (columnLetter (i) & brokerSheet.Rows.Count) .End (xlUp) .Row' –

+0

Да, это' xls'. Пробовал это, получив ту же проблему. Я понял, что это было с 'columnLetter (i)'. – PointXIV

+0

попробуйте использовать 'lastRow = brokerSheet.Range (« A »& brokerSheet.Rows.Count) .End (xlUp) .Row'. Будет ли это работать? –

ответ

1

Почему бы не попробовать создать строковый объект strRange и инъекционное это в Range():

strRange = columnLetter(i) & CStr(Rows.Count) 
lastRow = brokerSheet.Range(strRange).End(xlUp).Row 

Это должно работать

+0

Да!Это сработало и сделало его немного чище, чем другие решения. Благодаря! – PointXIV

Смежные вопросы