Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 21.04.2008, 12:33   #1
MaxZoa
Пользователь
 
Регистрация: 06.03.2008
Сообщений: 15
По умолчанию Выполнения макроса(с подстановкой имени) при условии ячейки...

И снова здраствуйте (:
Есть вообщем понятный вопрос как заставить работать макрос при условии данных в одной из ячеек ...
имею макрос создания листа ... как привязать его выполнение к ячейке ?
Конкретика в файле ...
задействованные колонки
A "Номер накладной"
I "Итого недостача количество"
J "Итого забракованно количество"
H "Итого недостача мест"
Макрос по созданию листа...

Действие: Если в ячейке из столбца I или J(не важно) не ноль а в столбце H=0 то срабатывает макрос создания листа но имя листа подтягивается из столбца A характерной по уровню ячейки ... (пример в файле)
при чём созданный лист уже имеет определенную шапку ...
и данные некоторые (которые подтягиваются из ОСНОВНОГО листа)
Вложения
Тип файла: rar лист.rar (3.0 Кб, 29 просмотров)
MaxZoa вне форума
Старый 21.04.2008, 13:04   #2
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

По Вашим условиям запустить макрос можно, прописав в модуле нужного листа строку с кодом:
Код:
Private Sub Worksheet_Change(ByVal Target As Range)
    
    If Cells(Target.Row, 9) <> 0 And Cells(Target.Row, 10) <> 0 And Cells(Target.Row, 8) = 0 Then Run "Macro1"
   
End Sub
Что должен содержать созданный лист и как его назвать - не совсем понятно. И что значит
Цитата:
подтягивается
?
Чем шире угол зрения, тем он тупее.
SAS888 вне форума
Старый 21.04.2008, 13:09   #3
MaxZoa
Пользователь
 
Регистрация: 06.03.2008
Сообщений: 15
По умолчанию

Цитата:
Сообщение от SAS888 Посмотреть сообщение
По Вашим условиям запустить макрос можно, прописав в модуле нужного листа строку с кодом:
Код:
Private Sub Worksheet_Change(ByVal Target As Range)
    
    If Cells(Target.Row, 9) <> 0 And Cells(Target.Row, 10) <> 0 And Cells(Target.Row, 8) = 0 Then Run "Macro1"
   
End Sub
Что должен содержать созданный лист и как его назвать - не совсем понятно. И что значит подтягиваться ?
Лист должен называться по столбцу "номер накладной" (как в примере)

а подтягиваться должна в созданный лист
дата поступления
контейнер
номер накладной
Это не обязательно но если таки будет то будет класс!!!
MaxZoa вне форума
Старый 21.04.2008, 14:42   #4
MaxZoa
Пользователь
 
Регистрация: 06.03.2008
Сообщений: 15
По умолчанию

Ну вот подсобрал куски кода и макрос
вроде вся последовательность есть
но почемуто не работает ...
гляньте где ошибка ... плиз ...
и так и не понятно как поменять имя листа согласно ячейки C3
если известно что макрос выполнялся по ячейкам в этой строке ...
Вложения
Тип файла: rar лист2.rar (8.6 Кб, 25 просмотров)
MaxZoa вне форума
Старый 21.04.2008, 15:40   #5
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Посмотрите вложение. По оговоренным условиям запускается макрос и создает лист (копию первого листа) с именем из ячейки столбца "C".
Если лист с таким именем уже есть - он будет удален и создан снова. Допишите макрос как Вам нужно. Добавьте (удалите, скопируйте, вставьте и т.д.) нужные столбцы из листа "Основной" во вновь созданный лист. Новый лист создается последним, поэтому обращаться к нему можно просто:
Sheets(Sheets.Count).
Вложения
Тип файла: rar лист_3.rar (8.9 Кб, 43 просмотров)
Чем шире угол зрения, тем он тупее.
SAS888 вне форума
Старый 22.04.2008, 09:34   #6
MaxZoa
Пользователь
 
Регистрация: 06.03.2008
Сообщений: 15
По умолчанию

Спасибо большое
вот итог ...
поправил там еще макрорекордером ...
Вложения
Тип файла: rar Подумать.rar (16.1 Кб, 35 просмотров)
MaxZoa вне форума
Старый 22.04.2008, 10:32   #7
дмидми
Форумчанин
 
Аватар для дмидми
 
Регистрация: 06.03.2008
Сообщений: 352
Восклицание Да наоборот же! (с) Вовка в тридевятом царстве

Код:
    Dim x As Worksheet, s As String
    
    s = Cells(MyRow, "C")
'КСТАТИ, А ЧТО ДЕЛАТЬ, ЕСЛИ ЯЧЕЙКА ПУСТА? А ЕСЛИ В НЕЙ НЕ СТРОКА,
'А, НАПРИМЕР, ЧИСЛО ИЛИ ДАТА?

    'ЗДЕСЬ ЗАМЕНИТЬ В s НЕДОПУСТИМЫЕ СИМВОЛЫ "&'*/:;<>?\|^[!]
    'КАКИМ-НИБУДЬ ДОПУСТИМЫМ, НАПРИМЕР ТИЛЬДОЙ ~
    'ИЛИ ПОДЧЁРКИВАНИЕМ _

    'x Is Nothing
    On Error Resume Next
    Set x = Sheets(s)
'    If Err <> 0 Then x.Delete 'НАОБОРОТ!
'    If Err = 0 Then x.Delete 'ВОТ!
    On Error GoTo 0 'СКОБКИ НАДО ЗАКРЫВАТЬ :)
    If Not x Is Nothing Then x.Delete
    
    Sheets("Основной").Copy After:=Sheets(Sheets.Count)
'    Sheets(Sheets.Count).Name = Cells(MyRow, "C") 'СЛОЖНО.
'СВЕЖЕСОЗДАННЫЙ ЛИСТ СТАНОВИТСЯ АКТИВНЫМ ЛИСТОМ
    ActiveSheet.Name = s
Sorry, без мелких придирок не обошлось

Последний раз редактировалось дмидми; 22.04.2008 в 10:39.
дмидми вне форума
Старый 22.04.2008, 11:08   #8
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Посмотрите, что у меня получилось в результате "чистки" Вашего макроса. Почувствуйте разницу. Совет на будущее - по-возможности не используйте метод Select. Во-первых, это заметно "тормозит", во-вторых, мелькает картинка на дисплее.
По поводу замечания от дмидми - отвечаю:
Благодаря наличию оператора On Error Resume Next, если ячейка, данные которой используются для задания имени листа, пуста, или содержит недопустимые символы, то новый лист будет создан с именем "Основной(2)" и т.д. Т.е. криминала нет. Конечно, если так не устраивает, можно-таки вставить проверку ячейки. И On Error GoTo 0 не выполняется, как раз потому, что нужно также игнорировать возможную ошибку при присвоении имени нового листа. Обработчик ошибок возвращается в "нормальное" состояние автоматически, по окончании работы макроса. (по этому я часто не вставляю в код строки вида On Error GoTo 0, Application.DisplayAlerts = True, Application.ScreenUpdating = True и т.д.).
С удалением листа (If Err = 0...), конечно, согласен. Это ошибка (описка). В следующем вложении все исправлено.

P.S. Еще раз напоминаю, что все, что здесь предлагается - это наброски, болванки, руководство к действию (как хотите). Поэтому все замечания и предложения - приветствуются.
Вложения
Тип файла: rar Подумать_2.rar (10.7 Кб, 72 просмотров)
Чем шире угол зрения, тем он тупее.

Последний раз редактировалось SAS888; 22.04.2008 в 11:25. Причина: Добавлено
SAS888 вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
с помощью макроса скопировать значение всей строки(не одной ячейки, а нескольких) global Microsoft Office Excel 6 27.11.2008 17:43
Как разделить число и текст в одной ячейки на две ячейки. neboskreb Microsoft Office Excel 2 15.04.2008 19:39
DBGridEh+EditMask при условии. Jenya БД в Delphi 1 03.03.2008 13:58
Проблема в условии.. POPOV Общие вопросы C/C++ 6 25.12.2007 13:39
Ошибка в условии запроса boks SQL, базы данных 4 25.10.2007 10:43