2015-10-15 6 views
0

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

Возможно ли это? Активное окно изменяется каждый раз, когда пользователь нажимает кнопку макроса на первой странице, поэтому я думаю, что какой-то определяющий код вокруг подсказки будет ответом.

Sub hr_test() 
Dim fileBrowse As FileDialog 
Dim shtNum As Integer 
Set fileBrowse = Application.FileDialog(msoFileDialogOpen) 
If fileBrowse.Show = True Then wbPath = fileBrowse.SelectedItems(1) 
With Workbooks.Open(wbPath) 
    shtNum = InputBox("Enter the number of the sheet you want to use.") 
    Sheets(shtNum).Activate 

    Range("$A$1:$R$6523").AutoFilter Field:=3, Criteria1:= _ 
    "=Global Commercial Services-Global 1", Operator:=xlOr, Criteria2:= _ 
    "=Global Commercial Services-Global 2" 
Cells.Select 
Cells.EntireColumn.AutoFit 
Range("C4135").Select 
Columns("M:M").Select 
Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove 
Columns("B:B").Select 
Selection.Cut 
Range("M1").Select 
ActiveSheet.Paste 
Columns("B:B").Select 
Selection.Delete Shift:=xlToLeft 
Columns("Q:R").Select 
Selection.Delete Shift:=xlToLeft 
Range("R4130").Select 
Columns("B:B").Select 
Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove 
Columns("D:D").Select 
Selection.Cut 
Range("B1").Select 
ActiveSheet.Paste 
Columns("D:D").Select 
Selection.Delete Shift:=xlToLeft 
End With 
End Sub 
+0

Почему активное окно меняется? Обычно вы просто должны работать на листе, который пользователь сделал активным. – Rory

+0

Трудно прочитать код, который вы указали. – Davesexcel

+0

, пожалуйста, предоставьте код, который у вас есть, и мы можем помочь вам намного больше, чтобы работать с вашим желаемым решением. –

ответ

1

Предполагая, что ваши книги открыты:

Sub dural() 
    Dim r As Range, ws As Worksheet, wb As Workbook 
    Set r = Application.InputBox(Prompt:="Make a pick", Type:=8) 
    MsgBox "You picked sheet " & r.Parent.Name & " of Workbook " & r.Parent.Parent.Name 
End Sub 

Выберите книгу и лист и нажмите на любую ячейку в этой таблице.

+1

Я думаю, что стоит отметить, что вы, скорее всего, захотите добавить множество переменных 'wb' и' ws' на основе r, а затем ссылаться на остальные макросы с 'wb' и' ws' там, где это необходимо. –