Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Изменить макрос. - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Изменить макрос.
Гость Дата: Суббота, 23.04.2011, 21:32 | Сообщение № 1
Группа: Гости
Sub CombinePrice()

Dim wSh1 As Worksheet: Set wSh1 = [KOD1].Parent
Dim wSh2 As Worksheet: Set wSh2 = [KOD2].Parent
Dim wSh As Worksheet: Set wSh = [KOD].Parent '
Dim Arr(), lRow&
Dim rKOD As Range, rNAZV As Range, rCENA As Range, rEDIN As Range

With CreateObject("Scripting.Dictionary")

lRow = wSh1.Cells(wSh1.Rows.Count, [KOD1].Column).End(xlUp).Row - [KOD1].Row - 1
Set rNAZV = [NAZV1].Offset(2, 0).Resize(lRow)
Set rKOD = [KOD1].Offset(2, 0).Resize(lRow)
Set rCENA = [CENA1].Offset(2, 0).Resize(lRow)
Set rEDIN = [EDIN1].Offset(2, 0).Resize(lRow)
For lRow = 1 To rKOD.Rows.Count
.Item(Trim(rKOD(lRow))) = Array(rKOD(lRow).Value, rNAZV(lRow).Value, rCENA(lRow).Value, rEDIN(lRow).Value)
Next lRow

lRow = wSh2.Cells(wSh2.Rows.Count, [KOD2].Column).End(xlUp).Row - [KOD2].Row - 1
Set rNAZV = [NAZV2].Offset(2, 0).Resize(lRow)
Set rKOD = [KOD2].Offset(2, 0).Resize(lRow)
Set rCENA = [CENA2].Offset(2, 0).Resize(lRow)
Set rEDIN = [EDIN2].Offset(2, 0).Resize(lRow)
For lRow = 1 To rKOD.Rows.Count
.Item(Trim(rKOD(lRow))) = Array(rKOD(lRow).Value, rNAZV(lRow).Value, rCENA(lRow).Value, rEDIN(lRow).Value)
Next lRow
Arr = Application.Transpose(Application.Transpose(.Items))
End With
[KOD].Offset(2, 0).Resize(wSh.Cells.SpecialCells(xlCellTypeLastCell).Row, 4).ClearContents
[KOD].Offset(2, 0).Resize(UBound(Arr, 1), UBound(Arr, 2)).Value = Arr
End Sub

Добрый день.
Данный макрос подтягивает уникальные из 2 листов, но если один из листов пустой, то макрос выдает ошибку. Подскажите что нужно изменить, что бы в случае если один лист пустой он подтягивал уникальные только с одного листа.

 
Ответить
СообщениеSub CombinePrice()

Dim wSh1 As Worksheet: Set wSh1 = [KOD1].Parent
Dim wSh2 As Worksheet: Set wSh2 = [KOD2].Parent
Dim wSh As Worksheet: Set wSh = [KOD].Parent '
Dim Arr(), lRow&
Dim rKOD As Range, rNAZV As Range, rCENA As Range, rEDIN As Range

With CreateObject("Scripting.Dictionary")

lRow = wSh1.Cells(wSh1.Rows.Count, [KOD1].Column).End(xlUp).Row - [KOD1].Row - 1
Set rNAZV = [NAZV1].Offset(2, 0).Resize(lRow)
Set rKOD = [KOD1].Offset(2, 0).Resize(lRow)
Set rCENA = [CENA1].Offset(2, 0).Resize(lRow)
Set rEDIN = [EDIN1].Offset(2, 0).Resize(lRow)
For lRow = 1 To rKOD.Rows.Count
.Item(Trim(rKOD(lRow))) = Array(rKOD(lRow).Value, rNAZV(lRow).Value, rCENA(lRow).Value, rEDIN(lRow).Value)
Next lRow

lRow = wSh2.Cells(wSh2.Rows.Count, [KOD2].Column).End(xlUp).Row - [KOD2].Row - 1
Set rNAZV = [NAZV2].Offset(2, 0).Resize(lRow)
Set rKOD = [KOD2].Offset(2, 0).Resize(lRow)
Set rCENA = [CENA2].Offset(2, 0).Resize(lRow)
Set rEDIN = [EDIN2].Offset(2, 0).Resize(lRow)
For lRow = 1 To rKOD.Rows.Count
.Item(Trim(rKOD(lRow))) = Array(rKOD(lRow).Value, rNAZV(lRow).Value, rCENA(lRow).Value, rEDIN(lRow).Value)
Next lRow
Arr = Application.Transpose(Application.Transpose(.Items))
End With
[KOD].Offset(2, 0).Resize(wSh.Cells.SpecialCells(xlCellTypeLastCell).Row, 4).ClearContents
[KOD].Offset(2, 0).Resize(UBound(Arr, 1), UBound(Arr, 2)).Value = Arr
End Sub

Добрый день.
Данный макрос подтягивает уникальные из 2 листов, но если один из листов пустой, то макрос выдает ошибку. Подскажите что нужно изменить, что бы в случае если один лист пустой он подтягивал уникальные только с одного листа.


Автор - Гость
Дата добавления - 23.04.2011 в 21:32
Alex_ST Дата: Суббота, 23.04.2011, 22:32 | Сообщение № 2
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3211
Репутация: 609 ±
Замечаний: 0% ±

2003

baters,
1. Без файла-примера вам никто тут помогать не будет! Тем более, что в файле - именованные диапазоны (уж я-то знаю, ведь я же сам его вам разрабатывал и макрос писал biggrin )
2. Практически все макрописцы тусуются не только здесь, но и на форуме у Димы - The_Prist и поэтому почти наверняка набдюдали там нашу с вами бесплодную дискуссию на трёх страницах в топике Уникальные
Так что вероятность получения вами ответа здесь достаточно мала.



С уважением,
Алексей
MS Excel 2003 - the best!!!


Сообщение отредактировал Alex_ST - Суббота, 23.04.2011, 23:06
 
Ответить
Сообщение
baters,
1. Без файла-примера вам никто тут помогать не будет! Тем более, что в файле - именованные диапазоны (уж я-то знаю, ведь я же сам его вам разрабатывал и макрос писал biggrin )
2. Практически все макрописцы тусуются не только здесь, но и на форуме у Димы - The_Prist и поэтому почти наверняка набдюдали там нашу с вами бесплодную дискуссию на трёх страницах в топике Уникальные
Так что вероятность получения вами ответа здесь достаточно мала.

Автор - Alex_ST
Дата добавления - 23.04.2011 в 22:32
Гость Дата: Суббота, 23.04.2011, 22:42 | Сообщение № 3
Группа: Гости
я бы не назвал нашу дискуссию бесплодной.....макрос рульный.....остался один маленький штрих (про пустой лист), но моему мозгу это не под силу.

PS смайл убей себя автар угарный :))).

 
Ответить
Сообщениея бы не назвал нашу дискуссию бесплодной.....макрос рульный.....остался один маленький штрих (про пустой лист), но моему мозгу это не под силу.

PS смайл убей себя автар угарный :))).


Автор - Гость
Дата добавления - 23.04.2011 в 22:42
Hugo Дата: Воскресенье, 24.04.2011, 02:25 | Сообщение № 4
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3551
Репутация: 771 ±
Замечаний: 0% ±

365
smile
Почитал дискуссию - давно я там (на сайте) не был.... Дизайн вроде поменялся - лучше стало, если я сайты не путаю...
Ах да, про пустые листы - можно прикрутить такой подход:
Code
Sub tt()
Dim ws As Worksheet
For Each ws In Sheets
If Application.CountA(ws.UsedRange) = 0 Then MsgBox "Sheets " & ws.Name & " Is Blank!"
Next
End Sub


webmoney: E265281470651 Z422237915069
USDT TRC20: TN8XeEF17o5KPBD9pNwYzNyruycuAc2mVD
 
Ответить
Сообщениеsmile
Почитал дискуссию - давно я там (на сайте) не был.... Дизайн вроде поменялся - лучше стало, если я сайты не путаю...
Ах да, про пустые листы - можно прикрутить такой подход:
Code
Sub tt()
Dim ws As Worksheet
For Each ws In Sheets
If Application.CountA(ws.UsedRange) = 0 Then MsgBox "Sheets " & ws.Name & " Is Blank!"
Next
End Sub

Автор - Hugo
Дата добавления - 24.04.2011 в 02:25
Alex_ST Дата: Воскресенье, 24.04.2011, 10:30 | Сообщение № 5
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3211
Репутация: 609 ±
Замечаний: 0% ±

2003
Игорь, ты файл на форуме у Дмитрия смотрел?
Я так понимаю, что под пустым листом, на котором макрос выдаёт ошибку, аноним (я-то знаю, что это baters, но он почему-то шифруется biggrin ) скорее всего имеет в виду лист, на котором есть шапка таблицы с именованными диапазонами в нём, но нет данных о товарах.
В таком случае нужно просто в двух местах после вычисления lRow ввести проверку на то, чтобы lRow было больше 2.



С уважением,
Алексей
MS Excel 2003 - the best!!!
 
Ответить
СообщениеИгорь, ты файл на форуме у Дмитрия смотрел?
Я так понимаю, что под пустым листом, на котором макрос выдаёт ошибку, аноним (я-то знаю, что это baters, но он почему-то шифруется biggrin ) скорее всего имеет в виду лист, на котором есть шапка таблицы с именованными диапазонами в нём, но нет данных о товарах.
В таком случае нужно просто в двух местах после вычисления lRow ввести проверку на то, чтобы lRow было больше 2.

Автор - Alex_ST
Дата добавления - 24.04.2011 в 10:30
KuklP Дата: Воскресенье, 24.04.2011, 10:38 | Сообщение № 6
Группа: Проверенные
Ранг: Старожил
Сообщений: 2369
Репутация: 486 ±
Замечаний: 0% ±

2003-2010
Христос воскрес, братишки! Я согласен с Алексом - нафига выкладывать такой длинный код без файла-примера? Кому интересно воображать, что там у автора в файле? Хочет ответ, пусть не ленится залогиниться и выложить файл.


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728
 
Ответить
СообщениеХристос воскрес, братишки! Я согласен с Алексом - нафига выкладывать такой длинный код без файла-примера? Кому интересно воображать, что там у автора в файле? Хочет ответ, пусть не ленится залогиниться и выложить файл.

Автор - KuklP
Дата добавления - 24.04.2011 в 10:38
Alex_ST Дата: Воскресенье, 24.04.2011, 10:44 | Сообщение № 7
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3211
Репутация: 609 ±
Замечаний: 0% ±

2003
Серёга, привет.
Во истину воскрес!
Я уже ответил топик-стартеру на форуме у Дмитрия. Раз он такой продвинутый, то простой If сам вставить в нужное место кода сможет.



С уважением,
Алексей
MS Excel 2003 - the best!!!


Сообщение отредактировал Alex_ST - Воскресенье, 24.04.2011, 10:45
 
Ответить
СообщениеСерёга, привет.
Во истину воскрес!
Я уже ответил топик-стартеру на форуме у Дмитрия. Раз он такой продвинутый, то простой If сам вставить в нужное место кода сможет.

Автор - Alex_ST
Дата добавления - 24.04.2011 в 10:44
KuklP Дата: Воскресенье, 24.04.2011, 10:54 | Сообщение № 8
Группа: Проверенные
Ранг: Старожил
Сообщений: 2369
Репутация: 486 ±
Замечаний: 0% ±

2003-2010
Да Леш, уже начинают раздражать темы вроде этой, этой Ссылка удалена администрацией и т.д. Начинаешь гадать - 99%, что попадешь пальцем в небо. Игорь у нас сердобольный, все пытается угадывать:-)


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728
 
Ответить
СообщениеДа Леш, уже начинают раздражать темы вроде этой, этой Ссылка удалена администрацией и т.д. Начинаешь гадать - 99%, что попадешь пальцем в небо. Игорь у нас сердобольный, все пытается угадывать:-)

Автор - KuklP
Дата добавления - 24.04.2011 в 10:54
Гость Дата: Воскресенье, 24.04.2011, 11:10 | Сообщение № 9
Группа: Гости
Всех с праздником.
Спасибо за внимание к моей теме.
Проблема решена.
 
Ответить
СообщениеВсех с праздником.
Спасибо за внимание к моей теме.
Проблема решена.

Автор - Гость
Дата добавления - 24.04.2011 в 11:10
Hugo Дата: Воскресенье, 24.04.2011, 13:08 | Сообщение № 10
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3551
Репутация: 771 ±
Замечаний: 0% ±

365
С праздником всех!

Так Application.CountA() можно по определённому диапазону посчитать, раз шапка есть всегда.
Ну в любом случае варианты проверки могут быть разные.



webmoney: E265281470651 Z422237915069
USDT TRC20: TN8XeEF17o5KPBD9pNwYzNyruycuAc2mVD
 
Ответить
СообщениеС праздником всех!

Так Application.CountA() можно по определённому диапазону посчитать, раз шапка есть всегда.
Ну в любом случае варианты проверки могут быть разные.


Автор - Hugo
Дата добавления - 24.04.2011 в 13:08
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!