2014-11-13 11 views
-2

У меня есть 24 листа с именем от 0 до 23 и вам нужно выполнить команду цикла для каждого листа. меня попробовать циклическую процедуру, как я нашел во многих учебниках, но ни один не работа, нужно ваше предложение здесьЦикл рабочих листов VBA

Sheets("0").Select 
Cells.Select 
Range("B1").Select 
Range(Selection, Selection.End(xlToRight)).Select 
Range(Selection, Selection.End(xlDown)).Select 
Selection.ClearContents 

Недавно я попробовать этот код, но он останавливается на «Sheets (I) .Select» ошибка выполнения «9»: Подстрочный из диапазона

Dim i as integer 
    For i = 0 To 23 
    Sheets(i).Select 
    Cells.Select 
    Range("B1").Select 
    Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select 
    Selection.Clear 
Next i 
+0

Какой диапазон вы хотите очистить? В вашем коде есть три «Range.Select», но только диапазон, выбранный «Range (Selection, Selection.End (xlDown)). Выберите« может обрабатываться с помощью «Selection.ClearContents». Я не могу понять, что вы хотите от своего кода. Когда ваша цель станет ясной, вы сможете получить хороший ответ. –

+0

Мне нужно очистить все содержимое, за исключением столбца A. – Panjul

+0

Мне нужно очистить все содержимое, за исключением столбца A. И как дополнительная информация, каждый лист имеет случайное количество в содержании. На самом деле я не очень хорош в коде, поэтому я просто записываю свой макрос вручную, а затем редактирую код. – Panjul

ответ

0

Если я правильно читать ваш вопрос, вы спрашиваете, как цикл через рабочие листы в книге и выполнить код, который вы выводите, правильно? Если это так, обратитесь к этой статье Microsoft Support:

http://support.microsoft.com/kb/142126

-1

код VBA, чтобы очистить клетки, за исключением столбца 'A' будет

Range("B1").Select 'select top left corner of range to be cleared. 
Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select 'select upto bottom right corner(xlLastCell) of range to be cleared. 
Selection.Clear 'Clear selected cells. 

Чтобы подать заявку на рабочих листах под названием "0", "1". ...., "23", добавить цикл для листов вне кода выше. Это может стать:

Dim i as integer, sheetname as string 
Dim ws as Worksheet 

For i=0 to 23 
    sheetname=Cstr(i) 'create sheetname from number (loop variable i) 
    set ws = worksheets(sheetname)  
    ws.Activate 'select worksheet with name "0","1",... and "23" for each 
    Range("B1").Select 'select top left corner of range to be cleared. 
    Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select 'select upto bottom right corner(xlLastCell) of range to be cleared. 
    Selection.Clear 'Clear selected cells. 
next i 
+0

Я пробовал код, но он застрял в «set ws = worksheets (имя листа)». Индекс вне диапазона. Я что-то пропустил? – Panjul

+0

Пожалуйста, добавьте «msgbox», чтобы показать значение имени листа. Затем проверьте рабочий лист с таким именем. «Подписание вне пределов времени» означает «Нет рабочего листа, который имеет это имя». Когда-нибудь имя рабочего листа, как лишние символы, проверьте внимательно. –

0

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

 Sub AllButA() 

     Dim ws As Worksheet 


     For Each ws In ThisWorkbook.Worksheets '<~~ it will loop over the worksheets in the workbook 
      For i = ws.UsedRange.Columns.Count To 2 Step -1 '<~~ we go from the last used column in the sheet to column 2 (column B) from high to low to avoid messing with the indexes 
       ws.Columns(i).ClearContents '<~~ we clear the column content 
      Next 
     Next 


     End Sub 

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

 Sub AllButA() 

     Dim ws As Worksheet 


     For i = 0 To 23 
      Set ws = ThisWorkbook.Worksheets(CStr(i)) '<~~ instead of looping we assign the worksheet variable by name 
      For j = ws.UsedRange.Columns.Count To 2 Step -1 '<~~ same as the other example, just with j instead of i 
       ws.Columns(j).ClearContents 
      Next 
     Next 


     End Sub 

Если последний соответствует вашим потребностям, пожалуйста, проверьте лист имена как Fumu 7 предлагают

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