2013-12-09 6 views
1

Прежде всего, не смейтесь. И если вы это сделаете, просто сделайте это тихо. Я понятия не имею, как писать цикл Visual Basic, но я сделал свой лучший снимок. Я пытаюсь научиться VBA как можно лучше, делая, и мне просто нужно толчок в правильном направлении. Идея заключается в том, что я хочу написать простой макрос, который просматривает каждый рабочий лист, оценивает, есть ли группа в строках 19-43, если есть группировка, избавляется от группировки, если нет группировки, перейдите к следующему рабочий лист, а если больше нет листок, завершите цикл.Формулировка записи для активной рабочей книги

Вот моя попытка, которая явно не сработала.

Dim V Как вариант

V = ActiveWorksheet 

For Each V In Workbook 

Rows("a29:43").Select 

Selection.Rows.Ungroup 

Next 

Теперь, я понятия не имею, что квалификация, чтобы сказать что-то вроде, если он сгруппирован, то это, если не сгруппированы, то это. Я бы предположил, что это что-то вроде группировки = правда, но я не мог понять это. Я ОЧЕНЬ благодарен тем, кто сэкономил время, чтобы посмотреть на это.

+0

'Для каждого V In Sheets' – gtwebb

+1

Попробуйте добавить' A' сразу после двоеточия. – pnuts

ответ

0

Вам нужно определить коллекцию, которую вы хотите перебрать, так что в этом случае было бы рабочие листы, содержащиеся в книге:

Dim wbk As Workbook 
Dim sht As WorkSheet 

Set wbk = ActiveWorkbook 

For Each sht In wbk.Worksheets 

    sht.Rows("a29:43").Select ' this may give you trouble. Possibly try sht.Range("a29:a43").Select? 

    Selection.Rows.Ungroup 

Next 

Set wbk = Nothing ' Clean up our objects. Just to be sure. 

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

+0

Прежде всего, спасибо, что нашли время, чтобы написать решение. Когда я запускаю это решение, он говорит, что требуется «Ошибка времени выполнения 424». Он указывает на строку «Для каждого V в workbook.worksheets». У вас есть идея, почему это было бы? –

+0

Кроме того, благодарю вас за то, что вы выбрали недостаток использования односимвольных имен. У вас есть какие-либо советы для того, чтобы стать профессиональным VBA, как вы? Помните, я начинаю с довольно большой царапины. –

+2

LOL на "Pro". Я думаю, что здоровая доза отвращения к себе и безразличие к достойным объектно-ориентированным методам программирования - это хорошее начало. После этого я предлагаю использовать опцию «Record Macro» Excel, чтобы увидеть некоторые из языков или шаги, предпринятые для достижения простых задач. Они часто очень многословны, но позволяют видеть команды, используемые для достижения результата. После этого, просто много возиться, чтобы практиковать вещи и проверять вещи для себя. Это довольно интуитивный язык, чтобы забрать. –

0

Пара вещей:

  1. По @pnuts, вы теряете в 'A' в целевом диапазоне. Это может быть критическим.
  2. Ungroup не работает, если строки не сгруппированы. Это работает как Autofilter.
  3. Лучшей практикой было бы использовать Range - не Rows, а просто использовать свойство RowsRange - при работе с клетками-мишенями, если другой подход не нужен или не оправдан.

Это не совсем так. Обратите внимание на четкие и явные объявления каждой переменной. Также прочитайте комментарии. Они не самые лучшие, но они могут помочь вам в вашем явном стремлении узнать больше VBA. ;)

Sub UngroupRanges() 

    Dim wBk As Workbook, wSht As Worksheet 
    Dim rTarget As Range 

    Set wBk = ThisWorkbook 'Let wBk be this workbook. 

    For Each wSht In wBk.Worksheets 'Read: for each sheet in this workbook's collection of worksheets. 
     Set rTarget = wSht.Range("A29:A43") 'Read: I'll be setting rTarget as my target cells. 
     On Error Resume Next 'Read: If I hit an error after this line, I'll just continue executing. 
     rTarget.Rows.Ungroup 'Read: For all rows in rTarget, I'll do an ungroup. 
     On Error GoTo 0 'Read: If I hit an error after this, I won't skip anymore. 
    Next wSht 'Read: Move on to next worksheet. 

    Set wBk = Nothing 'Read: Release the assignment of this workbook to wBk. 

End Sub 

Сообщите нам, если это поможет.

+0

Действительно хороший материал здесь. Спасибо, что поделился. Вы научили меня хорошему с этим. К сожалению, когда я добавляю это в свой VBA и выполняю его, ничего не происходит. Когда я нажимаю alt + F11 и просматриваю код, имя выделяется желтым цветом, и я не уверен, почему. Я буквально вставил именно то, что вы написали в окно. Но даже если это не сработает, это интересный материал. Спасибо, что задумался. –

+0

Какая часть точно желтеет и какое сообщение об ошибке отображается? Эта часть: 'Sub UngroupRange()'? Если это так, измените имя на что-то еще, например «Sub Boom()» или что-то еще. Это в основном означает, что у вас есть другой макрос с тем же именем. Кроме того, убедитесь, что он находится внутри модуля, а не листа. – Manhattan

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