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

Страницы: 1 2 След.
Проверка наличия фильтра в умной таблице VBA
 
Нашел такое решение.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If ActiveSheet.ListObjects("Таблица1").AutoFilter.FilterMode Then
  ActiveSheet.ListObjects("Таблица1").TableStyle = "TableStyleLight10"
Else
  ActiveSheet.ListObjects("Таблица1").TableStyle = "TableStyleLight9"
End If

End Sub

Единственное работает не когда ставится фильтр а когда после установки фильтра какое то действие с ячейкой происходит.
Проверка наличия фильтра в умной таблице VBA
 
Есть задача отслеживать наличие фильтрации в умной таблице и менять стиль таблицы.
думал что по Worksheet_SelectionChange получится проверять, но все что нашел на форуме не работает для умной таблицы.
по идее надо чтобы getActiveFilterCount выдавал 1 или более по количеству установленных фильтров в умной таблице
но что именно в эту функцию записать - пока загадка

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
 i = getActiveFilterCount
 If i <> 0 Then    ActiveSheet.ListObjects("Таблица1").TableStyle = "TableStyleLight10"
              Else     ActiveSheet.ListObjects("Таблица1").TableStyle = "TableStyleLight9"
 End If
End Sub
Изменено: Павел Воробей - 25.08.2024 19:26:37
Расчет средней наработки на момент времени в прошлом, Как пользоваться суммеслимн для вычисления по условию
 
Спасибо за подсказку принципа.
понял как работает. Нашел ошибку, адаптировал.
=СРЗНАЧ(ЕСЛИ(([@[Отчетная Дата]]>Отчет[Монтаж])*([@[Отчетная Дата]]<ф_дата);[@[Отчетная Дата]]-Отчет[Запуск];""))
Изменено: Павел Воробей - 10.04.2023 13:01:20
Расчет средней наработки на момент времени в прошлом, Как пользоваться суммеслимн для вычисления по условию
 
Цитата
написал:
Так?
Нет. результат некорректный получился.
посмотрите 12 сообщение. может понятнее будет.

И интересно стало что за ф_дата в формуле. Не нашел где прописано значение.//нашел
возможно подход правильный. щас разбираюсь в нюансах
Изменено: Павел Воробей - 10.04.2023 12:23:03
Расчет средней наработки на момент времени в прошлом, Как пользоваться суммеслимн для вычисления по условию
 
Написал в самом файле. Не знаю как еще проще объяснить.
Расчет средней наработки на момент времени в прошлом, Как пользоваться суммеслимн для вычисления по условию
 
мне нужно чтобы значения наработки были в столбце "Средняя наработка действующего оборудования для обычный" таблицы на вкладке вычисления
пример как вычисляется для сегодняшней дыты я показал
полного примера у меня нет ибо нужно вручную 500 значений для 5ти типов двигателей посчитать.
а такие значения в целом нужны и по другим условиям.
нужен принцип вычисления или подход к решению такой задачи.

Все еще не понятно в чем задача?
Расчет средней наработки на момент времени в прошлом, Как пользоваться суммеслимн для вычисления по условию
 
Цитата
тогда вот так:
Код
 =СРЗНАЧЕСЛИМН($F:$F;$C:$C;  ""  )   
 

это не то. Эта формула подойдет только для даты равной сегодня в таблице вычислений. а ее нужно всю заполнить значениями средней наработки и медианной наработки.
нужна формула для вычисления всех вариантов на даты конца месяца (уже есть в таблице) или хотябы ответ на вопрос Как в эту формулу подставить разность дат вместо диапазона значений наработки ($F:$F)
проблема именно в том что наработка на неделю раньше будет включать оборудование которое еще не отказало например и не будет включать оборудование которое еще не смонтировано. т.е. для каждой вычисляемой даты наработка в каждой строке отчета это индивидуальный результат.  
Изменено: Павел Воробей - 10.04.2023 09:37:43
Расчет средней наработки на момент времени в прошлом, Как пользоваться суммеслимн для вычисления по условию
 
Поправил пример.
отфильтровал по колонке остановка. получил в строках таблицы только оборудование которое работает на сегодня.
в доп столбце посчитал наработку на сегодня простой формулой.
в отдельной ячейке вычисляется средняя наработка для оборудования на сегодня.

это ручной способ. нжны только значения наработки на даты.
Изменено: Павел Воробей - 10.04.2023 11:45:08
Расчет средней наработки на момент времени в прошлом, Как пользоваться суммеслимн для вычисления по условию
 
На вкладке отчет вариант части табличных данных отчета
на вкладке вычисление пример вычисления количества работающего оборудования по типу двигателя на нужную дату.
данные собираются для построения графика динамики показателя.

Задача: для каждого типа двигателя среди работающего на дату (как в примере) подсчитать среднюю и медианную наработку
в примере отбор только по одному варианту условия, в действительности нужно решение для использования множественного условия
Изменено: Павел Воробей - 10.04.2023 08:13:22
Расчет средней наработки на момент времени в прошлом, Как пользоваться суммеслимн для вычисления по условию
 
пример в 11 сообщении.
Есть массив данных о смонтированном оборудовании. он содержит в строках тип оборудования а в столбцах даты монтажа запуска остановки и демонтажа.
столбец наработка вычисляется на момент выгрузки отчета в доп колонку. для остановленного оборудования наработка считается с момента запуска до остановки. для работающего с момента запуска до даты отчета.

Вопрос как посчитать среднюю наработку по множественному условию понятен и легко выполняется через суммеслимн и счетеслимн.
а вот задача посчитать наработку на действующем фонде оборудования на момент времени в прошлом. (на конец каждого месяца начиная с 2015 года и до сегодня) не понятна. и тем более непонятно как посчитать медианную наработку.
т.е. надо посчитать разность между заданной датой конца месяца и датой запуска для всего оборудования у которого нет остановки на момент времени.
или хотя бы получить массив чисел с наработками оборудовани для последующей обработки.
Изменено: Павел Воробей - 10.04.2023 12:36:02
Проверка наличия файла на OneDrive или внешнем сервере
 
Цитата
написал:
Цитата
Павел Воробей написал:
программер обслуживающий 1С говорит что это тот самый xlsx.
пусть поменяет на csv
нет такого варианта.
Проверка наличия файла на OneDrive или внешнем сервере
 
те же приколы но с ними можно уже жить.
если удалить файл из папки обработчика - программа считает что он есть и даже открывает его до завершения синхронизации.
появляется открытие закрытие. (можно ли это в фоне оставить интересно?)
и обратное событие откабатывает с выдачей системной ошибки что нет доступа к файлу а потом только выполнение.


Код
Sub Извлечение_данных_1С()
 
    Dim wb As Workbook
    Dim FileFormat As Long, FileDate As String, LocalAdress As String
    Dim objFSO As Object
    Dim sFileName As String
    
    sFileName = "//222223/1Cdata/zzzzz.xlsx"                   'имя исходного файла отчета
    Set objFSO = CreateObject("Scripting.FileSystemObject")    'создаем объект FileSystemObject
    If objFSO.FileExists(sFileName) = False Then               'проверяем наличие файла на серваке 1С
        MsgBox "Нет файла отчета на сетевом диске", vbCritical, "Дашборд"
        Exit Sub
    Else
        FileDate = FileDateTime(sFileName)                     'определяем дату выгрузки
        FileDate = Left(FileDate, InStrRev(FileDate, " ") - 1) 'извлекаем только дату в формате текст
        FileFormat = 51                                        'определяем формат сохранения -> xlsx
        LocalAdress = ThisWorkbook.Path & "/Data " & FileDate & ".xlsx"  'определяем путь с новым именем файла пересохраняемого отчета
        
        Err.Clear
        On Error Resume Next
        Set wb = Workbooks.Open(LocalAdress, ReadOnly:=False)
        If wb Is Nothing Then                                  'если файла нет
            Application.ScreenUpdating = 0                     'отключаем оповещения
            Application.DisplayAlerts = 0
 
            Set wb = Application.Workbooks.Open(sFileName, False)
            wb.SaveAs LocalAdress, FileFormat
            wb.Close
            DoEvents
             
            Application.ScreenUpdating = 1                       'включаем оповещения
            Application.DisplayAlerts = 1
            Range("B4").Value = "Data " & FileDate & ".xlsx"
            Range("B7").Value = Now
            MsgBox "В папку с дашбордом сохранен Data " & FileDate & ".xlsx", vbInformation, "Дашборд"
        Else
            wb.Close
            MsgBox "Файл этой выгрузки уже есть. Если требуется обновить удалите его из папки с текущим файлом"
            Exit Sub
        
        End If
    End If
End Sub

Проверка наличия файла на OneDrive или внешнем сервере
 
Цитата
написал:
вот здесь и надо подробнее пояснять. Что значит "не сохраняет"? Причину определили? Не сохраняет кодом? А до сохранения вообще доходит? На чем "валится" код - что мешает ему сохранить или дойти до строки сохранения?
Выдает ошибку метода 1004 при выполнении 32 строки. связываю это с процессом отложенной синхронизации OneDrive.
потому что ошибку дает только если подряд два раза выполнять макрос. если перерыв будет - все работает
Цитата
написал:
Почему нельзя попробовать приведенный мной код?
Щас попробую.
Цитата
написал:
а формат то какой? почему не пойти от корня проблемы?
программер обслуживающий 1С говорит что это тот самый xlsx. но возможно с нюансами создания из 1С.
если файл сразу запихивать в запрос PowerQuery то он не видит структуры.
пишет :
DataFormat.Error: Входные данные не удалось распознать как допустимый документ Excel.
Сведения:
   [Binary]

погуглил решение - написали пересохранять
Цитата
4 сообщение какое понимание или пояснение проблемы дает?
Прошу простить, не туда посмотрел, в 3 сообщении писал.
Изменено: Павел Воробей - 16.02.2023 15:01:05
Проверка наличия файла на OneDrive или внешнем сервере
 
Видимо не прочитали 4 сообщение, повторю:

Задача изначальная обработать выгрузку 1С средствами PowerQuery и получить 100500 графиков.
Обработчик должен быть универсальным для любого пользователя. почти все пользователи работают через Sharepoint. Обработчик тоже будет предоставлен в виде доступа к папке группы в тимс или на OneDrive
проблема: выгрузка формируется еженедельно и лежит на внешнем сервере. сама структура файла выгрузки не позволяет его сразу использовать средствами PowerQuery. решение в интернете говорит что надо пересохранить в нужном формате. Если есть файл с нужным форматом - Обработка работает.

я пошел по пути: макросом открыть и сохранить выгрузку в нужном формате в папку с обработчиком. (на внешнем сервере сохранять левые файлы нельзя) потом обрабатывать получившийся файл средствами PowerQuery. Наткнулся на то, что второй раз он уже не сохраняет файл если запускаю из синхронизируемой папки (Sharepoint). ругается и сбрасывает выполнение макроса. т.е. надо делать ограничения и проверки на наличие файла, а это тоже не работает.
Изменено: Павел Воробей - 16.02.2023 14:22:23
Проверка наличия файла на OneDrive или внешнем сервере
 
Цитата
а почему нельзя сразу открывать файл?
Код
Workbooks.Open   " https://sharepoint.com/personal/Evgeniy/Documents/ Книга1.xlsx"  ,   ReadOnly  :=  False   
 
потому что его там нет, а цель стоит в автоматизации.
т.е. любой пользователь с доступом к расшаренной папке с обработчиком должен получить результат в виде обработки.
поэтому сначала файл с общего сервера закидывается в папку пользователя, а потом обрабатывается.

это не отменяет проблемы но, возможно в моем случае проще по другому организовать автоматизацию.
Изменено: Павел Воробей - 16.02.2023 13:48:55
Проверка наличия файла на OneDrive или внешнем сервере
 
Цитата
написал:
надо подключить сетевой диск к ПК, чтобы ему была назначена литера(имя диска)
это должен делать каждый пользователь локально или это кодом можно прописать?
Проверка наличия файла на OneDrive или внешнем сервере
 
Нашел похожую проблему но не понял решение.
https://www.mrexcel.com/board/threads/vba-to-check-if-same-name-file-exists-in-teams-folder.1226407/
Проверка синхронизации файла при работе с OneDrive
 
При обработке файла посредством PowerQuery использую конструкцию:
Код
    Content = if Text.StartsWith(fParam("Path"),"https://") then Web.Contents(fParam("Path")) else File.Contents(fParam("Path")),
    Источник = Excel.Workbook(Content, null, true),
НО
если файл еще не синхронизировался в папке - выдает ошибку доступа к файлу.

каким образом обойти этот момент?  
Проверка наличия файла на OneDrive или внешнем сервере
 
Цитата
написал:
Цитата
написал:
не знаю как правильно код вставить чтобы комменты остались
перед копированием кода включите русскую раскладку
Поправил
Проверка наличия файла на OneDrive или внешнем сервере
 
Не работает с OneDrive.
файл из которого запускается макрос имеет адрес: https://slb001-my.sharepoint.com/
т.е. строка 21
       sFolder = ThisWorkbook.Path 'записываем путь текущего файла
записывает адрес в таком виде в переменную sFolder

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

для несинхронизируемой папки работает.

не знаю как правильно код вставить чтобы комменты остались
Код
Sub Извлечение_данных_1С()

    Dim sFolder As String, sFiles As String
    Dim wb As Workbook
    Dim FileFormat As Long, FileDate As String, Adress As String

    Dim objFSO As Object
    Dim sFileName As String, sNewFileName As String
 
    sFileName = "//ru22223/1Cdata/Vigruzka.xlsx"   'имя исходного файла отчета
    
    Set objFSO = CreateObject("Scripting.FileSystemObject") 'создаем объект FileSystemObject
    
    If objFSO.FileExists(sFileName) = False Then 'проверяем наличие файла на серваке 1С
        MsgBox "Нет файла отчета на сетевом диске", vbCritical, "Дашборд"
        Exit Sub
    Else
        FileDate = FileDateTime(sFileName) 'определяем дату выгрузки
        FileDate = Left(FileDate, InStrRev(FileDate, " ") - 1) ' извлекаем только дату в формате текст
        FileFormat = 51 ' определяем формат сохранения -> xlsx
        sFolder = ThisWorkbook.Path 'записываем путь текущего файла
        adress = sFolder & "/Data " & FileDate & ".xlsx" 'определяем путь с новым именем файла пересохраняемого отчета
        If objFSO.FileExists(adress) = True Then ' пересохраненный  файл уже есть?
            MsgBox "Файл этой выгрузки уже есть. Если требуется обновить удалите его из папки с текущим файлом"
            Exit Sub
        Else
            
            Application.ScreenUpdating = 0 'отключаем оповещения
            Application.DisplayAlerts = 0

            Set wb = Application.Workbooks.Open(sFileName, False)
            wb.SaveAs adress, FileFormat
            wb.Close
            DoEvents
            
            Application.ScreenUpdating = 1 'включаем оповещения
            Application.DisplayAlerts = 1
            Range("B4").Value = "Data " & FileDate & ".xlsx"
            Range("B7").Value = Now
            MsgBox "В папку с дашбордом сохранен Data " & FileDate & ".xlsx", vbInformation, "Дашборд"
        End If
    End If
End Sub





ps. задача изначальная обработать выгрузку 1С средствами PowerQuery и получить 100500 графиков.
выгрузка формируется еженедельно и лежит на внешнем сервере. обработчик должен быть универсальным для любого пользователя. почти все пользователи работают через Sharepoint.
я пошел по пути: открыть и сохранить выгрузку в нужном формате в папке с обработчиком. потом обрабатывать получившийся файл средствами PowerQuery. Наткнулся на то что второй раз он не сохраняет файл если запускаю из синхронизируемой папки.  
Изменено: Павел Воробей - 16.02.2023 10:52:48
Проверка наличия файла на OneDrive или внешнем сервере
 
Коллеги,
добрый день.
автоматизирую манипуляции с выгрузкой 1С
формат файла для последующего использования требует пересохранения. иначе не работает PowerQuery.
но т.к. файл очень объемный нужно добавить в макрос проверку наличия файла с выгрузкой 1С на сервере и наличие пересохраненного файла у пользьзователя. Но почти все пользователи в компании сидят на OneDrive (Sharepoint)
Dir - ругается
чем и как сделать?
Изменено: Павел Воробей - 16.02.2023 10:22:23
Кнопка обновления запросов, Нужно сделать так чтобы обновление проходило последовательно сначала запросы в определенном порядке. потом одни сводные, потом другие сводные
 
Цитата
написал:
источник = Excel.CurrentWorkbook(){[Name="Запрос 1"]}[Content]

По факту это то что я использую. Запрос с именем "Результат объединения" выгружает результат на страницу в таблицу "Результат_объединения", я создаю новый запрос из данных этой таблицы. и получаю Источник = Excel.CurrentWorkbook(){[Name="Результат_объединения"]}[Content]

если подставлять название запроса вместо названия выгруженной таблицы выдает ошибку
Expression.Error: Не найдена таблица Excel с именем "Результат объединения".


Тогда не понятно о чем речь:
Цитата
Вот и корень проблемы. Я же правильно понял, что речь о запросах PQ?Не делайте запрос из выгруженной на лист таблицы, а ссылайтесь на запрос в PQ. При обновлении запроса все запросы, на которые ссылается текущий, будут пересчитаны в любом случае.
Кнопка обновления запросов, Нужно сделать так чтобы обновление проходило последовательно сначала запросы в определенном порядке. потом одни сводные, потом другие сводные
 
Эту статью видел читал изучал. Спасибо за труд.
С обновлением всего, частичного, последовательного и остальных разобрался. Еще раз спасибо.

Вопрос
Цитата
написал:
Тогда как будет выглядеть строка с источником?

Был про
Цитата
написал:
Не делайте запрос из выгруженной на лист таблицы, а ссылайтесь на запрос в PQ.

Как именно будет выглядеть строка на языке М с именем запроса "Запрос 1"?
источник = ...?
Изменено: Павел Воробей - 12.01.2023 09:47:41
Кнопка обновления запросов, Нужно сделать так чтобы обновление проходило последовательно сначала запросы в определенном порядке. потом одни сводные, потом другие сводные
 
Тогда как будет выглядеть строка с источником?
Кнопка обновления запросов, Нужно сделать так чтобы обновление проходило последовательно сначала запросы в определенном порядке. потом одни сводные, потом другие сводные
 
Цитата
Вот и корень проблемы. Я же правильно понял, что речь о запросах PQ?
Не делайте запрос из выгруженной на лист таблицы, а ссылайтесь на запрос в PQ. При обновлении запроса все запросы, на которые ссылается текущий, будут пересчитаны в любом случае.
Разве в этом случае любой запрос ссылающийся на предыдущий приведет к повторному исполнению первого? ( на примере описания PBI https://learn.microsoft.com/ru-ru/power-bi/guidance/power-query-referenced-queries)
т.е. представим что первый запрос обновляется две минуты. А второй и последующие 100 шт это несколько простых операций над результатом первого. выполнение шагов кторых занимают по паре секунд.
Если ссылаться во всех из них на первый запрос, то результат обновления будет 200 минут + 200 сек. если делать промежуточную таблицу - 2 мин + 200сек на все остальные.
или мое представление некорректно?

Цитата
Цитата
Павел Воробей написал:
нужна строгая последовательность выполнения запросов
не выполняется

Да не выполняется, похоже ввел всех в заблуждение. Принцип как делать уяснил, спасибо! Вместо цикла прописываем последовательнось команд для обновления каждого отдельного запроса. При решении столкнулся с ошибкой скрипта. Оказалось дело в названии запросов. Выяснил это когда вывел на страницу названия через другой код.
Изменено: Павел Воробей - 12.01.2023 06:43:14
Кнопка обновления запросов, Нужно сделать так чтобы обновление проходило последовательно сначала запросы в определенном порядке. потом одни сводные, потом другие сводные
 
Sub KeyPush()
   Dim ws As Worksheet, oc As Object, IsBG_Refresh As Boolean, pt As PivotTable

'Перебираем все запросы и обновляем в цикле  
   For Each oc In ThisWorkbook.Connections
       IsBG_Refresh = oc.OLEDBConnection.BackgroundQuery
       oc.OLEDBConnection.BackgroundQuery = False
       oc.Refresh
       oc.OLEDBConnection.BackgroundQuery = IsBG_Refresh
   Next
 
'Перебираем все сводные и обновляем их
   For Each ws In ThisWorkbook.Worksheets
       For Each pt In ws.PivotTables
           pt.RefreshTable
       Next pt
   Next ws

'Выводим сообщение    
MsgBox "Запросы обновлены", vbInformation,

End Sub
Изменено: Павел Воробей - 12.01.2023 05:55:39
Кнопка обновления запросов, Нужно сделать так чтобы обновление проходило последовательно сначала запросы в определенном порядке. потом одни сводные, потом другие сводные
 
отключил но, не решает проблему.
первый запрос обновляется сильно дольше остальных. последний запрос сделан на выгруженных результатах первого менее сложен и обновляется куда быстрее.
получается что при изменении источника данных (внешнего файла с отчетом 1С) последний запрос обновляет старые данные, потом только прогружается первый тяжелый запрос и в итоге на дашборде проходят только частичные обновления.
по идее нужна строгая последовательность выполнения запросов и потом обновление сводных
Изменено: Павел Воробей - 11.01.2023 10:44:57
Кнопка обновления запросов, Нужно сделать так чтобы обновление проходило последовательно сначала запросы в определенном порядке. потом одни сводные, потом другие сводные
 
В файле много запросов некоторые из которых очень большие и несколько этапов вычислений в том числе через сводные таблицы.
Один запрос преобразует файл с данными из отчетов 1С, другой обрабатывает уже обработанное ит тд.

нужно чтобы обновление проходило последовательно сначала запросы потом одни сводные потом другие сводные.
сейчас если заменить файл отчета, то только после трех нажатий обновить все запросы и таблицы обновлябтся.
Получениет серии данных из одной сводной но при разных срезах и при пересчете в исходной таблице,
 
Задача решена функцией СЧЁТЕСЛИМН вместе с ДВССЫЛ
Power Query и создание таблиц с датами, Нужна подсказка как создать список дат концов месяца от даты до даты
 
Коллеги,
спасибо справился,
написал вопрос как раз уже почитав эту статью.
просто не получалось все собрать в единое целое.
Страницы: 1 2 След.
Наверх