Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/проблема достоверного определения последней записи в столбце - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
проблема достоверного определения последней записи в столбце
flutesa Дата: Воскресенье, 25.11.2012, 19:37 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 4
Репутация: 0 ±
Замечаний: 0% ±

Здравствуйте, дорогие Форумчане!

Здорово, пока писала первый вопрос, ответ на который найти отчаялась, поняла,
почему дебагер считает, что индекс вышел за пределы массива (Subscript out of range (Error 9))

Я хочу создать в папке кучу новых книг, количество их равняется значению, которое находится в последней заполненной ячейке 10го столбца в другой книге.

[vba]
Code
Sub MyNew()
        
      Dim i As Long
      Dim TNVrow, TNVcol As Integer
      Application.ScreenUpdating = 0
        
      folderAdress$ = "C:\ТНВ\"
      Workbooks.Open folderAdress$ & "Классификация.xls"
      Workbooks.Open folderAdress$ & "workTNV.xls"
        
      Workbooks("Классификация").Activate
      TNVrow = Cells(Rows.Count, 10).End(xlUp).Row 'выясняю номер строки последней ячейки в нужном столбце
      TNVcol = Cells(TNVrow - 1, 10).Value 'запоминаю значение по выясненному адресу ячейки - количество создаваемых книг
      TNVname = Cells(TNVrow - 1, 9).Value 'захватываю значение по соседству для формирования имени новой книги
         
        
      For i = 1 To TNVcol
          iStr = CStr(i)
          flName$ = folderAdress$ & iStr & "ТНВ" & TNVname & ".xls" 'формирую имя книги
          Workbooks("workTNV").SaveCopyAs flName$ 'и вот тут начинают вываливаться проблемы
          Workbooks(flName$).Close 'особенно тут
      Next

        
      Workbooks("Классификация").Close
        
      Application.ScreenUpdating = 1
End Sub
[/vba]

Очень долго не могла понять, в чём же дело. Какой массив, какой индекс?
Оказывается, дело было в том, что я пыталась закрывать создаваемые книги:
Workbooks(flName$).Close
Плохая была идея: как можно закрыть то, что открыто не было?!

Но ещё одна проблема осталась: как мне достоверно определять последнюю заполненную (!) ячейку в 10 столбце Классификации.xls
TNVrow = Cells(Rows.Count, 10).End(xlUp).Row
(пробовала ещё варианты:
'TNVrow = Cells(65536, "J").End(xlUp).Row
'TNVrow = Columns("J").End(xlDown).Row
это всё функциональные синонимы оказались)
сейчас туда попадает последняя ячейка, но содержащая значение пусто.

Как правильно сформулировать условие для проверки этого?
или такая задача решается иначе?
 
Ответить
СообщениеЗдравствуйте, дорогие Форумчане!

Здорово, пока писала первый вопрос, ответ на который найти отчаялась, поняла,
почему дебагер считает, что индекс вышел за пределы массива (Subscript out of range (Error 9))

Я хочу создать в папке кучу новых книг, количество их равняется значению, которое находится в последней заполненной ячейке 10го столбца в другой книге.

[vba]
Code
Sub MyNew()
        
      Dim i As Long
      Dim TNVrow, TNVcol As Integer
      Application.ScreenUpdating = 0
        
      folderAdress$ = "C:\ТНВ\"
      Workbooks.Open folderAdress$ & "Классификация.xls"
      Workbooks.Open folderAdress$ & "workTNV.xls"
        
      Workbooks("Классификация").Activate
      TNVrow = Cells(Rows.Count, 10).End(xlUp).Row 'выясняю номер строки последней ячейки в нужном столбце
      TNVcol = Cells(TNVrow - 1, 10).Value 'запоминаю значение по выясненному адресу ячейки - количество создаваемых книг
      TNVname = Cells(TNVrow - 1, 9).Value 'захватываю значение по соседству для формирования имени новой книги
         
        
      For i = 1 To TNVcol
          iStr = CStr(i)
          flName$ = folderAdress$ & iStr & "ТНВ" & TNVname & ".xls" 'формирую имя книги
          Workbooks("workTNV").SaveCopyAs flName$ 'и вот тут начинают вываливаться проблемы
          Workbooks(flName$).Close 'особенно тут
      Next

        
      Workbooks("Классификация").Close
        
      Application.ScreenUpdating = 1
End Sub
[/vba]

Очень долго не могла понять, в чём же дело. Какой массив, какой индекс?
Оказывается, дело было в том, что я пыталась закрывать создаваемые книги:
Workbooks(flName$).Close
Плохая была идея: как можно закрыть то, что открыто не было?!

Но ещё одна проблема осталась: как мне достоверно определять последнюю заполненную (!) ячейку в 10 столбце Классификации.xls
TNVrow = Cells(Rows.Count, 10).End(xlUp).Row
(пробовала ещё варианты:
'TNVrow = Cells(65536, "J").End(xlUp).Row
'TNVrow = Columns("J").End(xlDown).Row
это всё функциональные синонимы оказались)
сейчас туда попадает последняя ячейка, но содержащая значение пусто.

Как правильно сформулировать условие для проверки этого?
или такая задача решается иначе?

Автор - flutesa
Дата добавления - 25.11.2012 в 19:37
RAN Дата: Воскресенье, 25.11.2012, 20:23 | Сообщение № 2
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Значит там не пусто. Примените к этой ячейке ДЛСТР и КОДСИМВ. Что на выходе?


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеЗначит там не пусто. Примените к этой ячейке ДЛСТР и КОДСИМВ. Что на выходе?

Автор - RAN
Дата добавления - 25.11.2012 в 20:23
flutesa Дата: Воскресенье, 25.11.2012, 20:50 | Сообщение № 3
Группа: Пользователи
Ранг: Прохожий
Сообщений: 4
Репутация: 0 ±
Замечаний: 0% ±

=ДЛСТР(J275) вернул 0
=КОДСИМВ(J275) вернул #ЗНАЧ!

а =КОДСИМВ(K275) вернул 48 (в K275 у меня формула =ДЛСТР(J275), хотя это не имеет значения, видимо)
 
Ответить
Сообщение=ДЛСТР(J275) вернул 0
=КОДСИМВ(J275) вернул #ЗНАЧ!

а =КОДСИМВ(K275) вернул 48 (в K275 у меня формула =ДЛСТР(J275), хотя это не имеет значения, видимо)

Автор - flutesa
Дата добавления - 25.11.2012 в 20:50
RAN Дата: Воскресенье, 25.11.2012, 20:58 | Сообщение № 4
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Давайте файл.


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеДавайте файл.

Автор - RAN
Дата добавления - 25.11.2012 в 20:58
flutesa Дата: Воскресенье, 25.11.2012, 21:41 | Сообщение № 5
Группа: Пользователи
Ранг: Прохожий
Сообщений: 4
Репутация: 0 ±
Замечаний: 0% ±

Файл здесь
К сообщению приложен файл: 3207041.xls (47.5 Kb)


Сообщение отредактировал flutesa - Воскресенье, 25.11.2012, 21:43
 
Ответить
СообщениеФайл здесь

Автор - flutesa
Дата добавления - 25.11.2012 в 21:41
RAN Дата: Воскресенье, 25.11.2012, 21:47 | Сообщение № 6
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Уберите заливку из J275, или просто удалите эту строку. biggrin


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеУберите заливку из J275, или просто удалите эту строку. biggrin

Автор - RAN
Дата добавления - 25.11.2012 в 21:47
flutesa Дата: Воскресенье, 25.11.2012, 22:04 | Сообщение № 7
Группа: Пользователи
Ранг: Прохожий
Сообщений: 4
Репутация: 0 ±
Замечаний: 0% ±

да, помогло. специфические "особенности"...
Спасибо, RAN!

но всё же, а если не удалять эти строки?
что с ними всё-таки не так, что они учитываются в процедуре?
 
Ответить
Сообщениеда, помогло. специфические "особенности"...
Спасибо, RAN!

но всё же, а если не удалять эти строки?
что с ними всё-таки не так, что они учитываются в процедуре?

Автор - flutesa
Дата добавления - 25.11.2012 в 22:04
RAN Дата: Воскресенье, 25.11.2012, 22:17 | Сообщение № 8
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Так и не пойму, что там, но в столбцах i-j с 5 строки и до 275 во всех пустых ячейках что-то есть.


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеТак и не пойму, что там, но в столбцах i-j с 5 строки и до 275 во всех пустых ячейках что-то есть.

Автор - RAN
Дата добавления - 25.11.2012 в 22:17
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!