Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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

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

Добрый день,

Подскажите пож-ста почему я запускаю этот макрос из листа - все ок.
Запускаю из модуля ошибка 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 в 13:57.
Евгений Таб вне форума   Ответить с цитированием
Старый 07.10.2016, 14:03   #2
IgorGO
МегаМодератор
СуперМодератор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Адрес: УКРАЇНА, Київ
Сообщений: 8,998
Репутация: 1710

icq: 7934250
skype: i2x0,5
По умолчанию

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

может модуль не знает с каким листом работать. Попробуй "обернуть" все в
Код:

with Worksheets("iI")
 .. 
end with

и все range, cells привязать к этому листу
__________________
Mailto: media.project@ukr.net
Aleksandr H. вне форума   Ответить с цитированием
Старый 07.10.2016, 14:13   #4
Евгений Таб
Форумчанин
 
Аватар для Евгений Таб
 
Регистрация: 09.08.2013
Адрес: Москва
Сообщений: 194
Репутация: 10
По умолчанию

Цитата:
Сообщение от Aleksandr H. Посмотреть сообщение
может модуль не знает с каким листом работать. Попробуй "обернуть" все в
Код:

with Worksheets("iI")
 .. 
end with

и все range, cells привязать к этому листу
Александр, а как сделать? все range, cells привязать к этому листу?
Евгений Таб вне форума   Ответить с цитированием
Старый 07.10.2016, 14:24   #5
Hugo121
Профессионал
 
Регистрация: 11.05.2010
Сообщений: 4,999
Репутация: 464
По умолчанию

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

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

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

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

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

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

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

в начало процедуры
Код:

with Worksheets("iI")

в конец
Код:

end with

и перед что
Цитата:
относится к одному листу.Worksheets("iI")
ставите "."
__________________
Mailto: media.project@ukr.net
Aleksandr H. вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Упростить процедуру, меняются только наименование листа и столбца Ogeris Microsoft Office Excel 11 21.07.2016 15: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


19:53.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru