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 листов, но если один из листов пустой, то макрос выдает ошибку. Подскажите что нужно изменить, что бы в случае если один лист пустой он подтягивал уникальные только с одного листа.
baters, 1. Без файла-примера вам никто тут помогать не будет! Тем более, что в файле - именованные диапазоны (уж я-то знаю, ведь я же сам его вам разрабатывал и макрос писал ) 2. Практически все макрописцы тусуются не только здесь, но и на форуме у Димы - The_Prist и поэтому почти наверняка набдюдали там нашу с вами бесплодную дискуссию на трёх страницах в топике Уникальные Так что вероятность получения вами ответа здесь достаточно мала.
baters, 1. Без файла-примера вам никто тут помогать не будет! Тем более, что в файле - именованные диапазоны (уж я-то знаю, ведь я же сам его вам разрабатывал и макрос писал ) 2. Практически все макрописцы тусуются не только здесь, но и на форуме у Димы - The_Prist и поэтому почти наверняка набдюдали там нашу с вами бесплодную дискуссию на трёх страницах в топике Уникальные Так что вероятность получения вами ответа здесь достаточно мала.Alex_ST
С уважением, Алексей MS Excel 2003 - the best!!!
Сообщение отредактировал Alex_ST - Суббота, 23.04.2011, 23:06
Почитал дискуссию - давно я там (на сайте) не был.... Дизайн вроде поменялся - лучше стало, если я сайты не путаю... Ах да, про пустые листы - можно прикрутить такой подход:
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
Почитал дискуссию - давно я там (на сайте) не был.... Дизайн вроде поменялся - лучше стало, если я сайты не путаю... Ах да, про пустые листы - можно прикрутить такой подход:
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
Игорь, ты файл на форуме у Дмитрия смотрел? Я так понимаю, что под пустым листом, на котором макрос выдаёт ошибку, аноним (я-то знаю, что это baters, но он почему-то шифруется ) скорее всего имеет в виду лист, на котором есть шапка таблицы с именованными диапазонами в нём, но нет данных о товарах. В таком случае нужно просто в двух местах после вычисления lRow ввести проверку на то, чтобы lRow было больше 2.
Игорь, ты файл на форуме у Дмитрия смотрел? Я так понимаю, что под пустым листом, на котором макрос выдаёт ошибку, аноним (я-то знаю, что это baters, но он почему-то шифруется ) скорее всего имеет в виду лист, на котором есть шапка таблицы с именованными диапазонами в нём, но нет данных о товарах. В таком случае нужно просто в двух местах после вычисления lRow ввести проверку на то, чтобы lRow было больше 2.Alex_ST
Христос воскрес, братишки! Я согласен с Алексом - нафига выкладывать такой длинный код без файла-примера? Кому интересно воображать, что там у автора в файле? Хочет ответ, пусть не ленится залогиниться и выложить файл.
Христос воскрес, братишки! Я согласен с Алексом - нафига выкладывать такой длинный код без файла-примера? Кому интересно воображать, что там у автора в файле? Хочет ответ, пусть не ленится залогиниться и выложить файл.KuklP
Ну с НДС и мы чего-то стoим! kuklp60@gmail.com WM Z206653985942, R334086032478, U238399322728
Серёга, привет. Во истину воскрес! Я уже ответил топик-стартеру на форуме у Дмитрия. Раз он такой продвинутый, то простой If сам вставить в нужное место кода сможет.
Серёга, привет. Во истину воскрес! Я уже ответил топик-стартеру на форуме у Дмитрия. Раз он такой продвинутый, то простой If сам вставить в нужное место кода сможет.Alex_ST
С уважением, Алексей MS Excel 2003 - the best!!!
Сообщение отредактировал Alex_ST - Воскресенье, 24.04.2011, 10:45
Да Леш, уже начинают раздражать темы вроде этой, этой Ссылка удалена администрацией и т.д. Начинаешь гадать - 99%, что попадешь пальцем в небо. Игорь у нас сердобольный, все пытается угадывать:-)
Да Леш, уже начинают раздражать темы вроде этой, этой Ссылка удалена администрацией и т.д. Начинаешь гадать - 99%, что попадешь пальцем в небо. Игорь у нас сердобольный, все пытается угадывать:-)KuklP
Ну с НДС и мы чего-то стoим! kuklp60@gmail.com WM Z206653985942, R334086032478, U238399322728