Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - VBA

Страница: 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-сайт: dimit.pochta.ru
 Профиль | | #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-сайт: www.adsemenov.ru
 Профиль | | #3
Добавлено: 18.06.06 17:15
Может не к месту, но — вдруг кому-нибудь пригодится.—

Требовалось мне в Excel "прошерстить бо-ольшую смету и скрыть пустые строки на экране. Решил "в лоб" — смотрел каждую строку и скрывал, если требовалось. Естественно, работало долго и всё мелькало.
Поставил Application.screenupdating = false. Мелькать перестало, но работало так же долго.
Работать стало "влёт" тогда, когда я сформировал сначала range из всех закрываемых строк, а потом закрыл их одной командой.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам