2016-09-07 4 views
1

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

Мой код:

Workbooks("XXX.xls").Activate 

' Setting column width 
Workbooks("XXX.xls").Worksheets("XXX").Cells.Select 
Selection.ColumnWidth = 10 

' Filtering XXX funds 
Workbooks("XXX.xls").Worksheets("XXX").Rows("1:1").Select 
Selection.AutoFilter Field:=3, Criteria1:="=*XXX*" 

' Add new sheet and rename it 
Sheets.Add After:=Worksheets(Worksheets.Count) 
ActiveSheet.Name = "XXX_F" 

'Copying needed information 
Workbooks("XXX.xls").Worksheets("XXX").Range("A1:C1").Select 
Range(Selection, Selection.End(xlDown)).Select 
Selection.Copy 

Ошибка я получаю "Run Time Error '1004': Выберите метод Range Class не удалось" на третьей линии от дна. Я попытался это исправить, добавив следующую строку (то есть активации книги я хочу работать с первой):

Workbooks("XXX.xls").Activate 

Также я использовал прямые ссылки в моем коде, как:

Workbooks("XXX.xls").Worksheets("XXX").Range("A1:C1").Select 

Я понимаю, что это лучше не использовать. Выберите метод в моем коде вообще. Но это не первый случай, когда я получаю эту ошибку, и я просто хочу понять логику VBA. Насколько я понимаю, Excel просто не понимает, к какому листу я обращаюсь, но я не понимаю, почему - поскольку я активировал нужную мне книгу (у меня открыта пара книг) и с использованием явных ссылок. Если вы могли бы объяснить подробно, почему возникает эта ошибка (например, в какой момент Excel смущает), я буду очень благодарен!

Спасибо всем за помощь!

+1

просто подсказка - Excel имеет нечто, называемое экземплярами (если вы используете Excel 2007 и далее). Я полагаю, что в вашем случае вы открыли два неполадки. Чтобы исправить это, закройте все файлы excel, а затем откройте файл с кодом и с помощью XXX, просто нажав кнопку мыши. – Vityata

+2

Эта ошибка, вероятно, происходит, потому что, в то время как вы активируете книгу, вам также необходимо активировать рабочий лист, прежде чем вы сможете использовать метод .select на этом листе. Итак: 'worksheets (« XXX »). Активируйте' Я знаю, что вы это уже сказали, но помните, что почти всегда есть лучшие способы, чем использовать оператор select. – Jason

+1

Вы не можете выбрать что-либо, кроме активного листа. Лучшей практикой было бы реорганизовать код так, чтобы он не использовал *** «активные» или глобальные объекты. Получайте ссылки на свои объекты и используйте их вместо этого. – Comintern

ответ

1

Замечания по вопросу достаточно подробно описывают характер ошибки 1004, и вы, похоже, достаточно хорошо понимаете это.

Смотреть это большое обсуждение более подробно:

How to avoid using Select in Excel VBA macros

Вот ваш код переработан, чтобы избежать Select метода.

Dim wb as Workbook 
Dim ws as Worksheet 
Dim newWS as Worksheet 
Dim rngCopy as Range 

Set wb = Workbooks("XXX.xls") 
Set ws = wb.Worksheets("XXX") 

With ws 
    ' Setting column width 
    .Cells.ColumnWidth = 10 

    ' Filtering XXX funds 
    .Rows(1).AutoFilter Field:=3, Criteria1:="=*XXX*" 

    Set rngCopy = .Range(.Range("A1:C1"), .Range("A1:C1").End(xlDown)) 
End With 

' Add new sheet and rename it 
With wb 
    Set newWS = .Sheets.Add(After:=.Worksheets(.Worksheets.Count)) 
End With 
newWS.Name = "XXX_F" 

' Paste data in to the new worksheet 
rngCopy Destination:=newWS.Cells(1,1) 
+0

Большое спасибо за помощь! –

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