Почему макрос не работает?

Весь MS Office, программирование на Visual Basic for Applications и MS VB

Модератор: Naeel Maqsudov

seergy
Сообщения: 109
Зарегистрирован: 25 ноя 2007, 21:31

Помогите - не могу создать форму для заполнения базы на разных листах см. пример в файле
С уважением...
Вложения
Новая папка (2).zip
(25.82 КБ) 42 скачивания
Аватара пользователя
VictorM
Сообщения: 794
Зарегистрирован: 23 окт 2006, 01:44
Откуда: Lugansk, Ukraine
Контактная информация:

По все видимости, в этом виде (файл !!!дополнить базу через кнопку.xls) необходимо активировать нужный лист для заполнения данными соответствующей таблицы. А что мешает расположить форму выбора на том листе, где находится таблица? Есть какие-то ограничения?
"Дайте людям рыбы, и вы накормите их на весь день;
научите их ловить рыбу - и вы накормите их на всю жизнь".
Аватара пользователя
VictorM
Сообщения: 794
Зарегистрирован: 23 окт 2006, 01:44
Откуда: Lugansk, Ukraine
Контактная информация:

Из вложения пример аналог.xls
Хочу сделать что-то типа такого только проще совсем с запутался
Так может Вам проще сделать одну общую форму ввода со всеми полями сразу. Да и всех делов ;)
"Дайте людям рыбы, и вы накормите их на весь день;
научите их ловить рыбу - и вы накормите их на всю жизнь".
seergy
Сообщения: 109
Зарегистрирован: 25 ноя 2007, 21:31

Уважаемый ВикторМ нужно следующее:
На главной форме нажимается кнопка "пополнить значения "(базу на другом, например, скрытом листе).
Появляется новая форма "введите код" с окошком ввода и кнопочкой окей., при нажатие которой база пополняется.
Пробовал такой макрос для формы - не работает:

Private Sub cmdOK_Click()
Dim LastRow As Long
LastRow = Sheets("базаТБО").Range("A65536").End(xlUp).Row + 1
Cells(LastRow, 1).Value = tbName.Text
Unload Me
End Sub

Private Sub tbName_Change()

End Sub

По поводу скрытых листов - пользуюсь Вашими подсказками всё работает.
Не могу разобраться с кодом следующего макроса для формы:

Dim LastRow As Long
LastRow = Range("A65536").End(xlUp).Row + 1
LastRow.Insert Shift:=xlDown

С уважением....
Аватара пользователя
VictorM
Сообщения: 794
Зарегистрирован: 23 окт 2006, 01:44
Откуда: Lugansk, Ukraine
Контактная информация:

пополнить значения
а значения эти откуда берутся? Вводятся в полях формы?
И что Вы понимаете под словом "форма"?
Если это UserForm, то весь код для нее пишется в модуле самой формы.
Не могу разобраться с кодом следующего макроса для формы:
Dim LastRow As Long - объявляется переменная LastRow
LastRow = Range("A65536").End(xlUp).Row + 1 - получаем последнюю (нижнюю) пустую ячейку столбца "А"
а вот это LastRow.Insert Shift:=xlDown - непонятно...
"Дайте людям рыбы, и вы накормите их на весь день;
научите их ловить рыбу - и вы накормите их на всю жизнь".
Аватара пользователя
Aent
Сообщения: 1129
Зарегистрирован: 01 окт 2006, 14:52
Откуда: Saratov,Russia
Контактная информация:

>Dim LastRow As Long
>LastRow = Range("A65536").End(xlUp).Row + 1
>LastRow.Insert Shift:=xlDown

Не мудрено что не можете разобраться. Ибо нет у длинных целых (long) метода Insert ;)
Вторая строчка получает номер первой незаполненной ячейки в столбце A
Третья же просто бессмыслена. Даже если записать синтаксически правильно

Код: Выделить всё

Rows(LastRow).Insert Shift:=xlDown
Это будет означать вставку строки за строкой с номером LastRow, но по коду LastRow это
уже номер пустой cтроки (предполагая что в других колонках нет данных, лежащих ниже
чем в колонке A)
Андрей Энтелис,
aentelis.livejournal.com
Аватара пользователя
VictorM
Сообщения: 794
Зарегистрирован: 23 окт 2006, 01:44
Откуда: Lugansk, Ukraine
Контактная информация:

Aent,
Вторая строчка получает номер первой незаполненной ячейки в столбце A
чес слово, я это и хотел сказать, но как-то коряво выразился :(
Третья же просто бессмыслена. Даже если записать синтаксически правильно
вот теперь понятно. Спасибо. ;)
"Дайте людям рыбы, и вы накормите их на весь день;
научите их ловить рыбу - и вы накормите их на всю жизнь".
seergy
Сообщения: 109
Зарегистрирован: 25 ноя 2007, 21:31

Спасибо, то что надо. Отвечаю на ваш вопрос...:
"И что Вы понимаете под словом "форма"?"

Если это UserForm, то весь код для нее пишется в модуле самой формы.
Форма работает
через Call macros
В самом модуле макроса
Активируется форма: Userform.show
Да вы правы по поводу LastRow...
написал (думал сократить) " LastRow.Insert Shift:=xlDown " . Вместо:

Range(Cells(LastRow, 1), Cells(LastRow + 1, Columns.Count)).Insert Shift:=xlDown
C уважением ....

Не могли бы вы предложитьпримеры своих вариантов решение данных задач с кратким пояснением кода. А то по справке не очень доходит я не програмист - хорошо обучаюсь на примерах аналогах... если Вас не затруднит...
seergy
Сообщения: 109
Зарегистрирован: 25 ноя 2007, 21:31

Текущий вопрос
В макросе для формы как сделать, чтобы ячейки (по одной) удалялись нормально в диапозоне A:A со сдвигом в верх как в примере выше аналог.xls.
Private Sub CmdDel_Click()
Application.ScreenUpdating = False
Dim n As Integer
n = ComboBox1.ListIndex
Range(Cells(n + 1, 1), Cells(n + 1, 1)).Cells.Delete (или Delete Shift:=xlUp)
Unload Me
Application.ScreenUpdating = True
End Sub

Private Sub ComboBox1_Change()

End Sub

Private Sub UserForm_Initialize()
LastRow = Range("A65536").End(xlUp).Row - 1
ComboBox1.RowSource = "A4:A" & LastRow
End Sub
Аватара пользователя
VictorM
Сообщения: 794
Зарегистрирован: 23 окт 2006, 01:44
Откуда: Lugansk, Ukraine
Контактная информация:

seergy, поймите, чем лучше Вы объясните, что Вам нужно, тем быстрее и правильнее Вам подскажут.
Из Вашего объяснения и фрагментов кода, особенно "урезанных", понять что - либо трудно. Отсюда и отсутствие советов и подсказок.
Может Вы как-то сформулируете общую задачу. Да файл с какими-то набросками не помешает.
В макросе для формы как сделать, чтобы ячейки (по одной) удалялись нормально в диапозоне A:A со сдвигом в верх как в примере выше аналог.xls.
да сделать-то элементарно, но надо же знать что удалять, какие-то критерии. Например в том же файле, удаляется название фирмы.
"Дайте людям рыбы, и вы накормите их на весь день;
научите их ловить рыбу - и вы накормите их на всю жизнь".
Ответить