Сохранение данных из формы в таблице EXEL

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

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

Ответить
samara
Сообщения: 3
Зарегистрирован: 10 окт 2004, 16:10

1. нужно по нажатию кнопки записывать значение ячейки "А" в свободную строку другого листа.

2. нужно делать выборку данных из столбца по дате (за текущий месяц, за прошедший месяц, за год и всего.

Понимаю, что это все элементарно, но я не знаком с VB

Все больше php+mysql

Заранее спасибо за помощь
Аватара пользователя
Naeel Maqsudov
Сообщения: 2570
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

1.
В какую-нибудь ячейку поместите формулу, которая подсчитывает, сколько ячеек уже заполнено.

=счет('ДругойЛист'!A:A) или =счетз('ДругойЛист'!A:A)

для удобства эту ячейку можно пометить именем (Вставка/Имя/Присвоить), например "Счетчик".
Теперь можно написать всего одну строчку:

WorkSheets("ДругойЛист").Cells(range("Счетчик").value,1).Value = Range("Ячейка_А").Value

2.
Меню Данные/Фильтр/Автофильтр - никакого VB - это обычная функциональность Excel
samara
Сообщения: 3
Зарегистрирован: 10 окт 2004, 16:10

Я извиняюсь, а куда вписывать
WorkSheets("ДругойЛист").Cells(range("Счетчик").value,1).Value = Range("Ячейка_А").Value
?

спасибо за ответ
Аватара пользователя
Naeel Maqsudov
Сообщения: 2570
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

Гхммм... э-э-э.... Гх-гхммм....
Значит так... ФОРМУ (если, конечно имеется в виду та самая форма, которая добавляется в VBA-проект, после перехода в "Редактор VBA" (Ctrl+F11)) Вы добавили, значит, кнопку на нее положить можете. В режиме редактирования формы двойной щелчок по кнопке переведет Вас в редактор текста программ, и создаст там процедуру вида

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

Private Sub CommandButton1_Click()
  |
End Sub
Так вот между строчками "Private Sub" и "End Sub" это все и вписывать.

Ну а для запуска формы будет нужен макрос

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

Sub XXX()
  UserForm1.Show
End Sub
Для макросов целесообразно в проект добавить отдельный модуль.
samara
Сообщения: 3
Зарегистрирован: 10 окт 2004, 16:10

При использованиие такой схемы WorkSheets("ДругойЛист").Cells(range("Счетчик").value,1).Value = Range("Ячейка_А").Value , выдает ошибу run-time, если ячейки "Счетчика" пустые(0). Как этого избежать?
Как записать из ("Ячейка_А"), данные в , допустим, 6 таблиц."ДругойЛист""ДругойЛист2" и т.д.

Спасибо за ответ.
Аватара пользователя
Naeel Maqsudov
Сообщения: 2570
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

выдает ошибу run-time, если ячейки "Счетчика" пустые(0). Как этого избежать?
написать оператор IF

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

IF Range("Счетчик").Value>0 Then ....
Да! Еще вот что. В Cells(x,y) и x, и y должны быть >0 и поэтому наверное вы хотели написать
....Cells(range("Счетчик").value+1,1).Value.....

Как записать из ("Ячейка_А"), данные в , допустим, 6 таблиц."ДругойЛист""ДругойЛист2" и т.д.
Ну, шесть раз написать
WorkSheets("ДругойЛистXXX").Cells(range("Счетчик").value+1,1).Value = Range("Ячейка_А").Value

Можно также организовать цикл. Например, по всем листам, названия которых начинаются с "ДругойЛист".
См. "For Each"
RED OCTOBER
Сообщения: 6
Зарегистрирован: 19 окт 2004, 08:42
Контактная информация:

ПРи использование этой схемы
WorkSheets("ДругойЛист").Cells(range("Счетчик").value,1).Value = Range("Ячейка_А").Value

Не получается записать значение из новой ячейки в "Другой лист"
Получается, что таким образом можно записать только одно значение из "листа", в "другой лист".
еСЛИ ПИСАТЬ ЕЩЕ РАЗ ЭТУ СТРОЧКУ(ДЛЯ ПЕРЕНОСА ЕЩЕ ОДНОЙ ЯЧЕЙКИ), ТО ОШИБОК НЕТ, НО И РЕЗУЛЬТАТА ТОЖЕ...

СПАСИБО
RED OCTOBER
Сообщения: 6
Зарегистрирован: 19 окт 2004, 08:42
Контактная информация:

WorkSheets("ДругойЛист").Cells(range("Счетчик").value,1).Value = Range("Ячейка_А").Value
Как записать "ячейку B" в "другой лист"?
Если писать первую строчку, то ничего не происходит...
Есле можно по подробней..


Сапасибо за ответ
Аватара пользователя
Naeel Maqsudov
Сообщения: 2570
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

<any_range1>.value = <any_range2>.value

any_rangeX - это обращение к любому диапазону на любом листе!

Например:
WorkSheets("Лист1").Range("A1:B6").Value = WorkSheets("Лист2").Range("E2:F7").Value

Копирует содержимое Лист2!E2:F7 в Лист!A1:B6, т.е. сразу 12 ячеек.
Ответить