2015-04-22 4 views
0

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

Set targetWorkbook = Application.ActiveWorkbook 
filter = "Text files (*.xls*),*.xls*" 
Caption = "Please Select the Target file" 
Ret = Application.GetOpenFilename(filter, , Caption) 

If Ret = False Then Exit Sub 
Application.AskToUpdateLinks = False 
Set wb = Workbooks.Open(Ret) 
Application.AskToUpdateLinks = True 
wb.Worksheets("**This Keeeps on Changing**").Move After:=targetWorkbook.Sheets(targetWorkbook.Sheets.Count) 

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

+0

Установите рабочий лист копируется в переменную, теперь у вас есть ссылки на него и может продолжить свой код, используя переменную, а также изменить название в то же время. [Вот пример] (http://stackoverflow.com/a/7692456/2521004) от Тима Уильямса –

+0

И если вы хотите спуститься по дороге, вы предлагаете: 'mySheet = inputbox (...' должен делать трюк –

ответ

1
Sub ertdfgcvb() 
Set targetWorkbook = Application.ActiveWorkbook 
Filter = "Text files (*.xls*),*.xls*" 
Caption = "Please Select the Target file" 
Ret = Application.GetOpenFilename(Filter, , Caption) 

If Ret = False Then Exit Sub 
Set wb = Workbooks.Open(Ret, False) 'why set it on application level when it's an optional argument? 

shname = InputBox("What worksheet are you looking for?", "Changing sheet names are for losers") 
For Each Worksheet In wb 
    If LCase(Worksheet.Name) Like "*" & LCase(shname) & "*" Then        'it might be changing but it probably has a fixed part, right? 'note: you can use wildcards and string conversion rules 
     Worksheet.Move After:=targetWorkbook.Sheets(targetWorkbook.Sheets.Count) 'do whatever it did before 
    End If 
Next 
End Sub 
+1

Пойдем, попытаемся использовать это. Его просто данные, которые я использую в файле, не обновляемом мной, и видели изменения имен листов, поэтому просто хотели сделать его общим. – Meesha

1
Set targetWorkbook = Application.ActiveWorkbook 
Filter = "Text files (*.xls*),*.xls*" 
Caption = "Please Select the Target file" 
Ret = Application.GetOpenFilename(Filter, , Caption) 

If Ret = False Then Exit Sub 
Set wb = Workbooks.Open(Ret, False) 'why set it on application level when it's an optional argument? 

For Each Worksheet In wb 
    If LCase(Worksheet.Name) Like "*changing*" Then        'it might be changing but it probably has a fixed part, right? 'note: you can use wildcards and string conversion rules 
     Worksheet.Move After:=targetWorkbook.Sheets(targetWorkbook.Sheets.Count) 'do whatever it did before 
    End If 
Next 
+0

inb4 методы, а не правила – user3819867

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