Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
Определение "новый"/"повторный" заказ с помощью DAX.
 
Кейс следующий, нужно с помощью DAX создать в PowerPivot КОЛОНКУ, которая будет определять статус для записи-заказа, новый это заказ или старый. Алгоритм определения статуса заказа следующий:
1) Если идентификатор клиента встречался в предыдущих МЕСЯЦАХ, то заказ считается "Повторным".
2) Иначе заказ считается "Новым".

Не очень хорошо пока ориентируюсь в DAX функциях, тыкаюсь с FIND, SEARCH, пытаюсь получить отфильтрованную таблицу за предыдущий срок, но решения пока не выходит. Может опытные форумчане смогут подсобить?

Пример того, что должно выходить:
Идентификатор клиентаДата заказа Статус заказа
155501.03.2018Повторный
277702.02.2018 Новый
355502.02.2018Повторный
433302.02.2018Повторный
555515.01.2018Новый
6333 08.01.2018Новый
7333 04.01.2018Новый
8 555 01.01.2018 Новый
Группировка различных типов данных через Power Pivot
 
Скажем, есть три столбца - Статьи, Месяца, Значение. Среди статей есть как количественные (материалы), так и и процентные (рентабельность). Поэтому если создавать сводную таблицу с временной шкалой, и выбирать период в полгода, он суммирует все значение, что неверно для процентных значений. Можно ли выбрать смешанный агрегатор и указать, мол тут ты считаешь сумму, а тут среднее?
Работа с браузером
 
Sub info()  
Dim oIE As Object  
Set oIE = CreateObject("InternetExplorer.Application")  
oIE.Visible = 1    
oIE.navigate ("yandex.ru")  
Do While oIE.busy Or (oIE.readyState <> 4): DoEvents: Loop    
Application.Wait Now + 1.5 / 86400  
oIE.document.forms(0).elements(0).Value = "111"    
End Sub  
 
Данный код прекрасно работает на 2-ух системах: 1)Windows XP 32bit Office 2007, 2)Windows 7 64bit Office 2007. Т.е. в поисковую строку Yandex вводится 111.  
 
Если же подставить интересующий меня сайт, и соответственно другой элемент, то код исполняется лишь на первой системе. На семерке же код отчего-то выдаёт ошибку:  
Run-time error ‘-2147417848 (80010108)’:  
 
Automation error  
The object invoked has disconnected from its clients.  
 
Отчего так - думается из-за библиотек или из-за битности системы. Но не пойму, почему в первом случае с Yandex всё работает прекрасно. Был бы премного благодарен, если бы указали куда копать или подсказали решение.
Проблема со скачиванием файла на 64-bit'ной системе
 
Sub info()  
Dim oIE As Object  
Set oIE = CreateObject("InternetExplorer.Application")  
oIE.Visible = 0 ' не отображать окно Интернет Эксплорера 0/1 отображать  
oIE.Navigate ("www") 'сайт  
Do While oIE.busy Or (oIE.readyState <> 4): DoEvents: Loop 'ждем пока браузер загрузится  
Application.Wait Now + 1.5 / 86400  
oIE.document.forms("pform").elements("camusername").Value = "login" 'вводим логин  
oIE.document.forms("pform").elements("campassword").Value = "1234" 'вводим пароль  
oIE.document.forms("pform").elements("cmdok").Click 'нажимаем ОК  
oIE.quit  
set oIE=nothing  
End Sub  
 
Проблема в том, что данный код работает на XP 32битном, но не работает на 64-битной 7ке. Ругается на oIE.document.forms("pform").elements("camusername").Value = "login". Говорит, что непонятный ему интерфейс. Пробовал подключать те же библиотеки - безуспешно. Также игнорирует oIE.Visible = 0, и всё равно показывает IE. Понимаю, что ошибка скорее всего из-за битности, но пока информации не нашёл. Заранее благодарен.
Макрос открытия вебсайта с вводом логина и пароля
 
Sub info()  
Dim oIE As Object  
Dim tmp, i As Long  
Set oIE = CreateObject("InternetExplorer.Application")  
oIE.Visible = 0 ' не отображать окно Интернет Эксплорера 0/1 отображать  
oIE.Navigate ("http://www") 'сайт  
Do While oIE.busy Or (oIE.ReadyState <> 4): DoEvents: Loop 'ждем пока браузер загрузится  
oIE.Document.forms("pform").elements("camusername").Value = "111" 'вводим логин  
oIE.Document.forms("pform").elements("campassword").Value = "1234" 'вводим пароль  
oIE.Document.forms("pform").elements("cmdok").Click 'нажимаем ОК  
Do While oIE.busy Or (oIE.ReadyState <> 4): DoEvents: Loop 'ждем пока браузер загрузится  
oIE.Visible = 1  
End Sub  
 
Пошагово этот код выполняется прекрасно.При обычном запуске макроса выдаёт    
Run-time error '91': Object variable or With block variable not set  
В чём проблема понять не могу.
Панель быстрого доступа
 
Существует ли способ через VBA изменять панель быстрого доступа? Добавлять, удалять кнопки, назначать им иконку и давать название?
Включить надстройку
 
Собственно, написал насдтройку с рядом макросов. Проблема в том, что при экспорте из баз данных Cognos'а начинается новый процесс с excel'ем и вкладка надстройка просто отсутствует. Проблема, как мне кажется в открытии Excel'я, хотя при создании новой книги надстройки присутствуют. Есть ли способ заставить Excel открывать надстройки при любом открытии, включая экспорт. Если нет, то каким образом можно решить эту задачу?
Проблема с защитой листов
 
Книга защищает листы с помощью следующего кода:  
 
Private Sub Workbook_Open()  
Dim wsh As Worksheet  
For Each wsh In Me.Sheets  
wsh.Protect Password:="111", UserInterfaceonly:=True, AllowFormattingColumns:=True, AllowFormattingRows:=True  
Next wsh  
End Sub  
 
Проблема заключается в том, что на листе становится невозможно использовать иерархию, т.е. ни выбрать уровень в иерархии, ни нажимать плюсики, чтобы посворачивать не нужное. При этом скрывать строки в ручную можно. Перебрал уже все возможные варианты со свойствами protect, но ничего не выходит. Существует ли вообще способ защитить лист, но не блокировать доступ к иерархии?
Объединение ячеек с одинаковым названием
 
Имеется выгруженная страница из Excel. В ней в силу проблем с экспортом ячейки с одинаковым названием идут друг за дружкой, например А1:А10 - Итого Итого Итого и т.д. Также бывают что одинаковые ячейки идут в строку. Требуется написать макрос, чтобы он объединял ячейки с одинаковыми названиями. Пытался делать через перебор, получается ерунда, и слишком громоздко. Как видится, следует при нахождении двух ячеек с одинаковыми названиями идущими друг за дружкой (как в столбец, так порой и в строку) запоминать название. После этого ячейки с таким названием добавлять в один Range или коллекцию. Как только ячейки закончатся, Range объединять, и начинать накапливать следующий. Заранее благодарю за помощь. Прикладываю файл с примером формы.
Выделение столбцов
 
Требуется выделить и закрасить столбец под определённой шапкой. Проблема состоит в том, что шапка может состоять из нескольких объединенных столбцов, и при выполнение следующего кода:  
Sub example()  
Dim r As Range  
For Each r In ActiveSheet.UsedRange  
If r.Value Like "Плановый год*" Then  
With Range(r, r.End(xlDown)).Interior  
.ThemeColor = xlThemeColorAccent6  
.TintAndShade = 0.799981688894314  
End With  
End If  
Next r  
End Sub  
 
Выделяется лишь один из подстолбцов под шапкой, а надо, чтобы выделились все. Как обратиться ко всем столбцам?
Не могу разобраться с Do... Until
 
Sub testq()  
Do  
For Each cell In ActiveSheet.UsedRange  
cell.Activate  
If ActiveCell.Column <> 1 And ActiveCell.Row <> 1 Then  
If ActiveCell.NumberFormat = "0.00" And _  
ActiveCell.Offset(-1, 0).NumberFormat <> "0.00" _  
And ActiveCell.Offset(0, -1).NumberFormat <> "0.00" _  
Then ActiveWindow.FreezePanes = True  
End If  
Next  
Exit Do  
Loop Until ActiveWindow.FreezePanes = True  
End Sub  
 
Не могу разобраться с синтаксисом этого оператора. Если его убрать, то получается слишком долгий перебор всех ячеек. Если его оставить, как он сейчас есть, то перебор осуществляется всё равно по всем ячейкам. Если его поставить перед Next, то перебор заканчивается на 1-ой же ячейки. Принцип, понимаю, наверное вообще следует отказаться от For each, но как по-другому осуществить перебор ячеек на проверку условий не понимаю.    
 
И ещё:    
Set FoundCell = Range("A1:A10").Find(what:="a", after:=LastCell)  
Как можно здесь воспользоваться оператором OR, если требуется чтобы он искал несколько значений, да ещё и так, чтобы он не множил сущности типо этого:  
Set FoundCell = Range("A1:A10").Find(what:="a", after:=LastCell) or _  
Set FoundCell = Range("A1:A10").Find(what:="b", after:=LastCell) or _  
Set FoundCell = Range("A1:A10").Find(what:="c", after:=LastCell)  
 
Заранее благодарю.
Создание границ и закрепление области
 
Требуется, чтобы макрос выполнял ряд вещей связанных с форматированием листов. С большинством задач справился, но вот 2 задачи не представляю, как решить. Точнее представляю, но не совсем понимаю, как это реализовать в рамках VBA. На форуме тоже похожей проблемы не нашёл, поэтому обращаюсь к вам.  
 Итак: 1) Имеется ряд заголовков в ячейках сверху, под ними через пару пустых строк начинается таблица. Требуется, чтобы макрос определял на листе таблицу и форматировал её с границами. В принципе, таблицы обычно начинаются с 5 строки, но всё же хотелось бы, чтобы макрос определял её сам. Через UsedRange, как мне видится он будет подхватывать и шапку, и поэтому отформатирует вообще всё.  
       2) Требуется, чтобы в той же таблице он закреплял область таким образом, чтобы шапка таблицы и название статей слева оказывались статичны. Как мне видится, это можно сделать через определение формата ячеек. Т.е. перебирая ячейки сверху и слева, как только находит первую ячейку с форматом числовым, так сразу и закреплял область. Но как осуществить этот перебор удобно, чтобы он не сканировал все ячейки подряд, и не ошибся с ячейкой, не имею представление. Второй вариант, найти ячейку с условием, что слева и сверху будут ячейки с текстовым форматированием, а сама она числовая. И опять же на ней закрепить область.  
 Заранее благодарю за помощь.
Форматирование книг
 
Sub ôîðìàò()  
Dim book As Workbook  
With ActiveWindow  
.DisplayZeros = False  
.View = xlPageBreakPreview  
End With  
With Range("A1:AZ1000")  
.NumberFormat = "0"  
End With  
ActiveSheet.PageSetup.PrintArea = ""  
With ActiveSheet.PageSetup  
.Zoom = False  
.PaperSize = xlPaperA4  
.FitToPagesWide = 1  
.FitToPagesTall = 1  
End With  
End Sub  
 
По какой то причине последняя часть кода не применяется, а точнее применяется не корректно. Кол-во листов принудительно проставляется, но ЗУМ остаётся 100 и разметка проходит неверно, раскидывая таблицу на несколько листов.  
Также в глубинах памяти не могу вспомнить способ указывать рабочую область листа. Не напомните? Чтобы убрать "A1:AZ1000".  
И ещё есть такой вопрос-существует ли способ применить форматирование к книгам и всем листам внутри не открывая саму книгу? Или только с отркрытыми книгами можно такое сделать через For each book in workbooks?  
Заранее благодарю.
Сохранение большого колличества книг в папку
 
Добрый день.  
Из сторонней программы экспортируется 30-40 экселевских книг. Они оформляются, как новые книги. Требуется, чтобы все эти книги скопом сохранялись в одну папку. При этом названия для книги макрос должен брать из ячейки B2 в каждой книги. Также требуется, чтобы макрос работал при выводе его на панель, или в виде надстройки, т.к. при экспорте не открывается Personal.xlsb. На данный момент написал такой макрос:  
 
Sub Èòîã()  
 
 Dim book As Workbook  
 With Application.FileDialog(msoFileDialogFolderPicker)  
 .InitialFileName = Application.DefaultFilePath & "\"  
 .Title = "Ñîõðàíåíèå âûãðóçêè"  
 .Show  
 If .SelectedItems.Count = 0 Then  
 Else  
 For Each book In Workbooks  
 If book.Name <> ThisWorkbook.Name Then  
 book.Activate  
 Range("B2").Select  
 book.SaveAs Filename:=ActiveCell.Value & ".xlsx", _  
     FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False  
     End If  
     Next  
     End If  
     End With  
End Sub  
 
Макрос прекрасно работает с уже сохраненными книгами, но отказывается работать с Новыми. Думалось, может новые книги не входят в коллекцию Workbooks пока не сохранить их, но такой информации не нашёл. Теряюсь в догадках.    
Заранее благодарю.
Страницы: 1
Наверх