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

Страницы: 1 2 След.
Многострочный GET массив или как VBA общаться с Bitrix API, Делюсь как интегрировать Bitrix с VBA через вебхуки, и ищу ответ как использовать еще одно поле.
 
Друзья, приветствую.
Уже не знаю где искать ответ, но тут всегда совместно получалось решить задачу.
Использую VBA для работы с REST API Битрикс. Простые запросы с легкостью отправляю таким макросом
https://bitrix.site.ru/rest/632/key/crm.item.update?id=1537&fields[UFCRM_34_FOTO]=123
И с большим количеством полей проблем нет.
Использую простую функцию для отправки.
Код
Function httpSend(url As String) As String
    Set httpRequest = CreateObject("MSXML2.XMLHTTP") 'Msxml2.XMLHTTP.6.0
    Debug.Print ("GET send: " & url)
    httpRequest.Open "GET", url, False
    httpRequest.Send
    httpSend = httpRequest.responseText
End Function
и все прекрасно срабатывает, для длинных текстов использую конвертер в URL формат
Код
Public Function RStURL(ByVal txt As String) As String
    For i = 1 To Len(txt)
        l = Mid(txt, i, 1)
        Select Case AscW(l)
            Case Is > 4095: T = "%" & Hex(AscW(l) \ 64 \ 64 + 224) & "%" & Hex(AscW(l) \ 64) & "%" & Hex(8 * 16 + AscW(l) Mod 64)
            Case Is > 127: T = "%" & Hex(AscW(l) \ 64 + 192) & "%" & Hex(8 * 16 + AscW(l) Mod 64)
            Case 32: T = "%20"
            Case 43: T = "%2b"
            Case 47: T = "%2F"
            Case Else: T = l
        End Select
        RStURL = RStURL & T
    Next
End Function
Теперь захотел прикладывать еще файлы, а они принимаются только в формате Base64, но и это не проблема есть готовая функция для конвертации
Код
Public Function EncodeFile(strPicPath As String) As String
    Const adTypeBinary = 1          ' Binary file is encoded

    ' Variables for encoding
    Dim objXML
    Dim objDocElem

    ' Variable for reading binary picture
    Dim objStream

    ' Open data stream from picture
    Set objStream = CreateObject("ADODB.Stream")
    objStream.Type = adTypeBinary
    objStream.Open
    objStream.LoadFromFile (strPicPath)

    ' Create XML Document object and root node
    ' that will contain the data
    Set objXML = CreateObject("MSXml2.DOMDocument")
    Set objDocElem = objXML.createElement("Base64Data")
    objDocElem.DataType = "bin.base64"

    ' Set binary value
    objDocElem.nodeTypedValue = objStream.Read()

    ' Get base64 value
    EncodeFile = objDocElem.Text

    ' Clean all
    Set objXML = Nothing
    Set objDocElem = Nothing
    Set objStream = Nothing

End Function
А вот дальше передать необходимо двумя параметрами одного поля (документация)
выглядит этот get вот так (это к вопросу 2)
Код
{
    "fields": {
        "ufCrm1617027453943": [
             "myfile.pdf", 
             "...base64_encoded_file_content..."
        ]
    }
}
Вроде как этого можно достигнуть вот таким вызовом
https://bitrix.site.ru/rest/632/key/crm.item.update?id=1537&fields[UFCRM_34_FOTO]=['myfile.pdf']&fields[UFCRM_34_FOTO]=['...base64_encoded_file_content...']

Но в результате получаю ошибку "Сбой скачивания указанного ресурса" Run-time error '-2146697208 (800c0008)':
Если заменить реальную строчку base64_encoded_file_content на "ххх" например, все отрабатывает, но файл понятно не открывается и весит 2б

Длинна символьного URL запроса составляет: 161 527 символов - и есть ощущение, что эта ошибка связана с каким то ограничением MSXML2.XMLHTTP.
Уважаемые эксперты, знаете ли вы:
1) Есть ли ограничения по количеству символов GET запроса?
2) Как в экселе можно передать запрос как GET запрос выше из VBA? - не понимаю как его оформить в VBA.

Заранее благодарен за помощь.
Андрей VG, Doober, Msi2102, Дмитрий(The_Prist) Щербаков, очень надеюсь на вашш опыт и помощь :)  
невозможное делаем сразу, чудо - требует небольшой подготовки.
Повреждение файла Excel в области VBA, Стал вылетать только один файл
 
Друзья, привет, впервые столкнулся с таким странным поведением эксель, может кто подскажет куда копать.
Хронология:
1) Был файл, работал обновлял по вебхукам таблицы, макрос обновлял все связи собирал таблички и отправлял новый файл по почте, все работало стабильно
2) Неожиданно стал выдавать ошибку "нет такого макроса или макросы отключены"
3) Открываю файл, пытаюсь запустить руками, но все окна с кодом белые, не кликаются, не меняется масштаб. Вся рабочая область как зависла.
4) Из раздела разработчик если нажать "Макросы" Excel вылетает
5) При попытке пересохранить файл "Сохранить как" Excel вылетает
6) Проверял на разных ПК - картина идентична, с другими файлами работает стабильно. Табличная часть (листы и PQ) работают тоже стабильно, именно VBA часть отлетела.
Яндекс ничего внятного не дал, пакеты VBA включены, макросы разрешены. Не понимаю куда копать.
Вопрос: Почему это могло случиться и что с этим делать? Файл приложить не могу т.к. содержит ключи доступа к базе.  
Изменено: phelex - 01.09.2023 12:04:46
невозможное делаем сразу, чудо - требует небольшой подготовки.
Цикл и извлечение Power Query
 
Друзья, привет.

Пытаюсь реализовать функцию получения списка из интернета по json. Есть проблемка что полный код дать не могу т.к. тестовой машины нет, но может наведете меня на ошибку. Постараюсь рассказать по шагам.
Код
let
    Url = "https://сайт.ru/rest/доступ/ключ/tasks.task.list.json?filter[STATUS]=-1&start=",
    RecordsPerPage = 50,
    Source = Json.Document(Web.Contents(Url & "1")),
    TotalCount = Source[total],
    PagesCount = Number.RoundUp(TotalCount / RecordsPerPage),
    GetRecords = (start) =>
let
            PageJson = Json.Document(Web.Contents(Url & Text.From(start))),
            PageList = PageJson[result][tasks],
            ToTable = Table.FromRecords(PageList),
            DownloadedTable = Table.ExpandRecordColumn(ToTable, "responsible", {"name"}, {"name"}),
            ExpandedTable = Table.SelectColumns(DownloadedTable,{"id", "name"})
        in
            ExpandedTable,
    Pages = List.Skip(List.Generate(() => 1, each _ <= PagesCount, each _ + 1), 1),
    Records = List.Generate(() => GetRecords(1), each List.Count(_) > 0, each GetRecords(List.Last(List.LastN(Pages, 1)) * RecordsPerPage + 1)),
    Result = Table.Combine(Records)
in
    Result

Запрос выполняется до пункта Records, на нем выпадает ошибка
Цитата
Expression.Error: Не удается преобразовать значение типа Table в тип List.
Сведения:
   Value=Table
   Type=Type
Причем отдельно часть GetRecords выполняется прекрасно.А когда начинаю их собирать через цикл улетает с ошибкой, структуру приложил в скриншотах.
Уже голову сломал что не так и где я Table в тип List преобразую. Прошу помощи у экспертов. Заранее благодарен. Если что то важное не предоставил, просьба уточнить.
невозможное делаем сразу, чудо - требует небольшой подготовки.
Эффективный перебор всех координат в таблице1 по всем полигонам таблицы2, Есть набор точек координат, необходимо распределить их по городам исходя из полигонов на карте
 
Всем привет.
Возникла потребность рассортировать точки по разным локациям (локация это список координат точек формирующих фигуру на карте), коллеги утверждают что сделают это на питоне, а на эксель это будет проблематично. Но я абсолютно верю в эксель и начал решать задачу. Уже написал разбор координат в массив, реализовал функцию сравнения входит ли точка в полигон (спасибо этой теме). На этапе реализации основного блока я не придумал как проводить сравнение максимально быстро и эффективно. Базовая логика перебирать в массиве точек массив полигонов (которые каждый раз при обращении пересобирать из строки не хочется). Точек может быть много, да и областей огромное количество, хочется поделиться универсальным решением для всех (т.к. сам не нашел).

Пример файла (с набросками кода) во вложении, там есть 4 точки и 3 полиогна, если точка не входит ни в один полигон - указываем "Нет полигона", если входит в 2 и более "Ошибка" (но такой пример не зашил). В данный момент сам дописываю через нерациональный способ (но чтобы работало), но вдруг кто то придумает вариант интереснее.

Спасибо за внимание.
невозможное делаем сразу, чудо - требует небольшой подготовки.
Создание прайс листа из Сводной таблицы
 
Необходимо доработать собрщик прайс листа из плоской таблицы.
Итого 2 блока:
1) Сборка и дизайн (Собрать по группировкам, сгруппировать)
2) Написать код подключения к ftp для скачивания и отображения картинок (ткнули на картинку, в фоне скачалась картинка, отобразилась в окне VBA)

Прошу оценить стоимость работы.
На сейчас есть действующий код, но он не справляется с 4 тысячи SKU, возможно нужен другой подход.

Пример во вложении
невозможное делаем сразу, чудо - требует небольшой подготовки.
Пропало окно, показывающее размер выделяемого диапазона в таблице
 
Друзья, привет! Вопрос простой, но ответ найти в гугле и настройках не смог.
Куда то пропало окно показывающее размер выделяемого диапазона в таблице. Знает кто как его вернуть? :)  
Изменено: vikttur - 18.08.2021 09:54:32
невозможное делаем сразу, чудо - требует небольшой подготовки.
Создание прайс листа из таблицы
 
Друзья, добрый день.
Есть задача из плоской таблицы создать красивый прайс лист с группировкой. Пока нет мыслей как это сделать, может кто то подскажет как сделать обработку для подобного преобразования?
Заранее благодарен.
невозможное делаем сразу, чудо - требует небольшой подготовки.
Сочетание Screenupdating = False с userform
 
Друзья, приветствую.
Столкнулся с проблемой использования сочетания 3х блоков VBA.
Есть файл (рабочий) который копирует содержимое другого файла (базы). Т.к. процесс долгий поэтому добавил UserForm прогресс бар.
Сочетание следующее:
1) Application.ScreenUpdating= false
2) Открытие книги
3) Вызов UserForm прогресс бара.

Без userform окно excel второй книги не открывалось, при вызове оно всплывает и перекрывает userform. Есть гипотеза что отображение прогресс бара включает ScreenUpdating, возможно кто то знает как это работает? С примером проблема, есть очень большой файл и переработка под пример займет много времени. Возможно кто-то уже уверенно скажет, что вызов UserForm обновляет экран?

Заранее спасибо
невозможное делаем сразу, чудо - требует небольшой подготовки.
VBA При клике левой кнопкой мыши на Active элемента, открыть контекстное меню ПКМ ячейки
 
Друзья, добрый день.

Сделал удобный интерфейс через ActiveX, при выборе ячейки открывается TextBox, натягивается на ячейку и становится активным для внесения данных. Но у меня есть потребность, чтобы при клике ПКМ по TextBox, открывалось контекстное меню (правой кнопки мыши).

Вопросы где мне нужна помощь:
1) Как отловить клик правкой кнопки мыши по форме?
2) Как программно открыть контекстное меню правой кнопки мыши


Заранее спасибо
Изменено: phelex - 11.05.2021 10:32:32
невозможное делаем сразу, чудо - требует небольшой подготовки.
Возврат результата работы WshShell.Run
 
Друзья, добрый день.
Сложный вопрос, гугл и поиск не помогли. В рамках VBA через WshShell.Run запускаю стороннее приложение которое выполняет некую функцию, результатом работы является получение id файла в другой системе, можно ли как то вернуть результат работы обратно в excel?

Спасибо
невозможное делаем сразу, чудо - требует небольшой подготовки.
Массовый выбор в ListBox
 
Друзья, приветствую. Продолжаем развивать интерфейс макроса "Поиск и подстановка из базы". Во вложении пример позволяющий искать значения, вставлять их в ячейку и подставлять решения. Теперь столкнулся с потребностью "Вставить все", но пока не могу придумать как реализовать, необходимо добавить кнопку под выпадающим списком "Выбрать все" при нажатии которой будут вставляться все элементы ListBox построчно. Т.е. Текст1 в строку 2, Текст2 в строку 3, Текст 3 в строку 4. И соответственно подставление результата в столбце 2. Условно понимаю что наверно как то можно загрузить все значения ListBox в массив, определить его длину, запустить цикл с текущей строки до конца массива, но пока не понимаю как это реализовать. Заранее спасибо.
Изменено: phelex - 12.03.2021 15:50:26
невозможное делаем сразу, чудо - требует небольшой подготовки.
Ошибка RemoveDuplicates, Ошибка VBA при обработке RemoveDuplicates
 
Друзья, столкнулся с проблемой не понимаю с чем связана. Взял свой старый код и разбил на несколько блоков после чего код стал вылетать с ошибкой.
Друзья, подскажите свежим взглядом что вызывает ошибку? Код хранится в GoSendBuget остальные файлы кладем в одну папку.

Возможно кто то предложит альтернативный вариант агрегации значений, я сделал через удаление дубликатов (которое не работает).

Заранее спасибо.
Изменено: phelex - 28.02.2021 15:37:46
невозможное делаем сразу, чудо - требует небольшой подготовки.
Подстановка данных предыдущего периода по условию
 
Друзья, привет!
Столкнулся с задачей которую не получается решить логически...
Есть таблица данных содержащая поквартальные и средние данные по фактической наценке и затрат разных уровней, необходимо чтобы пустые значения внутри строки брали аналогичные данные за прошлый период (для Q1 соответственно Q4, в таблицы просто цифры 1-4) того же показателя. Строк много, формулами проблемно, было бы идеально макросом или PQ, но вот логику пока придумать не могу.

Пример и планируемый результат во вложении.

Буду рад если сможете помочь. Заранее спасибо.
невозможное делаем сразу, чудо - требует небольшой подготовки.
VBA агрегация данных по столбцу большого объема данных
 
Друзья, привет!

Нужна ваша логическая помощь и экспертиза.
Задача простая, есть 2 файла: Plans и report. В файле Plans указаны планы по определенным кодам в суммах и штуках, в файле report указаны все операции построчно, по столбцам есть все данные Код, Сумма, Штуки. Цель подставить по коду общую сумму продаж и штук.

Первая мысль использовать перебор через строк в первом и втором файле через For, при этом в файле report строк может быть очень много, что приведет к долгой обработке. Возможно есть другой логический способ собрать данные? Может массивом, может есть какая то агрегация, может библиотеку подключить. Поделитесь пожалуйста опытом.

Заранее благодарен.
невозможное делаем сразу, чудо - требует небольшой подготовки.
PQ обрезает текст до 255 символов при сборке из файлов
 
Друзья, привет!

Столкнулся с проблемой которая совершенно не описана в интернете и книге Николая по PQ. При сборке данных из книг в папке текст в ячейках свыше 255 символов обрезается до 255, причем по какой то странной логике - если в первых 9 строках на листе был текст более 255 символов, то он не обрезает, а если не было то обрезает.

Пример прикладываю отдельными файлами т.к. 7zip не дает приложить. Файл1 и Файл2 складываем в папку, в PQ файла СборВыгрузок в первом шаге указываем путь к этой папке.

Возможно есть кто сталкивался с таким вопросом?

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

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

  Дано: Есть простая таблица из двух столбцов Код и Покупатель. При вставке Покупателя из списка необходимо вставить в столбец следующий свободный код, первые коды для каждого покупателя вводятся руками по логике: 20 (3 буквы) 12 / Номер кода формата 00 (Более 99 быть не может). Необходимо при введение в столбце B имени из списка сгенерировать код следующий за максимальным. Например для Коли первый код 20КОЛ12/01, при введение в следующей строке еще одного Коли код 20КОЛ12/02. При этом если так случилось что коды 20КОЛ12/01 и 20КОЛ12/03 есть, то при вставке получается 20КОЛ12/02.

  Логически понимаю что наверно необходимо наполнить массив по признаку Коля. Т.е. посчитать кол-во Коль от строки 2 до текущей, создать пустой двумерный массив. Далее через Mid и Left разложить на код и номер кода и наполнить 2 столбца массива. Далее перебираем через цикл (по длине массива) коды i = Код * 1?
Если значения нет - проверяем Len, если = 1, то Номер кода = "0" & i , Далее переменную NewCode = Массив(1) + Номер кода

  Но что то не очень понимаю как создать пустой массив и наполнить его. Возможно есть более простое решение или альтернативные варианты решения задачи?

Заранее спасибо. Пример прикладываю.
Изменено: phelex - 23.11.2020 21:38:58 (По просьбе модератора.)
невозможное делаем сразу, чудо - требует небольшой подготовки.
VBA выбор элемента LixtBox двойным кликом
 
Друзья, привет!
Во вложении пример поиска из базы и вставки значения.
В данном макросе реализовано через кнопку Enter.
Помогите переработать под дабл клик по элементу в ListBox.
Заранее спасибо.
невозможное делаем сразу, чудо - требует небольшой подготовки.
Макрос поиска текстового значения (Доработка), Ранее помогли с написанием кода для поиска значений из базы делюсь и прошу помощи в доработке
 
Друзья, привет!

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

Вопрос темы: Помогите доработать.
Сейчас возникла задача использовать несколько полей с поиском из разных блоков (порядка 4 листов на каждом по 3 столбца с поиском)., как же масштабировать этот макрос? Вот тут нужна помощь экспертов.

Вопросы с которыми не разобрался:
1) Какие элементы используются в  конструкторе? Если верно полня поле ввода это ActiveX текстовое поле, а что за ListBox и Lable? Не могу найти их, возможно они включаются? И можно ли создать их на 1 листе, а использовать на разных?
2) Можно ли переформатировать данный скрипт под функцию или необходимо прописывать набор из 4 макросов под каждый диапазон / базу?
3) Есть ли идеи по оптимизации кода, например строка "If Not Intersect(Target, Range("A2:A1000")) Is Nothing Then" - выглядит странно двойным отрицанием.

Буду рад если найдутся знающие люди и помогут унифицировать и масштабировать решение.

Заранее спасибо.
невозможное делаем сразу, чудо - требует небольшой подготовки.
Ошибка "Указано измерение, недопустимое для текущего типа диаграммы.", При отправке сообщения в чат BItrix24 выполняет все функции, но в конце выдает ошибку.
 
Добрый день друзья.
Решил задачу автоматизированной отправки отчетов в чаты Bitrix24 в виде картинок через веб-хук, все функции выполняются, но в конце выдает ошибку.
Что такое и как это работает:
1) В определенное время обновляется куб для olap, и отправляет письмо на почту сервера.
2) В аутлуке почты сервера настроено правило на запуск скрипта при получении определенного текста:
Код
Public Sub RunPromo(itm As Outlook.MailItem)
Set xlApp = CreateObject("Excel.Application")
Set xlWb = xlApp.Workbooks.Open("C:\Autoreport\OLAPGO.xlsm")
xlApp.Application.Visible = True
xlApp.Run "OLAPGO.xlsm!StartSubs"
xlWb.Close True: xlApp.Quit
End Sub

3) В файле лежит всего один макрос который запускает макросы в других книгах

Код
Sub StartSubs()

Set xlWb = Workbooks.Open("C:\Autoreport\PAFIN.xlsm")
Application.Run "PAFIN.xlsm!GoSend", 1, 1, "XXX" ' ХХХ - реальный ID чата

End Sub

4) В конечных файлах есть несколько сводных таблиц с данными из OLAP подключения имеет один макрос и несколько функций.

Макрос: обновляет страницу, выбирает таблицу по указанному диапазону, переводит его в картинку-файл, возврат путь картинки и отправляет в программу для отправки сообщения и файлов через вебхук Bitrix24, далее на другом листе переключает срез и повторяет действия с каждым вариантом из списка.

Код
Sub GoSend(Go As Integer, ExitEx As Integer, ChatIDD As String)
Dim ExName As String, rDataR As Range, Pic As String, CFO As String, CFO1 As String
Application.Calculation = xlManual
Application.DisplayAlerts = False

If Go = 1 Then

ExName = ThisWorkbook.Name
ThisWorkbook.RefreshAll

Calculate
Set rDataR = SelectAll(ExName, "Main", 21, 1, 34, 16)
Pic = RtP(rDataR, "PA")
Call SendBitrix(ChatIDD, Pic)

For i = 1 To 10
CFO = ActiveWorkbook.Sheets("Список").Cells(i, 1)
CFO1 = CFO
CFO = Replace("[ЦФО].[ЦФОАналитика].&[CFO]", "CFO", CFO)
ActiveWorkbook.SlicerCaches("Срез_ЦФО_Аналитика").VisibleSlicerItemsList = Array(CFO)
Calculate
Set rDataR = SelectAll(ExName, "ЦФОData", 1, 1, 42, 16)
Pic = RtP(rDataR, CFO1)
Call SendBitrix(ChatIDD, Pic)
Next i

End If

If Weekday(Now) = 2 Then
CopyBook = ThisWorkbook.Name
With Workbooks(CopyBook).Sheets("Main")
TextCopy = .Range(.Cells(7, 2), .Cells(16, 2))
.Cells(7, 16).Resize(UBound(TextCopy, 1), UBound(TextCopy, 2)).Value = TextCopy
End With
End If

Функции:

Код
Function RtP(Sel As Range, Optional Chen As String)
    Dim sName As String, wsTmpSh As Worksheet, i As Long, Name As String, Folder As String
    
    FullPath = ActiveWorkbook.FullName
    i = InStrRev(FullPath, "\") 
    Name = Mid(FullPath, i + 1)
    Folder = Left(FullPath, i)
    
    If TypeName(Sel) <> "Range" Then
        Exit Function
    End If

    With Sel
        'Application.CutCopyMode = False
        '.Copy
        .CopyPicture Appearance:=xlScreen, Format:=xlBitmap
        Set wsTmpSh = ThisWorkbook.Sheets.Add
        If Chen <> "" Then sName = Folder & Chen & ".png" Else sName = ActiveWorkbook.FullName & "_" & ActiveSheet.Name & "_Range" & ".png"
        With wsTmpSh.ChartObjects.Add(0, 0, .Width, .Height).Chart
            .ChartArea.Border.LineStyle = 0
            .Parent.Select
            .Paste
            .Export Filename:=sName, FilterName:="png"
            .Parent.Delete
        End With
    End With
    wsTmpSh.Delete
    RtP = sName
End Function

Function SelectAll(table As String, shet As String, startrow As Long, startcol As Long, Optional FinRow As Long, Optional FinCol As Long)
With Workbooks(table).Sheets(shet)
If FinRow = 0 Then lLastRow = .Cells(Rows.Count, 2).End(xlUp).Row Else lLastRow = FinRow
If FinCol = 0 Then lLastCol = .Cells(1, Columns.Count).End(xlToLeft).Column Else lLastCol = FinCol
Set SelectAll = .Range(Sheets(shet).Cells(startrow, startcol), Sheets(shet).Cells(lLastRow, lLastCol))
End With
End Function

Function SendBitrix(DialogID As String, Filename As String)
PuthExe = "\\SRVDC\Autoreport\bitrix.exe"
HookId = "XXX" ' ХХХ - условно корректное значение
HookKey = "XXX" ' ХХХ - условно корректное значение
Folder = "XXX"  ' ХХХ - условно корректное значение
WHat = Len(DialogID)
If Len(DialogID) > 4 Then
ShellParam = PuthExe & " -id " & HookId & " -profile " & HookKey & " -storage " & Folder & " -input-file " & Filename & " -chat " & DialogID
Else
ShellParam = PuthExe & " -id " & HookId & " -profile " & HookKey & " -storage " & Folder & " -input-file " & Filename & " -dialog " & DialogID
End If
Set WshShell = CreateObject("WScript.Shell")
Return1 = WshShell.Run(ShellParam, 0, True)
Kill (Filename)
End Function

В результате код отрабатывает, приходит 1 картинка с 1 листа, и 10 со второго. После чего файл закрывается PAFIN.xlsm (который вызван последним), а файл вызванный из outlook : OLAPGO.xlsm (из пункта 2) остается висеть. В outlook VBA повисает ошибка.

"Ошибка

Указано измерение, недопустимое для текущего типа диаграммы."

При нажатии Debug показывает ошибку на запуске первой книги OLAPGO.xlsm.

Приложить оригинальный пример нет возможности т.к. использовать olap подключение вы не сможете, и протестить получение себе тоже (если у вас нет Bitrix24), но возможно на уровне кода и реализации вы видите очечную ошибку последовательности закрытия или еще чего то, раз все присылает значит отрабатывает точно, но что значит эта и ошибка и как ее обойти?

Уместил много, готов дополнить информацией если что то упустил.

Заранее благодарен.

Изменено: phelex - 27.09.2020 16:47:42
невозможное делаем сразу, чудо - требует небольшой подготовки.
Отправить сообщение в чат/живую ленту Bitrix24 из Excel по методу Вебхук
 
Коллеги, доброе утро.
Столкнулся с нетривиальной задачей, уверен что кто то подобное решал, если же нет верю в коллективный разум.
Есть задача: Отправлять в Bitrix24 чат картинку из Excel.
Для получения данных в Bitrix есть вебхуки: https://helpdesk.bitrix24.ru/open/5408147/
А вот как отправить корректный вебхук с картинкой из VBA пока не могу понять.

Понимаю что вводных в первом сообщении недостаточно, буду рад предоставить всю информацию (но пока не понимаю какую именно)., надеюсь определить в диалоге.

Заранее спасибо.
Изменено: phelex - 05.09.2020 08:14:02
невозможное делаем сразу, чудо - требует небольшой подготовки.
Закрытие книги с сохранением после вызова Application.Run
 
Друзья, привет!
Нужна ваша помощь в простой на первый взгляд задаче, но я уже не могу решить.
Делаю простую форму автоотправки отчета после получения на почту данных, работать должно следующим образом.
Шаг 1: Outlook при получении определенного письма сохраняет файл в папку и запускает Макрос1 (Application.Run) из книги
Шаг 2: Макрос1 - открывает через Application.Run макрос книги "Данные", обновляет в ней данные Refresh.All и закрывается сохранением
Шаг 3: Макрос1 - обновляет данные из книги "Данные" через Refresh.All
Шаг 4: Макрос1 - отправляет результат обработки на почту, сохраняется и закрывает файл

Со всеми пунктами разобрался, засада оказалась в простом закрытии файла после обновления.
Подскажите в какой из файлов зашить закрытие файла с указанием конкретного файла (не ЭтаКнига и не Активная книга).
Т.е. можно либо в шаг 2 зашить самозакрытие, либо в шаг 3 закрыть книгу.

Прикладываю файлы для примера, ThisRun стоит положить в диск C: для сохранения пути запуска (т.к. файлы в разных местах лежат).

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

Не сдаюсь и пытаюсь обучиться PQ для меньшего количества тем на форуме.

Недавно гении форума помогли решить вопрос разбивки по ячейкам: https://www.planetaexcel.ru/forum/index.php?PAGE_NAME=message&FID=1&TID=131385&MID=1076958#message1076958

Но есть одна проблема, есть список позиций в исходном виде не подходящий под правила, необходимо произвести замену по справочнику "Что на Что".
Попробовал прикрутить код из этих тем:
https://www.planetaexcel.ru/forum/index.php?PAGE_NAME=message&FID=1&TID=128343&MID=1056539#message1056539

Но не получилось...
Взял пример из Гугла и попробовал адаптировать под себя, но результат не тот.
Помогите пожалуйста разобраться, что изменить чтобы:
1) Происходила замена
2) Данные появлялись не в новом столбце, а менялись в исходном
3) Отключить верхний регистр (не требуется, таблица замен идет с сохранением регистра).

Заранее благодарен.
Изменено: phelex - 13.08.2020 09:16:17
невозможное делаем сразу, чудо - требует небольшой подготовки.
Разбивка ячейки на столбцы PQ
 
Друзья, привет!
Столкнулся с проблемой выгружаемого отчета, программа при выгрузке отчета сливает все данные в одну ячейку, что не дает возможности построить необходимые разрезы. Во всех строках единая структура и вроде есть символы для определения границ текста для распределения по столбцам. Думал сделать формулами, но на выходе более 600к строк из-за чего Excel загибается.

Гуру PQ можете помочь с обработкой по разложению данных с небольшим комментарием по реализации.
Пример исходных данных и пример результата во вложении.

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

Создал простую форму заказа с поиском из справочника, на исходном ноутбуке все работало корректно.
На ПК коллег возникает 3 проблемы:
1) Проблема отображения шрифтов, после клика на элемент шрифты приходят в себя
2) Окно не активно для работы: невозможно выбрать элемент, если проскролить лист можно выбирать элемент
3) Скролл внутри элемента не работает от колесика мыши - скролится весь лист, а не список вариантов

От чего это может зависеть? Возможно есть какое то решение.

Спасибо

P.S. В примере есть проблема подстановки значений выбранного элемента (последний Sub), помощи не прошу в этой теме т.к. 1 вопрос = 1 тема, но если кто то подскажет почему выдает ошибку буду признателен, вроде все элементы на месте...
невозможное делаем сразу, чудо - требует небольшой подготовки.
Сложный расчет работы часов сотрудника (учет проходов через турникет)
 
Друзья, добрый день.
Вчера друг скинул файл с просьбой посмотреть как посчитать время работы сотрудников, думал сделаю в 2 формулы, оказалось все не так просто.
Дано: Есть данные с турникетов Вход и Выход с временем по сотрудникам на каждый день.
Нужно: Рассчитать кол-во рабочих дней и часов за данный период

Что усложняет задачу:
1) Некоторые сотрудники проходят 2 турникета (первое кольцо и второе), при этом они могут иметь 2 входа (как 1 так и 2), и 1 выход через первой кольцо (т.е. на внутреннем кольце не отметился). - это я решил через поиск наименьшего и наибольшего времени в течение дня т.е. считать достаточно по первому входу и последнему выходу.
2) Есть ночные смены, где сотрудник пришел на работу вечером, а ушел утром следующего дня. Тут вся логика из пункта 1 ломается т.к. оцениваю разницу внутри дня.

Необходимый результат:
1) Таблица с ФИО, День, Кол-во отработанных часов (для ночных смен день это дата входа).
2) Совокупная таблица с количеством отработанных дней и часов суммарно.

Пока идеи закончились как это посчитать.
Возможно кто то предложит как сделать данный расчет, подходит любой формат: Формула, Сводная таблица, Макрос, Pivot.
Тут уже просто вызов, что на первый взгляд легкая задача имеет массу условностей. Не верю что задача действительно такая сложная как мне кажется.

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

Нужна ваша помощь. Сам уже запутался.

Есть 3 базы:
1) База товаров из одного источника содержащая Уникальный товар и Не уникальную группу
2) База товаров из другого источника содержащая Уникальный товар и 2 не уникальных группы
3) Справочник сопоставления товаров (Уникальный товар) из базы 1 к базе 2, не полная.

Необходимо сопоставить базу 1 и 2 (с использованием базы 3) по максимальному количеству товаров с минимальным количеством действий.
Т.е.
1) К базе 1 ВПРим базу 3, к результату из базы 3 ВПРим базу 2 - получаем сравнения в Товар к Товару.
2) Далее необходимо получить соответствие Группа из базы 1 к товару из базы 2, и по товару из базы 2 подставить Группы из базы2

Сделать руками это просто. После пункта 1 удаляем все неопределенные и создаем справочник уникальных связок Группа База 1 = Группа База 2, после чего в дополнительном столбце ВПРим уже из этого справочника. Далее в новом столбце проверяем если при первой подстановке не определена Группа База 1 = Группа База 2, то берем из нового столбца.

Товаров более 17 тыс, что создает большое количество расчетов за каждый столбец.

Возможно кто то может предложить вариант проще, лучше который позволит произвести все расчеты через 1 столбец.
В идеале без макросов.

Заранее спасибо.
Изменено: phelex - 29.05.2020 09:26:55
невозможное делаем сразу, чудо - требует небольшой подготовки.
Связь столбцов Сводной таблицы и OLAP, множественная связь сводных таблиц, Возможно ли связать столбцы из Куба OLAP и Сводной таблицы из соединения.
 
Друзья, приветствую!

Решаю большую задачу по созданию сводного отчета.
В рамках задачи есть 2 вопроса к экспертам:

1) Связь столбцов Сводной таблицы и таблицы OLAP
Есть 2 источника данных: Куб OLAP (С товаром и ценой) и Сводная таблица на основании обычной таблицы загруженная в модель данных (С товаром и кол-вом).
При открытии полей сводной таблицы OLAP, поля "Все" не видит модель данных, а в сводной таблице из модели не видит OLAP.
Перерыл гугл и формы, но ответа не нашел. Возможно ли вообще их связать или разные источники не связываются?

2) Вычисляемые поля в связных таблицах
При создании связной сводной таблицы (см пример), кнопка "вычисляемое поле" не активна.
Вопрос: технически невозможно добавить вычисляемые поля в связные таблицы или я что то делаю неправильно?

Заранее спасибо если кто то знает ответ.
Изменено: phelex - 27.05.2020 09:58:46
невозможное делаем сразу, чудо - требует небольшой подготовки.
Поиск по содержанию с нарушением порядка неявных повторов (совпадение 90%)
 
Друзья, добрый день.

Уже неоднократно сталкиваюсь с некорректным внесением данных со стороны пользователя, но в этот раз пользователь это государство и повлиять на корректность внесения невозможно, остается придумывать как обрабатывать данные.

Итак по сабжу:
Есть большой список алкогольной продукции: вино, водка, пиво и т.п. сейчас список из 15 тыс. позиций, но в целом из большое.
Есть огромное количество разночтений: Разные кавычки, наличие и отсутствие скобок, лишние пробелы или их отсутствие, последовательность указания "Вино красное сухое" и "Вино сухое красное", регионы вина указаны с грамматическими ошибками из за чего появляется 2 вида: лАнкомилья и  лОнкомилья.

Существует ли вероятность, что Excel можно научить определять совпадение текста на 90%, т.е. обе строки содержат "вино", "сухое", "красное", "*комилья".
Первая мысль была написать макрос удаления погрешных значений (ковычек, скобок, пробелов), но это не решает большую часть ошибок.
Вторая мысль была как то разобрать строчки на массивы слов и сравнивать массивы - как реализовать пока не понял.

Цель в файле примере (с образцом верного решения): присвоить ID каждому продукту с учетом совпадений, т.е. двум близким значениям присваиваются одинаковые ID. Есть у нас в сообществе супермозг который способен решить эту задачу или дать направление для решения.

Спасибо.
невозможное делаем сразу, чудо - требует небольшой подготовки.
Расчет уникальных строк если разница времени в столбце менее Х минут
 
Привет гениям Excel.
Столкнулся с задачей которую не представляю как решить даже логически, нужна помощь сообщества.
Есть таблица в нее забиваются все контакты с клиентами, фиксируются данные: Клиент, Менеджер, Дата и Время обращения.
Проблема в том, что некоторые сотрудники фиксируют каждый вопрос как отдельное обращение, что создает 3 строки вместо одного.

Необходимо как то провести сравнение всех строк и получить список уникальных обращений, удалив "повторные" обращения если они зафиксированы в тот же день, тем же менеджером по тому же клиенту, с разницей во времени менее Х минут (Например 10).

Пример приложил, при этом строк может быть и 500 тыс.

Есть ли у кого нибудь идеи макроса как такое реализовать.
С меня огромные полюсы в карму и масса добрых слов :)
невозможное делаем сразу, чудо - требует небольшой подготовки.
Сбор данных из разных видов файлов
 
Друзья, привет.

Делаю форму автообновления отчета. Необходимо собрать из файла с определенного лист информацию.
Столкнулся с несколькими проблемами:
1) Необходимо проверить какой из 2х возможных названий листов используется в открытой таблице. Реализую через функцию проверки, но что то ошибка типов.
На строке CheckList = CheckListSub(NameFile) - выдает ошибку типов "ByRef argument type mismatch"

Код
' This book a have list?
Function SheetExists(SheetName As String) As Boolean
On Error Resume Next
SheetExists = Not Sheets(SheetName) Is Nothing
End Function

' Chek on Name List
Function CheckListSub(SheetName As String) As String
Dim wb As Workbook
Set wb = SheetName

CountList = 0

If SheetExists("Data") Then
    Set CheckList = wb.Worksheets("Data")
    CountList = CountList + 1
End If

If SheetExists("Динамика KPIs") Then
    Set CheckList = wb.Worksheets("Динамика KPIs")
    CountList = CountList + 1
End If

If CountList = 0 Then
MsgBox "Оба листа отсутствуют"
CheckList = "Error"
End If
If CountList = 2 Then
MsgBox "Оба листа присутствуют"
CheckList = "Error"
End If

End Function

Sub GoData()
     Application.Calculation = xlCalculationManual
     avFiles = Application.GetOpenFilename("Excel files(*.xls*),*.xls*", 1, "Âûáåðèòå îò÷åò ", , False)

    If VarType(avFiles) = vbBoolean Then
        'áûëà íàæàòà êíîïêà îòìåíû - âûõîä èç ïðîöåäóðû
        MsgBox "Íå âûáðàí èñòî÷íèê äàííûõ"
        Exit Sub
    End If
    
        Application.DisplayAlerts = False
        Application.ScreenUpdating = False

i = InStrRev(avFiles, "\") 
NameFile = """ & Mid(avFiles, i + 1) & """

Workbooks.Open Filename:=avFiles

Set Database = ActiveWorkbook
CheckList = CheckListSub(NameFile)

ActiveWindow.Close False

        Calculate
        Application.Calculation = xlAutomatic
        Application.DisplayAlerts = True
        Application.ScreenUpdating = True

End Sub
2) Нужно как то отметить цветом необходимые столбцы (в примере зеленым) и удалить все не отмеченные (красным).
Пока вообще не придумал как это сделать. У всех необходимых столбцов есть общее XQXX (X) (прим: Q3'18 (F) )

Комрады есть идеи, опыт, предложения?

Спасибо
невозможное делаем сразу, чудо - требует небольшой подготовки.
Страницы: 1 2 След.
Наверх