Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.06.2014, 18:02   #1
Ammat
Пользователь
 
Регистрация: 04.04.2014
Сообщений: 13
По умолчанию Сумма диапазона ячеек листов другой книги по условию.

Здравствуйте. Помогите реализовать задачу. Есть книга "Сумма" , на листе "Итог" - кнопка. По нажатию кнопки неоходимо открыть книгу "Данные" , посмотреть все листы, и если в ячейке "Н3" есть значение "ПРЖ" , тогда просуммировать диапазон (B9:T21) этих листов .Эту сумму поместить в соответствующий диапазон (B9:T21) листа "Итог" , где кнопка. Книгу "Данные" закрыть без изменений. Кто сможет , прошу помочь. Спасибо.
Вложения
Тип файла: rar Суммирование.rar (22.6 Кб, 14 просмотров)
Ammat вне форума Ответить с цитированием
Старый 12.06.2014, 12:00   #2
Ammat
Пользователь
 
Регистрация: 04.04.2014
Сообщений: 13
По умолчанию

Уважаемые профессионалы , посоветуйте что-нибудь.
Ammat вне форума Ответить с цитированием
Старый 12.06.2014, 12:46   #3
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Код:
Sub tt()
    Dim sh As Object
    With Application
        .DisplayAlerts = False
        .ScreenUpdating = False

        With GetObject(ThisWorkbook.Path & "\" & "Данные.xlsx")
            For Each sh In .Worksheets
                If sh.Range("H3") = "ПРЖ" Then
                    sh.Range("B9:T21").Copy
                    Range("B9").PasteSpecial Paste:=xlPasteAll, Operation:=xlAdd
                End If
            Next
            .Close 0
        End With

        [a1].Select
        .DisplayAlerts = True
        .ScreenUpdating = True
    End With
End Sub
Хотя нет, так глючит.
Надежнее так:
Код:
Sub tt()
    Dim sh As Object, r As Range, s$
    s = Range("H3").Value: Set r = Range("B9")
    
    With Application
        .DisplayAlerts = False
        .ScreenUpdating = False

        With Workbooks.Open(ThisWorkbook.Path & "\" & "Данные.xlsx")
            For Each sh In .Worksheets
                If sh.Range("H3") = s Then
                    sh.Range("B9:T21").Copy
                    r.PasteSpecial Paste:=xlPasteAll, Operation:=xlAdd
                End If
            Next
            .Close 0
        End With

        r.Select
        .DisplayAlerts = True
        .ScreenUpdating = True
    End With
End Sub
"ПРЖ" можно менять на листе.
Но правда тоже иногда выпадает в automation error - видать эта спецвставка дело ненадёжное...
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 12.06.2014 в 13:02.
Hugo121 вне форума Ответить с цитированием
Старый 12.06.2014, 13:18   #4
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

Код:
Sub AddData()
  Dim sh As Worksheet, shn As String
  Application.ScreenUpdating = False
  With Workbooks.Open(Filename:=ThisWorkbook.Path & Application.PathSeparator & "Данные.xlsx")
    ThisWorkbook.Activate
    For Each sh In .Worksheets
      If sh.Cells(3, 8) = "ПРЖ" Then sh.[B9:T21].Copy: [b9].PasteSpecial xlPasteAll, xlAdd:  shn = shn & ", " & sh.Name
    Next
    Application.CutCopyMode = False: .Close False
    If shn <> "" Then MsgBox "Data from" & Chr(10) & Chr(10) & .FullName & Chr(10) & Right(shn, Len(shn) - 2) & _
      Chr(10) & Chr(10) & "successfully added", vbOKOnly, "Congratulation!!!"
  End With
  Application.ScreenUpdating = True
End Sub
мой совет практически не отличается от предыдущего))
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете

Последний раз редактировалось IgorGO; 12.06.2014 в 13:21.
IgorGO вне форума Ответить с цитированием
Старый 12.06.2014, 14:30   #5
Ammat
Пользователь
 
Регистрация: 04.04.2014
Сообщений: 13
По умолчанию

Спасибо Всем огромное! Буду тестировать.
Ammat вне форума Ответить с цитированием
Старый 12.06.2014, 15:26   #6
Ammat
Пользователь
 
Регистрация: 04.04.2014
Сообщений: 13
По умолчанию

Спасибо Вам ,второй код работает хорошо. Проблемма в том , что собранная сумма добавляется к уже существующим данным на листе "Итог".Необходимо добавить в код команду : перед сбором суммы ,очистить диапазон ("B9:T21") на листе "Итог". Спасибо за помощь.
Ammat вне форума Ответить с цитированием
Старый 12.06.2014, 15:35   #7
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Включаете рекордер, очищаете диапазон, выключаете рекордер.
Добавляете код в код

Но если лень - добавьте в начало кода строку
Код:
Range("B9:T21").ClearContents
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 12.06.2014 в 15:44.
Hugo121 вне форума Ответить с цитированием
Старый 12.06.2014, 16:08   #8
Ammat
Пользователь
 
Регистрация: 04.04.2014
Сообщений: 13
По умолчанию

Добавил r.clearcontents .Диапазон не очищает.
Ammat вне форума Ответить с цитированием
Старый 12.06.2014, 17:18   #9
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Я там ошибся, исправил пост. Вроде через 10 минут уже исправил
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Макрос удаления пустых ячеек и листов книги sna1 Microsoft Office Excel 2 04.05.2011 20:49
Сумма по условию для одной из ячеек столбцов диапазона Severny Microsoft Office Excel 25 15.03.2011 15:58
Суммирование ячеек с заданного диапазона листов skivpokemon Microsoft Office Excel 18 05.06.2010 01:14
Выделение диапазона по условию тестовых значений ячеек as-is Microsoft Office Excel 1 08.03.2010 14:45
Выбор ячеек по условию из нескольких листов hamlook Microsoft Office Excel 10 10.11.2009 16:00