2013-03-10 7 views
1

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

Моя проблема в том, Я использую приведенный ниже код, и ТОЧНЫЙ такой же код отлично работает в главном листе, но как только я переключусь на другой лист в коде VBA и использую его, он выбирает все столбцы, начиная с столбца 1, до конца данные.

Идея нижеследующего кода заключается в том, чтобы начать в столбце 1 и найти столбец под названием «Composite Rating». Затем я хочу УДАЛИТЬ все столбцы, начиная со столбца 3, до столбца Composite Rating.

Может ли кто-нибудь сказать мне, что я делаю неправильно? Большое спасибо за любую помощь!

For counter = 1 To 40 Step 1 
     Cells("1", counter).Select 
     strval = ActiveCell.Value 
    If strval = "Composite Rating" And counter <> 3 Then 
     Range(Cells(1, 3), Cells(1, counter - 1)).EntireColumn.Select 
     Selection.Delete Shift:=xlLeft 
     Exit For 
    End If 
    Next counter 

EDIT: Извините, должен был упомянуть о моей установке. Я использую Excel 2007 в Windows 7. Я пробовал файлы как xls, так и xlsx, то же самое.

ответ

2

Try ниже код:

Dim rng As Range 
    Set rng = Range("A1:Z1").Find("Composite Rating") 

    If Not rng Is Nothing Then 
     If rng.Column > 3 Then 
      Range("C1", rng).EntireColumn.Delete 
     End If 
    End If 
+0

Awesome !! Это сработало, спасибо! Фактически, когда я изменил свой собственный код на «Удалить» вместо «Выбрать», а затем «Выбор.Делет», он тоже сработал! Вы когда-нибудь видели, где использовать EntireColumn.Select на самом деле выбирает ВСЕ столбцы, несмотря ни на что? Ваш код более эффективен, используя функцию «Найти», поэтому я буду реализовывать это, вместо того, чтобы перебирать столбцы. Я относительно новичок в VBA, поэтому я должен искать список функций :) Еще раз спасибо! – zpert

+0

Один быстрый вопрос ... Было ли что-то не так с повторным использованием переменной rng, чтобы найти другие диапазоны в том же Sub? Я не знал, как VBA работал со ссылочными переменными, указателями, областью видимости и т. Д., Если возникла проблема с его сбросом, не влияя на исходный диапазон, на который он был установлен. Благодаря! – zpert

+1

@zpert Вы можете повторно использовать переменную rng. Но поскольку вы новичок в мире vba, я wud говорю, объявляю новую переменную и использую ее, чтобы избежать какой-либо путаницы. – 2013-03-10 16:56:49

0

index Недвижимость в коллекции Windows меняется при выборе других окон -> это относительно!

Вместо этого используйте коллекцию Workbooks.

+0

Благодаря Sebastian. Это хорошо знать в будущем. Я выбрал правильное окно, функция Select просто не работала должным образом. – zpert

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