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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.09.2009, 19:12   #1
MickMick
Пользователь
 
Регистрация: 23.09.2008
Сообщений: 22
По умолчанию 1 клик = 2 макроса

Подскажите, пожалуйста, как можно нажатием одной кнопки запустить два макроса. Зараннее спасибо
MickMick вне форума Ответить с цитированием
Старый 17.09.2009, 19:32   #2
Teslenko_EA
Участник клуба
 
Регистрация: 10.08.2009
Сообщений: 1,796
По умолчанию

Здравствуйте MickMick.
Макрос(процедура) содержит набор инструкций, в его код можно добавить команду вызывающую другую процедуру.
и будет - 1 клик = 2 макроса
об этом и многом другом, можно узнать почитав документацию по VBA
Евгений.
Teslenko_EA вне форума Ответить с цитированием
Старый 17.09.2009, 19:48   #3
MickMick
Пользователь
 
Регистрация: 23.09.2008
Сообщений: 22
По умолчанию

Дело в том, что каждый макрос передает данные с текущего листа на другой, и в обоих макросах содержатся цыклы. К сожалению у меня не получается выполнение обоих макросов: либо первый, либо второй.
MickMick вне форума Ответить с цитированием
Старый 18.09.2009, 11:55   #4
MickMick
Пользователь
 
Регистрация: 23.09.2008
Сообщений: 22
По умолчанию

Вот первый макрос:
Sub mak_copy_post()
For n = 5 To 10000
If Worksheets("Лист 1").Cells(n, 2) = "" Then

Worksheets("Лист 1").Cells(n, 2).Value = ActiveSheet.Cells(2, 1).Value
Worksheets("Лист 1").Cells(n, 3).Value = ActiveSheet.Cells(2, 2).Value
Worksheets("Лист 1").Cells(n, 4).Value = ActiveSheet.Cells(2, 3).Value

Sheets("Лист 1").Select
End
End If
Next n
End Sub

Вот второй макрос:
Sub mak_copy_post_full()
For n = 5 To 10000
If Worksheets("Лист 2)").Cells(n, 2) = "" Then

Worksheets("Лист 2)").Cells(n, 2).Value = ActiveSheet.Cells(4, 12).Value
Worksheets("Лист 2)").Cells(n, 3).Value = ActiveSheet.Cells(4, 13).Value
Worksheets("Лист 2)").Cells(n, 4).Value = ActiveSheet.Cells(4, 14).Value
Worksheets("Лист 2)").Cells(n, 5).Value = ActiveSheet.Cells(4, 15).Value

End
End If
Next n
End Sub

Мне нужно, чтобы после передачи всех данных отображалась строка из Лист 1, в которую передали данные. Если можете, подскажите как решить проблему
MickMick вне форума Ответить с цитированием
Старый 09.10.2009, 10:57   #5
MickMick
Пользователь
 
Регистрация: 23.09.2008
Сообщений: 22
По умолчанию

Форумчане, ПОМОГИТЕ
Неужели никто не может подсказать решение проблемы?
MickMick вне форума Ответить с цитированием
Старый 09.10.2009, 11:48   #6
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

В Вашем случае можно вообще обойтись без циклов. Например, так:
Код:
Sub Main()
    Dim n As Long: Application.ScreenUpdating = False
    With Sheets("Лист 2")
        n = .[B4].End(xlDown).Row
        If n <= 10000 Then
            .Cells(n, 2) = Cells(4, 12): .Cells(n, 3) = Cells(4, 13)
            .Cells(n, 4) = Cells(4, 14): .Cells(n, 5) = Cells(4, 15)
        End If
    End With
    With Sheets("Лист 1")
        n = .[B4].End(xlDown).Row
        If n <= 10000 Then
            .Cells(n, 2) = Cells(2, 1): .Cells(n, 3) = Cells(2, 2): .Cells(n, 4) = Cells(2, 3)
        End If
        .Rows(n).Select
    End With
End Sub
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 09.10.2009, 11:52   #7
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

Код:
Sub mak_copy_post()
For n = 5 To 10000
If Worksheets("Лист 1").Cells(n, 2) = "" Then

Worksheets("Лист 1").Cells(n, 2).Value = ActiveSheet.Cells(2, 1).Value
Worksheets("Лист 1").Cells(n, 3).Value = ActiveSheet.Cells(2, 2).Value
Worksheets("Лист 1").Cells(n, 4).Value = ActiveSheet.Cells(2, 3).Value

' Sheets("Лист 1").Select вот это тут зачем нужно? особенно в теле цикла
' End 
End If
Next n
mak_copy_post_full
Sheets("Лист 1").Select
End Sub

Вот второй макрос:
Sub mak_copy_post_full()
For n = 5 To 10000
If Worksheets("Лист 2)").Cells(n, 2) = "" Then

Worksheets("Лист 2)").Cells(n, 2).Value = ActiveSheet.Cells(4, 12).Value
Worksheets("Лист 2)").Cells(n, 3).Value = ActiveSheet.Cells(4, 13).Value
Worksheets("Лист 2)").Cells(n, 4).Value = ActiveSheet.Cells(4, 14).Value
Worksheets("Лист 2)").Cells(n, 5).Value = ActiveSheet.Cells(4, 15).Value

' End
End If
Next n
End Sub
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 13.10.2009, 04:40   #8
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Если я правильно понял задачу, то требуется найти первую непустую ячейку в столбце "B" в диапазоне строк 5...10000 на 1-м и 2-м листах и в найденную строку вставить соответствующие данные. Если так, тогда Вам поможет этот макрос (с небольшой доработкой):
Код:
Sub Main()
    Dim n As Long: Application.ScreenUpdating = False
    With Sheets("Лист 2")
        n = IIf(.[B5] = "", .[B4].End(xlDown).Row, 5)
        If n <= 10000 Then
            .Cells(n, 2) = Cells(4, 12): .Cells(n, 3) = Cells(4, 13)
            .Cells(n, 4) = Cells(4, 14): .Cells(n, 5) = Cells(4, 15)
        End If
    End With
    With Sheets("Лист 1")
        n = IIf(.[B5] = "", .[B4].End(xlDown).Row, 5)
        If n <= 10000 Then
            .Cells(n, 2) = Cells(2, 1): .Cells(n, 3) = Cells(2, 2): .Cells(n, 4) = Cells(2, 3)
        End If
        .Rows(n).Select
    End With
End Sub
Чем шире угол зрения, тем он тупее.

Последний раз редактировалось SAS888; 13.10.2009 в 04:45.
SAS888 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Клик по цвету -=L.Morgan=- Помощь студентам 3 01.07.2009 11:32
Клик по Image mish@ Общие вопросы Delphi 2 10.06.2009 12:39
Запуск макроса с параметрами из другого макроса Saladin Microsoft Office Excel 2 19.01.2009 09:43
Двойной клик Алежа Общие вопросы .NET 3 16.11.2008 23:20
Клик мыши stayer Общие вопросы Delphi 1 30.10.2008 19:53