Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Excel - применить макрос ко всей книге / 20 сообщений из 20, страница 1 из 1
16.05.2013, 17:33
    #38260797
SPR5
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel - применить макрос ко всей книге
Сделал по инструкции .


Т.е. было так:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Sub SummAver()
Range(“D1:D101″).Select
Range(“D101″).Activate
ActiveCell.FormulaR1C1 = “=SUM(R[-100]C:R[-1]C)”
Range(“E1:E101″).Select
Range(“E101″).Activate
ActiveCell.FormulaR1C1 = “=AVERAGE(R[-100]C:R[-1]C)”
ActiveWindow.SmallScroll Down:=18
Range(“D101″).Select
End Sub 



... стало так:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
Sub SummAver()

Dim wsheet As Worksheet
For Each wsheet In ActiveWorkbook.Worksheets
Sheets(wsheet.Name).Select

Range(“D1:D101″).Select
Range(“D101″).Activate
ActiveCell.FormulaR1C1 = “=SUM(R[-100]C:R[-1]C)”
Range(“E1:E101″).Select
Range(“E101″).Activate
ActiveCell.FormulaR1C1 = “=AVERAGE(R[-100]C:R[-1]C)”
ActiveWindow.SmallScroll Down:=18
Range(“D101″).Select

Next wsheet

End Sub




Но чуда не происходит. Подскажите, пожалуйста, где я ошибся?
...
Рейтинг: 0 / 0
16.05.2013, 19:28
    #38260968
Serge 007
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel - применить макрос ко всей книге
SPR5чуда не происходитА какого чуда Вы ждали, копируя текст макроса с низкопробного, непрофильного ресурса?
Каков источник - таков и результат.
Так будет работать:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
Sub SummAver()
Dim ws As Worksheet
    For Each ws In ActiveWorkbook.Worksheets
        Range("D101").FormulaR1C1 = "=SUM(R[-100]C:R[-1]C)"
        Range("E101").FormulaR1C1 = "=AVERAGE(R[-100]C:R[-1]C)"
    Next
End Sub
...
Рейтинг: 0 / 0
16.05.2013, 20:39
    #38261020
The_Prist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel - применить макрос ко всей книге
Serge 007, так как ты написал будет работать. Факт. Но фигово :) И явно не так, как задумывалось. Где указание диапазону на лист, в котором прописывать формулы? Опять забыл? :)
SPR5, вот так будет работать для всех листов:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
Sub SummAver()
Dim ws As Worksheet
    For Each ws In ActiveWorkbook.Worksheets
        ws.Range("D101").FormulaR1C1 = "=SUM(R[-100]C:R[-1]C)"
        ws.Range("E101").FormulaR1C1 = "=AVERAGE(R[-100]C:R[-1]C)"
    Next
End Sub
...
Рейтинг: 0 / 0
16.05.2013, 21:04
    #38261049
Serge 007
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel - применить макрос ко всей книге
The_PristОпять забыл?Тяжело забыть то чего не знаешь
Дим, ты же знаешь, что я с VBA на "ты"
Но даже мне понятно, что блог по ссылке - это просто непотребно...

Спасибо за правки, хотя я пока этой разницы не чувствую...
...
Рейтинг: 0 / 0
16.05.2013, 21:15
    #38261059
The_Prist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel - применить макрос ко всей книге
Сергеа, насчет непотребно - можно поспорить. Там в принципе верно написано, просто далеко не оптимально. Как я прочитал - там совет для тех, кто в макросах не понимает и не особо есть время и желание учить. Записал макрос - применил ко всем листам не вдаваясь в нюансы(типа ws.Range). С этой точки зрения там более чем верно все. Другой вопрос - как это применялось. Скорее всего тупо скопировалось с сайта с теми же непотребными кавычками, которые на нем. VBA их просто непонимает и явно появляется ошибка синтаксиса.
Здесь налицо ошибка блогерра в отсутствии оформления кода тегами и ошибка пользователя в бездумном копировании.
...
Рейтинг: 0 / 0
16.05.2013, 21:16
    #38261060
The_Prist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel - применить макрос ко всей книге
The_PristСергеаДрогнула рука хирурга :-) Хотел написать Сергей
...
Рейтинг: 0 / 0
16.05.2013, 21:19
    #38261065
Serge 007
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel - применить макрос ко всей книге
Да, Дим, спасибо, Всё верно!
...
Рейтинг: 0 / 0
17.05.2013, 08:14
    #38261282
SPR5
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel - применить макрос ко всей книге
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Sub SummAver()
Dim ws As Worksheet
    For Each ws In ActiveWorkbook.Worksheets


    ... текстовка моего макроса


    Next
End Sub



Так не работает. Т.е. работает, конечно, но - опять же - только на активной странице.



Может, это из-за того, что "Microsoft Office 2013" (x86)? Но у меня, к сожалению, не осталось ни 2007-го, ни 2010-го, чтобы проверить работоспособность :(
...
Рейтинг: 0 / 0
17.05.2013, 08:16
    #38261284
SPR5
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel - применить макрос ко всей книге
Или (как вариант) не работает из-за того, что страницы переименованы? Т.е. стандартные имена "Лист1", "Лист2" и т.д. заменены на нестандартные "Приход", "Вычет", и т.д.?
...
Рейтинг: 0 / 0
17.05.2013, 08:24
    #38261288
AndreTM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel - применить макрос ко всей книге
SPR5
Код: vbnet
1.
    ... текстовка моего макроса


Так не работает. Т.е. работает, конечно, но - опять же - только на активной странице.Где? Где речёвка то?
А то уже в философию ударяемся - "это Офис виноват"....
...
Рейтинг: 0 / 0
17.05.2013, 10:03
    #38261414
Serge 007
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel - применить макрос ко всей книге
SPR5работает только на активной странице
Цикл
Код: vbnet
1.
For Each ws In ActiveWorkbook.Worksheets

перебирает все листы текущей книги, независимо от их названия. Макрос писал в Excel 2013, а работать он будет в любой версии

ЗЫ Я тоже хирург :)
Фразу " я с VBA на "ты" " следует читать как " я с VBA на "ВЫ" "
...
Рейтинг: 0 / 0
17.05.2013, 10:09
    #38261424
The_Prist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel - применить макрос ко всей книге
SPR5Так не работает. Т.е. работает, конечно, но - опять же - только на активной странице.Т.е. переписку Вы не читали? Не заметили мои правки к коду Сергея и урок из этого не вынесли? Вполне ведь очевидно, что ошибка как раз в "... текстовка моего макроса". Но именно эту часть Вы считаете абсолютно непогрешимой - во всем виноваты другие строки и офис....
...
Рейтинг: 0 / 0
17.05.2013, 14:48
    #38262099
SPR5
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel - применить макрос ко всей книге
Ну, я не то что бы "не читал", просто применил так, как увидел.


Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
Sub delete()

Dim ws As Worksheet
    For Each ws In ActiveWorkbook.Worksheets

    Rows("1:7").Select
    Selection.delete Shift:=xlUp

    Dim aaa As Range
    Dim bbb As Range
    Application.ScreenUpaaating = False
    Txt1 = "Яблоки"
    Txt2 = "Груши"
    For Each aaa In ActiveSheet.UsedRange.Rows
        
        If Not aaa.Find(Txt1, , xlValues, xlPart) Is Nothing Then
            If bbb Is Nothing Then Set bbb = aaa Else Set bbb = Union(bbb, aaa)
        End If
        
        If Not aaa.Find(Txt2, , xlValues, xlPart) Is Nothing Then
            If bbb Is Nothing Then Set bbb = aaa Else Set bbb = Union(bbb, aaa)
        End If
   
    Next
    If Not bbb Is Nothing Then bbb.EntireRow.delete
    End

Next
End Sub



... и ничего не получил. Т.е. это работает только для одной страницы.
...
Рейтинг: 0 / 0
17.05.2013, 18:26
    #38262546
Казанский
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel - применить макрос ко всей книге
Application.ScreenUpaaating = False

Это работает? o_O
...
Рейтинг: 0 / 0
17.05.2013, 18:32
    #38262556
Казанский
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel - применить макрос ко всей книге
А зачем End ?! Это же немедленное прекращение работы программы.
...
Рейтинг: 0 / 0
17.05.2013, 19:16
    #38262643
AndreTM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel - применить макрос ко всей книге
SPR5
Код: vbnet
1.
    For Each aaa In ActiveSheet.UsedRange.Rows


это работает только для одной страницы.Что пишете - то и получаете.
А раз завели ws - так используйте, и будет вам счастье....
...
Рейтинг: 0 / 0
22.05.2013, 13:12
    #38268182
SPR5
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel - применить макрос ко всей книге
Application.ScreenUpaaating = False

Это работает? o_Oне работает, ибо это я запарился. Там, конечно же, вместо "Application.ScreenUpaaating = False" должно быть "Application.ScreenUpdating = False"


А зачем End ?! Это же немедленное прекращение работы программы.затем, что не ведаю я вообще ничего в том, что творю в VB, потому-то и обратился сюда.



Что пишете - то и получаете.
А раз завели ws - так используйте, и будет вам счастье....А как корректно задействовать "ws" в приведённом выше коде?
...
Рейтинг: 0 / 0
22.05.2013, 15:14
    #38268451
The_Prist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel - применить макрос ко всей книге
SPR5А как корректно задействовать "ws" в приведённом выше коде?Мой первый пост с кодом как раз показывает как. Но Вы читали и не видели. Как еще показать - лично я не знаю.
...
Рейтинг: 0 / 0
23.05.2013, 07:12
    #38269376
ZVI
ZVI
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel - применить макрос ко всей книге
SPR5, так должно работать,
обратите внимание на использование Ws в 2-х местах внутри For-Each:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
Sub DeleteRows()
  
  ' --> Settings, change to suit
  Const RowsToDel As String = "1:7"
  Const Txt1 As String = "Яблоки"
  Const Txt2 As String = "Груши"
  ' <-- End of settings
  
  Dim Ws As Worksheet
  Dim Rng As Range, x As Range

  Application.ScreenUpdating = False

  For Each Ws In ActiveWorkbook.Worksheets
    Ws.Rows(RowsToDel).Delete Shift:=xlUp
    For Each x In Ws.UsedRange.Rows
      If Not x.Find(Txt1, , xlValues, xlPart) Is Nothing Then
        If Rng Is Nothing Then Set Rng = x Else Set Rng = Union(Rng, x)
      End If
      If Not x.Find(Txt2, , xlValues, xlPart) Is Nothing Then
        If Rng Is Nothing Then Set Rng = x Else Set Rng = Union(Rng, x)
      End If
    Next
    If Not Rng Is Nothing Then
      Rng.EntireRow.Delete
      Set Rng = Nothing
    End If
  Next

  Application.ScreenUpdating = True

End Sub
...
Рейтинг: 0 / 0
25.05.2013, 08:26
    #38273007
SPR5
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel - применить макрос ко всей книге
ZVI
покорнейше Вас благодарю, это именно то, что мне нужно!
...
Рейтинг: 0 / 0
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Excel - применить макрос ко всей книге / 20 сообщений из 20, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]