Страницы: 1
RSS
Макрос заполнения таблицы
 
Добрый вечер, по поиску подобного не нашел, просьба подсказать.  
Ситуация следующая есть 2 таблицы Alloys, Ores_table (определены в диспетчере имен)  
на отдельном листе форма с данными.  
При нажатии на кнопку необходимо чтобы произошло заполнение таблиц данными из этой формы.  
 
Через VBA с таблицами ниразу не работал.  
Интересует как определить свободную строку в таблице  
И собственно как занести данные в эту строку.  
 
т.е. данные вводятся последовательно, пользователь1, заполнили форму нажали добавить данные внеслись в таблицу. далее след пользователь заполняется слуд строка.  
 
<EM><STRONG>Файл удален</STRONG> - велик размер - [<STRONG>МОДЕРАТОРЫ</STRONG>]</EM>
 
Это я знаю а как можно использовать эти способы Не для листа а для таблицы которая задана через диспечер имен? вообще имена таблица из диспечера имен можно использовать в VBA ?
 
А можно привести на примере моего файла?  
 
Мне необходимо вносить данные в пределе данного диапазона Range("Alloys")  
т.е. ямогу определить первую свободную строку в данном диапазоне но не могу внести в него данные (  
 
в VBA нет возможности использовать заполнение как в формулах ?  
Типа этого: (Alloys[[#Эта строка];[CorpID]]
 
Выкладываю облегченный файл
 
Sub InsertData()  
'Debug.Print Лист3.[Alloys].Address
Лист3.[Alloys].Cells(1, 1) = 10
Лист3.[Alloys].Cells(2, 3) = 10
End Sub
 
Dim lLastRow As Long  
 
lLastRow = Sheets("Alloys").[Alloys_Table].End(xlUp).Row
MsgBox lLastRow  
Sheets("Alloys").[Alloys_Table].Cells(lLastRow, 1) = 500
 
После запуска я получаю 500 в первой ячейке 1 строки.  
Но при повторном нажатии у меня lLastRow остается равной 1.  
 
Хотя по логике должно быть уже 2 так как 1 строка 1 столбца уже имеет значение 500
 
А догадаться самому?  
lLastRow = Sheets("Alloys").[Alloys_Table].End(xlUp).Row+1
Я сам - дурнее всякого примера! ...
 
{quote}{login=KukLP}{date=06.03.2011 11:30}{thema=}{post}А догадаться самому?  
lLastRow = Sheets("Alloys").[Alloys_Table].End(xlUp).Row+1{/post}{/quote}
 
Прошу прощения так этот вопрос не решается... поставив + 1 будет все время 2  
 
При нажатии на кнопку у меня вызывается процедура которая сначала определяет порядковый номер первой пустой строки и потом ее заполняет.  
 
Процедура завершается. При следующем нажатии все повторяется,т.е. каждый раз определяется номер пустой строки.  
 
Но почему - то этого не происходит в данном случае, может данный способ не применим к имени таблицы? Ответов и информации по этому вопросу поиском я не нашел, поэтому обращаюсь суда.
 
Чует моё сердце, что Вы неверно определяете последнюю строку в диапазоне. Файл посмотреть не могу.
 
Сегодня сам впоролся  
на пустом листе  
lLastRow = Sheets("Alloys").[Alloys_Table].End(xlUp).Row = 1
при одной заполненной строке тоже  
lLastRow = Sheets("Alloys").[Alloys_Table].End(xlUp).Row = 1
Обойти можно поставив заголовок
 
И точно:  
 
Sub InsertData()  
  Dim iLastrow As Long  
  iLastrow = Sheets("Alloys").[Alloys].Cells(Sheets("Alloys").[Alloys].Rows.Count, 1).End(xlUp).Row
MsgBox iLastrow  
Sheets("Alloys").[Alloys].Cells(iLastrow, 1) = 500
 
'Лист3.[Alloys].Cells(1, 1) = 10
'Лист3.[Alloys].Cells(2, 3) = 10
     
End Sub  
 
Можно упростить через With
 
Sub InsertData()  
   Dim iLastrow As Long  
   With Лист3.[Alloys]
       iLastrow = .Cells(.Rows.Count, 1).End(xlUp).Row  
       MsgBox iLastrow  
       .Cells(iLastrow, 1) = 500  
       '.Cells(1, 1) = 10  
       '.Cells(2, 3) = 10  
   End With  
End Sub
 
Hugo Спасибо большое это то что было нужно!
 
Только при таком способе нужно отслеживать, не заполнена ли последняя строка - при полном заполненном столбце iLastrow будет опять 1.  
 
На листе такое редко бывает, а в Вашем случае - случай другой.
Страницы: 1
Читают тему
Наверх