2014-08-28 2 views
0

Я создал книгу макросов, которая будет использоваться моим бухгалтерией. Книга макросов содержит динамические макросы, которые могут использоваться по разным причинам разными пользователями. Чтобы сделать еще один шаг вперед, я создал переднюю панель в книге макросов, которая имеет командную кнопку, назначенную для каждого макроса, и описание в ячейке рядом с командной кнопкой этого макроса.Выполнить макрос любой рабочей книги/таблицы с помощью командной кнопки

Я хотел бы, чтобы пользователь нажал кнопку командной строки макроса, который они желают, а затем выберите таблицу из другой книги для макроса, который будет выполнен. Ниже приведен пример макроса образца. В сущности, я пытаюсь выяснить, как я могу избежать использования пользователем Alt + F8 для выбора и запуска макроса, размещенного в книге макросов, позволяя пользователю выбирать командную кнопку по своему выбору.

Шаги будут:

  1. Пользователь будет загрузить отчет или будет иметь книгу открытой, что они хотели бы, чтобы выполнить макрос из общих макросов книги для отдела
  2. Пользователь будет открывать общая макроэкономическая книга, сохраненная в одном из разделяемых дисков
  3. Пользователь нажимает на командную кнопку макроса, который они хотели бы выполнить, показанный в главном меню. Это приведет к запуску макроса, но ничего не произойдет, пока пользователь не переключится и не отобразит книгу и электронную таблицу для выполнения макроса.
  4. Пользователь выбирает нужную книгу и таблицу для подтверждения применения макроса к макросу и выполняет макрос

я застрял на том, как построить логику, чтобы связать шаг 3 к шагу 4.

Sub fill_in() 
'Fills in blank cells with populated cells above 
'could help with filling in GL's for a set number of rows below 
'could help with filling in Property IDs or Resident IDs, etc. 


Dim col As String 
col = InputBox("Enter Column Letter to find Last Row") 

Dim lrow As Long 
lrow = Cells(Rows.Count, col).End(xlUp).Row 

    Dim StartRow As Long 
    Dim StartCol As String 
    Dim EndCol As String 

    StartRow = InputBox("Enter Beginning Row # for Range") 
    StartCol = InputBox("Enter Beginning Column Letter for Range") 
    EndCol = InputBox("Enter Last Column Letter for Range") 

Dim Rg As Range 
Set Rg = Range(Cells(StartRow, StartCol), Cells(lrow, EndCol)) 

'Fill data for each cell below 
Dim MyCounter As Long 
MyCounter = 0 
    For Each r In Rg 
     On Error Resume Next 
     If r.Value = "" Then 
      r.Value = r.Offset(-1, 0).Value 
     End If 
    Next 

End Sub 

ответ

1

Здравствуйте Так вот что я для вас в каждом из вас вы кнопки поместить этот код, чем выключите подзаголовки, например, я поместил ваш fill_in в этот код, просто изменив его.

Dim wb As Workbook 
Dim sheet As Worksheet 


Dim YesOrNoAnswerToMessageBox As String 
For Each wb In Application.Workbooks 
YesOrNoAnswerToMessageBox = MsgBox("Would you like to run the macro on " & wb.Name & "?", vbYesNo, "Where to run marco?") 
If YesOrNoAnswerToMessageBox = vbYes Then 
wb.Activate 
With wb 
For Each sheet In wb.Worksheets 
YesOrNoAnswerToMessageBox = MsgBox("Would you like to run the macro on worksheet " & sheet.Name & "?", vbYesNo, "Where to run marco?") 
If YesOrNoAnswerToMessageBox = vbYes Then 
sheet.Activate 

'Put sub name here 
fill_in 

End If 
Next sheet 
End With 
End If 
Next wb 
+0

Все, что вам нужно сделать, это изменить подзаголовки. Позвольте мне знать, если это сработает для вас. – Dmcovey1993

+0

Хахаха! Это потрясающая работа. Большое спасибо. Я подумал, что это пойдет по строкам, но я ударил по ментальной дорожке. Большое спасибо. Я думаю, что это облегчит для всех, у кого не было много макроэкспозиции. Это имеет смысл. Я проверил это, и он отлично работает. – fonzy16

+0

Ну, я поляна, я мог бы помочь – Dmcovey1993

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