Страницы: 1
RSS
Почему макрос не ходит по листам?
 
Макрос должен вставить формулы во все столбцы C и D всех листов книги за исключением текущего (там макрос и живет) , а он падла все наоборот в текущий вставляет в остальные нет.  
 
Sub Макрос2()  
'  
' Макрос2 Макрос  
'  
On Error Resume Next: Application.ScreenUpdating = False  
   Dim sh As Worksheet, ra As Range, rcell As Range  
For Each sh In ThisWorkbook.Worksheets  
If sh.Name <> Me.Name Then  
For Each rcell In Range("C6:C" & Cells(Rows.Count, "A").End(xlUp).Row)  
   rcell.Formula = "=IF(MID(RC[-2],7,1)<>"" "",RC[-2],R[-1]C)"
  Next  
End If  
Next sh  
 
For Each sh In ThisWorkbook.Worksheets  
If sh.Name <> Me.Name Then  
   For Each rcell In Range("D6:D" & Cells(Rows.Count, "A").End(xlUp).Row)  
   rcell.Formula = "=IF(MID(RC[-3],7,1)<>"" "","""",RC[-3])"
  Next  
   
 End If  
  Next sh  
     
End Sub
 
Вы не указали ссылку на лист в этих строках:  
 
For Each rcell In Range("C6:C" & Cells(Rows.Count, "A").End(xlUp).Row)  
For Each rcell In Range("D6:D" & Cells(Rows.Count, "A").End(xlUp).Row)  
 
поэтому запись велась не активный лист, а не на обрабатываемый...  
 
 
 
вот так будет работать:  
 
Sub Макрос2()  
   On Error Resume Next: Application.ScreenUpdating = False  
   Dim sh As Worksheet, ra As Range, rcell As Range  
   For Each sh In ThisWorkbook.Worksheets  
       If sh.Name <> Me.Name Then  
           For Each rcell In sh.Range("C6:C" & sh.Cells(sh.Rows.Count, "A").End(xlUp).Row)  
               rcell.Formula = "=IF(MID(RC[-2],7,1)<>"" "",RC[-2],R[-1]C)"
           Next  
       End If  
   Next sh  
 
   For Each sh In ThisWorkbook.Worksheets  
       If sh.Name <> Me.Name Then  
           For Each rcell In sh.Range("D6:D" & sh.Cells(sh.Rows.Count, "A").End(xlUp).Row)  
               rcell.Formula = "=IF(MID(RC[-3],7,1)<>"" "","""",RC[-3])"
           Next  
       End If  
   Next sh  
End Sub
 
For Each rcell In Range("C6:C" & Cells(Rows.Count, "A").End(xlUp).Row)  
 
тут не указано на какой лист вставлять, должно быть  
For Each rcell In sh.Range("C6:C" & sh.Cells(sh.Rows.Count, "A").End(xlUp).Row)  
 
ну и далее по тексту
 
Спасибо всем работает но очень медленно.. потому и не отвечал.
 
Правильно медленно:) Вам ведь ответили только на 1 часть вопроса - почему не работает.  
А зачем 2 раза перебирать листы что бы вставить формулу сначала в один, а потом на следующем проходе в другой столбец?  
И может вставка формулы в весь диапазон через FormulaR1C1 будет быстрее:) Попробуйте.  
Игорь67  
 
Sub Макрос2()  
 
On Error Resume Next: Application.ScreenUpdating = False  
Dim sh As Worksheet, ra As Range, rcell As Range, k As Long  
 
For Each sh In ThisWorkbook.Worksheets  
 
If sh.Name <> ActiveSheet.Name Then  
 
k = sh.Cells(sh.Rows.Count, "A").End(xlUp).Row - 5  
 
sh.Range("C6").Resize(k).FormulaR1C1 = "=IF(MID(RC[-2],7,1)<>"" "",RC[-2],R[-1]C)"
sh.Range("D6").Resize(k).FormulaR1C1 = "=IF(MID(RC[-3],7,1)<>"" "","""",RC[-3])"
 
End If  
Next sh  
 
End Sub
 
{quote}{login=}{date=06.04.2010 02:19}{thema=}{post}Правильно медленно:) Вам ведь ответили только на 1 часть вопроса - почему не работает.  
А зачем 2 раза перебирать листы что бы вставить формулу сначала в один, а потом на следующем проходе в другой столбец?  
И может вставка формулы в весь диапазон через FormulaR1C1 будет быстрее:) Попробуйте.  
Игорь67  
 
Sub Макрос2()  
 
On Error Resume Next: Application.ScreenUpdating = False  
Dim sh As Worksheet, ra As Range, rcell As Range, k As Long  
 
For Each sh In ThisWorkbook.Worksheets  
 
If sh.Name <> ActiveSheet.Name Then  
 
k = sh.Cells(sh.Rows.Count, "A").End(xlUp).Row - 5  
 
sh.Range("C6").Resize(k).FormulaR1C1 = "=IF(MID(RC[-2],7,1)<>"" "",RC[-2],R[-1]C)"
sh.Range("D6").Resize(k).FormulaR1C1 = "=IF(MID(RC[-3],7,1)<>"" "","""",RC[-3])"
 
End If  
Next sh  
 
End Sub{/post}{/quote}  
Спасибо огромное обязательно проверю , хотя я туда уже воткнул ускорители., Я так не умею просто красиво писать макросы.
 
Спасибо огромное Игорь отработал мгнонвенно даже глазам не поверил.
Страницы: 1
Читают тему
Наверх