Макрос в Excell - Страница 2
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Макрос в Excell

Макрос в Excell

Ответ
Поиск в этой теме
Непрочитано 21.08.2004, 19:59
Макрос в Excell
Денэн
 
г.Саратов
Регистрация: 06.03.2004
Сообщений: 72

Подскажите пожалуйста, кто знает, как написать макрос в Excell, при выполнении которого, будет проверяться равенство нулю содержимое определённой ячейки строки. И если это равенство выполняется - строка удаляется.
Просмотров: 13553
 
Непрочитано 04.04.2011, 20:44
#21
Олег (jr.)

специалист по околачиванию грушевых деревьев
 
Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 811


Ничего лучше не придумал, удали лишнее
Код:
[Выделить все]
Option Explicit

Sub demo()

Application.ScreenUpdating = False
Dim findRange As Range
Set findRange = Cells.Range("D4:D1000").Cells.SpecialCells(xlCellTypeLastCell).End(xlUp)
Dim copyRange As Range
Dim i, j, k, ins, stp, m
Dim data
k = 1: ins = 9 ''<-- number of rows to insert + 1
stp = 0

Dim numRows As Long
numRows = findRange.row
Cells.Range("D4").Select ''<-- first cell in row (check address!)
Dim col As Long, row As Long
col = ActiveCell.Column
row = ActiveCell.row
data = ActiveCell.CurrentRegion.Value2

For k = 1 To UBound(data, 1)
  m = ins + 1
    For j = 1 To m
    Cells.Range(Cells(row + j + stp - 1, col), Cells(row + j + stp - 1, col)).FormulaR1C1 = CStr(data(k, 1))
    Debug.Print data(k, 1)
Next
stp = stp + ins
Next

Application.ScreenUpdating = True

End Sub
И кстати предыдущее решение мог бы и показать, я с Экселем почти не работаю
а кому другому может было бы интересно
Олег (jr.) вне форума  
 
Непрочитано 05.04.2011, 09:48
#22
klinker


 
Регистрация: 02.09.2009
Сообщений: 82


Спасибо, вот еще один вариант макроса, посоветовали на другом форуме. Спасибо за уделенное время, рад был пообщаться!!!!!!!!!!!!
Sub Task()
'Исходные данные в столбце А
vArr = Range([A1], Cells(Rows.Count, "A").End(xlUp))
For Each oObj In vArr
For j = 1 To 8
i = i + 1
Cells(i, 1) = oObj
Next
Next
End Sub
klinker вне форума  
 
Непрочитано 05.04.2011, 10:28
#23
squicko

дома строю
 
Регистрация: 09.01.2009
Самара
Сообщений: 47


Здравствуйте многоуважаемые!
Еще вопрос по теме: нужно при условия выполнения условия в заданной ячейке (ячейка с формулой) скрыть определенные строки. Получилось сделать только если я сам ввожу данные в ячейку.

Код:
[Выделить все]
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address(0, 0) = "K6" Then
    If Target.Value = "УСЛОВИЕ" Then
            With Sheets("Лист2")
                Sheets("Лист2").Rows("24:24").Hidden = True
                Sheets("Лист2").Rows("32:32").Hidden = True
            End With
    Else
            With Sheets("Лист2")
                Sheets("Лист2").Rows("24:24").Hidden = False
                Sheets("Лист2").Rows("32:32").Hidden = False
                Sheets("Лист2").Rows("24:24").AutoFit
                Sheets("Лист2").Rows("32:32").AutoFit
            End With
    End If
End If
End Sub
Красным выделено условие, хотелось бы чтобы это было вычисляемое значение, а не рукописное.

Последний раз редактировалось squicko, 05.04.2011 в 16:44.
squicko вне форума  
 
Непрочитано 05.04.2011, 13:22
#24
Олег (jr.)

специалист по околачиванию грушевых деревьев
 
Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 811


Цитата:
Сообщение от klinker Посмотреть сообщение
Спасибо, вот еще один вариант макроса, посоветовали на другом форуме. Спасибо за уделенное время, рад был пообщаться!!!!!!!!!!!!
Sub Task()
'Исходные данные в столбце А
vArr = Range([A1], Cells(Rows.Count, "A").End(xlUp))
For Each oObj In vArr
For j = 1 To 8
i = i + 1
Cells(i, 1) = oObj
Next
Next
End Sub
Блин...., я совсем забыл про For Each
Успехов
Олег (jr.) вне форума  
 
Непрочитано 05.04.2011, 23:05
#25
Petrov-Vodkin


 
Регистрация: 30.10.2010
Сообщений: 123


Почитал я тему вашу в пол глаза и созрел резонный вопрос:
А почему вы не используете Фильтр? (ctrl+shift+L)
Petrov-Vodkin вне форума  
 
Непрочитано 19.04.2011, 23:43
#26
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406


Тема почищена.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 25.04.2011, 14:26
#27
klinker


 
Регистрация: 02.09.2009
Сообщений: 82


Всем привет! Помогите создать следующие макросы. Нужны маросы предвижения по таблице. Таблица заполняется из пользовательской формы. Создаю кнопки на стоку вверх, на строку вниз и кнопка подтвердить ввод данных. Этим кнопкам нужно назначить соответствующие макросы, но как их написать увы не знаю! Тварищи, программисты, подскажите какие комманды нужно назначить кнопкам? Напишите пожалуйста! Очень нужно!!!!!!!!!!
P.S. Кнопка подтверждения ввода аналог кнопки Enter
klinker вне форума  
 
Непрочитано 29.04.2011, 09:14
#28
klinker


 
Регистрация: 02.09.2009
Сообщений: 82


Всем привет! Снова нужна помощь!!! Очень нужно создать форму для защиты файла excell. идея следующая: необходимо чтобы при запуске Excell выскакивало окошко в которое необходимо ввести имя пользователя, пароль. Макрос должен проверить пароль, если пароль не верный нужно, чтобы удалялся лист, к примеру "лист 1". Проблема в том, что я не знаю как создать и вызвать подобную форму и описать все операции на языке VBA! Если кто может или есть аналоги, выручайте!
klinker вне форума  
 
Непрочитано 30.04.2011, 00:42
#29
Petrov-Vodkin


 
Регистрация: 30.10.2010
Сообщений: 123


Странные какие-то вещи ты в экселе сделать всё время пытаешься...
Лист удалять собрался, зачем? Чем не устраивает обычный пароль на книгу/лист?
Есть такая штука, "постановка задачи" называется. Если ей не овладеешь - ответов на твой вопрос будет столько же, сколько и на пост #27 .
Petrov-Vodkin вне форума  
 
Непрочитано 30.04.2011, 22:30
#30
KronSerg

Вода - моя работа
 
Регистрация: 10.11.2009
Санкт-Петербург
Сообщений: 3,638


На удаление листа в любом случае будет задан вопрос, сам попробуй, напиши строчку Sheets(1).Delete
По поводу поста 27, согласен с Petrov-Vodkin, что нужно не понятно.
__________________
Нерешаемых проблем не бывает.
KronSerg вне форума  
 
Непрочитано 30.04.2011, 23:46
#31
squicko

дома строю
 
Регистрация: 09.01.2009
Самара
Сообщений: 47


Помогите с вопросом в посте #23
squicko вне форума  
 
Непрочитано 01.05.2011, 08:21
#32
KronSerg

Вода - моя работа
 
Регистрация: 10.11.2009
Санкт-Петербург
Сообщений: 3,638


Попробуй так:
Код:
[Выделить все]
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim goal As Range
Set goal = Range("K6")
If goal = 6 Then
With Sheets("Лист2")
                Sheets("Лист2").Rows("24:24").Hidden = True
                Sheets("Лист2").Rows("32:32").Hidden = True
            End With
    Else
            With Sheets("Лист2")
                Sheets("Лист2").Rows("24:24").Hidden = False
                Sheets("Лист2").Rows("32:32").Hidden = False
                Sheets("Лист2").Rows("24:24").AutoFit
                Sheets("Лист2").Rows("32:32").AutoFit
            End With
    End If
End Sub
Запускается при любых изменениях на листе, если нужно отслеживать изменения инициированные с другого листа, то нужно писать отдельный макрос в нужные листы, либо писать макрос проверяющий нужную ячейку каждые 1000мс к примеру, это если изменения возможны из-за пределов книги.
__________________
Нерешаемых проблем не бывает.
KronSerg вне форума  
 
Непрочитано 03.05.2011, 17:41
#33
squicko

дома строю
 
Регистрация: 09.01.2009
Самара
Сообщений: 47


Немного не то. Интересует что то вроде:
для примера
формула в ячейке "K6": "=Лист2!A1+Лист3!A2"
(А1=2, А2=2)

Результат в ячеке имеем:цифру "3".
Так вот мне нужно чтобы в макросе проверялось условие равенства именно с "3", а не с формулой "=Лист2!A1+Лист3!A2"
Код:
[Выделить все]
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address(0, 0) = "K6" Then
    If Target.Value = "3" Then
            With Sheets("Лист2")
                Sheets("Лист2").Rows("24:24").Hidden = True
                Sheets("Лист2").Rows("32:32").Hidden = True
            End With
    Else
            With Sheets("Лист2")
                Sheets("Лист2").Rows("24:24").Hidden = False
                Sheets("Лист2").Rows("32:32").Hidden = False
                Sheets("Лист2").Rows("24:24").AutoFit
                Sheets("Лист2").Rows("32:32").AutoFit
            End With
    End If
End If
End Sub
Может быть я ставлю не тот оператор "Target.Value"?
squicko вне форума  
 
Непрочитано 03.05.2011, 22:34
#34
KronSerg

Вода - моя работа
 
Регистрация: 10.11.2009
Санкт-Петербург
Сообщений: 3,638


Этот макрос может сработать только в том листе в котором написан, вставь его в каждый лист изменив адрес целевой ячейки на полный (с указанием листа), если на ячейку возможно влияние из другой книги, нужно писать макрос периодически проверяющий значение ячейки.
__________________
Нерешаемых проблем не бывает.
KronSerg вне форума  
 
Непрочитано 03.05.2011, 23:16
#35
squicko

дома строю
 
Регистрация: 09.01.2009
Самара
Сообщений: 47


Не получается((
Код:
[Выделить все]
 Dim goal As Range
Set goal = Range("K6")
If goal = 6 Then
Как работает эта функция?
squicko вне форума  
 
Непрочитано 03.05.2011, 23:40
#36
KronSerg

Вода - моя работа
 
Регистрация: 10.11.2009
Санкт-Петербург
Сообщений: 3,638


Тут нет функции, есть переменная типа Range, можно в справке почитать
Такой код в каждый лист вставляй:
Код:
[Выделить все]
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim goal As Range
Set goal = Sheets(2).Range("K6")
If goal = 6 Then
With Sheets("Лист2")
                Sheets("Лист2").Rows("24:24").Hidden = True
                Sheets("Лист2").Rows("32:32").Hidden = True
            End With
    Else
            With Sheets("Лист2")
                Sheets("Лист2").Rows("24:24").Hidden = False
                Sheets("Лист2").Rows("32:32").Hidden = False
                Sheets("Лист2").Rows("24:24").AutoFit
                Sheets("Лист2").Rows("32:32").AutoFit
            End With
    End If
End Sub
__________________
Нерешаемых проблем не бывает.
KronSerg вне форума  
 
Непрочитано 03.05.2011, 23:58
#37
squicko

дома строю
 
Регистрация: 09.01.2009
Самара
Сообщений: 47


Спасибо разобрался, работает!!!

Меня смутило "goal", я правильно понимаю, что это константа, которой присваивается значение переменной диапазона range?

Последний раз редактировалось squicko, 04.05.2011 в 00:22.
squicko вне форума  
 
Непрочитано 04.05.2011, 07:11
#38
KronSerg

Вода - моя работа
 
Регистрация: 10.11.2009
Санкт-Петербург
Сообщений: 3,638


Dim goal As Range - объявление переменной типа Range, которую я назвал "goal"
Set goal = Sheets(2).Range("K6") - присвоение значения переменной.
If goal = 6 Then - проверка значения ячейки, ссылку на которую дали выше.
Все три строчки можно заменить на
Цитата:
If Sheets(2).Range("K6")=6 Then
если в коде не планируется менять диапазон или повторного его использовать.
__________________
Нерешаемых проблем не бывает.
KronSerg вне форума  
 
Непрочитано 04.05.2011, 08:53
#39
squicko

дома строю
 
Регистрация: 09.01.2009
Самара
Сообщений: 47


Спасибо за разъяснение! Втыкнулся))
squicko вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Макрос в Excell