Страница: 1 |
Страница: 1 |
Вопрос: Задача! Защита от дурака.EXCEL VBA
Добавлено: 11.03.06 21:12
Автор вопроса:
Василий
Есть табличная форма (Бланк заявки)
Запись в бланке можно сделать в любой ячейке
(столбец НАИМЕНОВАНИЕ - 20 строк)
Наименования
Мыло
Порошок
Бумага
Перед в несением данных в базу:
Необходимо чтобы все записи шли масивом без
пустых строк между записями
Т.е. перед внисением в базу они должны
иметь такой вид
Наименования
Мыло
Порошок
Бумага
Задачку решил в лоб через перенос значений на
другой лист, потом возврат в форму и уже из формы
перенос в базу
Работает.Но…
1 Мелькает экран. Непозваляет скрыть лист(Шаблон лист
где сбивается масив). Так как он используется макросом.
2.Заело написал новый макрос но не хватает знаний VBA
Помогите!!!
Заране СПАСИБО.
Sub NewVbasy()
Dim KolZap As Integer
Dim D As Integer
Dim Adrs As Range
Dim rgData As Range
Set rgData = Range("A5:A25")
KolZap = Application.WorksheetFunction.CountA(rgData)
Выбор ячеки для начала цикла
Range("A5").Select
Проверка наличия записей в форме ЗАЯВКА
If KolZap = 0 Then MsgBox "В ЗАЯВКЕ НЕТ ЗАПИСЕЙ! Ввод в базу отменен."
Обход кода если в ЗАЯВКЕ НЕТ записей
If KolZap = 0 Then GoTo Obhod:
Цикл проверяет записи в форме ЗАЯВКА на предмет их последовательности
т.е. записи должны идти одна за другой без пробелов
For D = 1 To KolZap
If ActiveCell <> "" Then
ActiveCell.Offset(1, 0).Range("A1").Select 'Если активная ячейка
имеет значения тогда переход на ячейку ниже
If ActiveCell <> "" Then GoTo hod: 'Обходим цикл
Else
ActiveCell = ""
Переход по пустым ячекам до заполненной
Do While ActiveCell = ""
ActiveCell.Offset(1, 0).Range("A1").Select
Loop
End If
Set Adrs = ActiveCell
Adrs .Address()
Копирует значения
ActiveCell.Range("A1:C1").Select
Selection.Copy
Range("A5").Select
Ищет пустую ячейку
Do While ActiveCell <> ""
ActiveCell.Offset(1, 0).Range("A1").Select
Loop
Вставляет значение в пустую ячейку
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("Adrs .Address()").Select
Selection.ClearContents
Application.CutCopyMode = False
hod:
Next D
Obhod:
End Sub
Ответы
Всего ответов: 3
Номер ответа: 1
Автор ответа: Дмит
Вопросов: 11
Ответов: 160
Web-сайт:
Профиль | | #1
Добавлено: 12.03.06 00:24
Для начала два совета:
1Не используй без лишней надобности .Select
2Макрос может работать и со скрытым листом.
Действительно не хватает знаний VBA-дерзай.
Не получится пришли на мыло файл.
Номер ответа: 2
Автор ответа: Vilor
Вопросов: 5
Ответов: 28
Профиль | | #2
Добавлено: 14.06.06 23:26
Чтобы листы не мелькали в начале функции: Application.screenupdating = false. в конце - Application.screenupdating = true
Номер ответа: 3
Автор ответа: ADSemenov.ru
Вопросов: 5
Ответов: 276
Web-сайт:
Профиль | | #3
Добавлено: 18.06.06 17:15
Может не к месту, но — вдруг кому-нибудь пригодится.—
Требовалось мне в Excel "прошерстить бо-ольшую смету и скрыть пустые строки на экране. Решил "в лоб" — смотрел каждую строку и скрывал, если требовалось. Естественно, работало долго и всё мелькало.
Поставил Application.screenupdating = false. Мелькать перестало, но работало так же долго.
Работать стало "влёт" тогда, когда я сформировал сначала range из всех закрываемых строк, а потом закрыл их одной командой.