2013-02-18 3 views
1

У меня есть таблица, которая берет входные данные пользователя и заполняет остальную часть таблицы из данных. Пока что я создал макрос, который автоматически заполняет таблицу из данных пользователей.Запуск макроса несколько раз по листу

Я хочу, чтобы пользователь вводил количество раз, когда они хотят запустить макрос (поскольку каждая таблица отображает входные данные дня), но каждый раз, когда макрос запускает его, он просто заполняется в том же пространстве и не отображает столов за несколько дней.

+1

Пожалуйста, покажите нам свой код. – chuff

ответ

0

Не зная ваш макрос, давайте предположим, что у вас есть общий макрос, который сохраняет введенные пользователем в колонке:

Sub InputMacro() 
    Range("B1:B100").Value = InputBox("What do you want to store in column B") 
End Sub 

Если вы хотите, чтобы петля над этим, сначала нужно параметризовать макрос, то есть сделать гибкой части, которую вы хотите изменить на каждом шаге цикла. Например. если вы хотите запустить через несколько столбцов, вы можете сделать это:

Sub InputMacro_new(intColNumber As Integer, Optional lngRowNumber As Long = 100) 
    Cells(1, intColNumber).Resize(lngRowNumber) = _ 
     InputBox("What do you want to store in column " & _ 
     Split(Cells(1, intColNumber).Address, "$")(1)) 
End Sub 

Это теперь принимает параметр intColNumber, то есть вы можете позвонить InputMacro_New 2 заполнить столбец B. Обратите внимание, что я также предоставил необязательный параметрlngRowNumber который по умолчанию равен 100. Вам не нужно указывать этот параметр, но если вы хотите, вы можете переопределить значение по умолчанию, например InputMacro_New 2, 50)

Теперь вы можете создать цикл в другой макрос, который вызывает макрос:

Sub MyLoop() 
    Dim intCol As Integer, varMaxCols As Variant 
    varMaxCols = InputBox("How many columns do you want to fill?") 

    If Not IsNumber(varMaxCols) Then Exit Sub 
    ElseIf varMaxCols < 1 Or varMaxCols > 255 Then Exit Sub 

    For intCol = 1 To varMaxCols 
     InputMacro_new intCol 
    Next intCol 

End Sub 

Конечно, если вы хотите, вы можете также комбинировать как в один большой макро - но особ. для больших макросов лучше всего разделить его на более мелкие процедуры.

Смежные вопросы