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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.10.2016, 12:54   #1
Евгений Таб
Форумчанин
 
Аватар для Евгений Таб
 
Регистрация: 09.08.2013
Сообщений: 202
По умолчанию Макрос работает только с листа

Добрый день,

Подскажите пож-ста почему я запускаю этот макрос из листа - все ок.
Запускаю из модуля ошибка 400. Помоги пож-ста исправить код.

Спасибо, код ниже.

Код:
Sub QWERT()
    
Worksheets("iI").Activate 
    

      
name_sheets = "iI"
INVOICE = 1
Category = 146
Result = 147
                                                          
                                                          
'TEA+FOOD+HPC+ICFF
'--------------------------------------------------------------------------------------------------
    M = Range("A1").Resize(UsedRange.Rows.Count, Result).Value
    Set D = CreateObject("Scripting.Dictionary")
                    
    For R = 2 To UBound(M)
    
        If D.Exists(M(R, INVOICE)) Then
            Set W = D(M(R, INVOICE))
            If Not W.Exists(M(R, Category)) Then W(M(R, Category)) = M(R, Category)
        Else
            Set DR = CreateObject("Scripting.Dictionary")
            DR(M(R, Category)) = M(R, Category)
            D.Add M(R, INVOICE), DR
        End If
    Next R
    
    For R = 2 To UBound(M)
            For Each DR In D(M(R, INVOICE)).keys
                M(R, Result) = IIf(Len(M(R, Result)) = 0, DR, M(R, Result) & "+" & DR)
            Next
    Next R
    Range("A1").Resize(UsedRange.Rows.Count, Result) = M

    Category = 30
    Result = 148


'H1+H2+H3+H4+H5+H6
'--------------------------------------------------------------------------------------------------
    M = Range("A1").Resize(UsedRange.Rows.Count, Result).Value
    Set D = CreateObject("Scripting.Dictionary")

    For R = 2 To UBound(M)
    
        If D.Exists(M(R, INVOICE)) Then
            Set W = D(M(R, INVOICE))
            If Not W.Exists(M(R, Category)) Then W(M(R, Category)) = M(R, Category)
        Else
            Set DR = CreateObject("Scripting.Dictionary")
            DR(M(R, Category)) = M(R, Category)
            D.Add M(R, INVOICE), DR
        End If
    Next R
    
    For R = 2 To UBound(M)
            For Each DR In D(M(R, INVOICE)).keys
                M(R, Result) = IIf(Len(M(R, Result)) = 0, DR, M(R, Result) & "+" & DR)
            Next
    Next R
    Range("A1").Resize(UsedRange.Rows.Count, Result) = M
    

Set myrange = Range(Cells(2, Result), Cells(UBound(M), Result)) 
myrange.Select
For Each cell In Selection
cell.Value = Replace(cell.Value, "++", "+")
Next cell
    
    
End Sub

Последний раз редактировалось Евгений Таб; 07.10.2016 в 12:57.
Евгений Таб вне форума Ответить с цитированием
Старый 07.10.2016, 13:03   #2
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

ошибка 400 где?
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 07.10.2016, 13:05   #3
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

может модуль не знает с каким листом работать. Попробуй "обернуть" все в
Код:
with Worksheets("iI")
 .. 
end with
и все range, cells привязать к этому листу
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 07.10.2016, 13:13   #4
Евгений Таб
Форумчанин
 
Аватар для Евгений Таб
 
Регистрация: 09.08.2013
Сообщений: 202
По умолчанию

Цитата:
Сообщение от Aleksandr H. Посмотреть сообщение
может модуль не знает с каким листом работать. Попробуй "обернуть" все в
Код:
with Worksheets("iI")
 .. 
end with
и все range, cells привязать к этому листу
Александр, а как сделать? все range, cells привязать к этому листу?
Евгений Таб вне форума Ответить с цитированием
Старый 07.10.2016, 13:24   #5
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

UsedRange чьё? Непонятненько... всем. Когда работает не из модуля листа.
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 07.10.2016 в 13:27.
Hugo121 вне форума Ответить с цитированием
Старый 07.10.2016, 13:30   #6
Евгений Таб
Форумчанин
 
Аватар для Евгений Таб
 
Регистрация: 09.08.2013
Сообщений: 202
По умолчанию

Цитата:
Сообщение от Hugo121 Посмотреть сообщение
UsedRange чьё? Непонятненько... всем. Когда работает не из модуля листа.
Как же решить эту проблему
Евгений Таб вне форума Ответить с цитированием
Старый 07.10.2016, 13:38   #7
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Ну как решить... Наверное нужно написать чьё. Мне например непонятно чьё, я не решу.
Да ведь выше Александр уже подсказал - Ваше дело повтыкать всюду где нужно точки, и перед usedrange тоже, если всё к одному листу относится. А вдруг к другому? мне неведомо...
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 07.10.2016 в 13:41.
Hugo121 вне форума Ответить с цитированием
Старый 07.10.2016, 13:45   #8
Евгений Таб
Форумчанин
 
Аватар для Евгений Таб
 
Регистрация: 09.08.2013
Сообщений: 202
По умолчанию

Может покажите куда воткнуть? не могу понять
Евгений Таб вне форума Ответить с цитированием
Старый 07.10.2016, 14:11   #9
Евгений Таб
Форумчанин
 
Аватар для Евгений Таб
 
Регистрация: 09.08.2013
Сообщений: 202
По умолчанию

Все относится к одному листу.Worksheets("iI")
Евгений Таб вне форума Ответить с цитированием
Старый 07.10.2016, 14:14   #10
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

в начало процедуры
Код:
with Worksheets("iI")
в конец
Код:
end with
и перед что
Цитата:
относится к одному листу.Worksheets("iI")
ставите "."
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Упростить процедуру, меняются только наименование листа и столбца Ogeris Microsoft Office Excel 11 21.07.2016 14:54
Макрос отправки Листа по почте Сергей Ш. Microsoft Office Excel 4 25.05.2014 03:01
Удалить макрос из листа ermak123 Microsoft Office Excel 3 07.02.2013 17:07
Макрос сохраниения листа книги staniiislav Microsoft Office Excel 8 11.05.2011 16:36
Комментарии. Только при пин-коде. Почему работает только 1 пи код? Bushel PHP 1 23.10.2010 18:21