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

Страницы: 1 2 След.
Непредвиденная ошибка при обновлении данных. Power Query
 
Добрый день, уважаемые форумчане)
Возникает досадная ситуация при использовании Power Query.
При запуске макроса на vba есть строка, которая обновляет Query.
Код
Err.Clear
Application.DisplayAlerts = False
On Error Resume Next
With Workbooks("forum.xlsm").Connections("my_query").OLEDBConnection
    .BackgroundQuery = False  'or true, up to you
    .Refresh
End With
If Err.Number <> 0 Then GoTo nextx
Debug.Print "обновлено"
nextx:
Раз в энное количество запусков макроса вылетает "Непредвиденная ошибка", связанная с PQ.
On Error Resume Next, application.displayallert = false - не помогают убрать возникновение "Непредвиденной ошибки"

Свою задачу могу решить и без PQ, но хочется разобраться в чем дело??? Что бы с уверенностью полагаться на PQ.

Подробные сведения об ошибке приложил.
Пользуюсь Excel 2016 64bit
Изменено: zavex - 19.02.2019 18:33:29
формирование массива на основании других массивов
 
Юрий М, еще раз спасибо)) n = n + 1 )))

Aleksei_Zhigulin, файл поищу и создам новую тему) самому интересно разобраться в чем же была ошибка ибо PQ сильный и мощный инструмент.
формирование массива на основании других массивов
 
Aleksei_Zhigulin, думаю эту тему стоит поднять попозже, в другой ветке) но на небольших файлах  PQ отрабатывает в макросе хорошо.
Но вот сделал 600 000 строк, до 10 колонок. и PQ до 10 видоизменений. И вот тут при запуске обновления таблицы PQ макросом, сбоит через раз. и ошибка была не в макросе.  
формирование массива на основании других массивов
 
Юрий М, огромное спасибо))) сейчас буду применять на практике на реальной задаче))  
формирование массива на основании других массивов
 
Stics, спасибо, но Power Query не хочу использовать. При работе с большим количеством данных и запуском через макрос, Power Query через раз дает ошибку. При мануальном запуске все всегда отлично. У меня Excel 2016 64bit.
 
формирование массива на основании других массивов
 
Добрый день, уважаемые форумчане)
Прошу Вашей помощи в формировании массива на основании двух других массивов. Интересно задачку решить именно через массивы.

Пример и желаемый результат загрузил)
Изменено: zavex - 22.01.2019 11:25:44
Сохранение файла в специальную папку
 
Цитата
Nordheim написал:
RibbonXML
любопытная штука)) нужно будет поиграться))

Hugo, Вас понял, спасибо)
Сохранение файла в специальную папку
 
Цитата
Nordheim написал:
В строкеКод ? 1ActiveWorkbook.SaveAs ThisWorkbook.Path & "\" & Me.ListBox2.Value & "\" & fName & ".xlsx", xlNormalxlNormal замените на 51
korostelevn85,  тогда меняйте на:

ActiveWorkbook.SaveAs ThisWorkbook.Path & "\" & Me.ListBox2.Value & "\" & fName & ".xlsm", 52
Сохранение файла в специальную папку
 
Hugo,  :)
ActiveWorkbook.SaveAs Filename:=path_to_save & "\" & name_to_save & ".xlsx", FileFormat:=51

Цитата
Hugo написал:
Ну и конечно никто не проверяет что там понаписано в ячейке...
сразу через Replace предлагаете заменять символы \/:*?<>| в ячейках?
Сохранение файла в специальную папку
 
korostelevn85,
Изменено: zavex - 31.07.2018 11:51:25
Сохранение файла в специальную папку
 
На компьютере должна быть папка "Ортодонтия" на диске D.  "D:\Ортодонтия\"
Код
Sub test()
Application.ScreenUpdating = False
If [a1] = "" Or [c1] = "" Then
    MsgBox "Cначала укажите путь в ячейку а1 и название книги в ячейку с1"
    Exit Sub
End If

my_cheking = Array("\", "/", ":", "*", "?", "<", ">", "|")

For i = 1 To UBound(my_cheking)
    If InStr([a1] & [c1], my_cheking(i)) <> 0 Then
        MsgBox "Сначала удалите символы \/:*?<>| в ячейках а1, с1"
        Exit Sub
    End If
Next i

path_to_save = "D:\Ортодонтия\" & [a1]
Debug.Print path_to_save
name_to_save = [c1]
Debug.Print name_to_save
On Error GoTo er
If Dir(path_to_save, vbDirectory) = "" Then MkDir (path_to_save)
        ActiveSheet.Copy
        Application.DisplayAlerts = False
        ActiveWorkbook.SaveAs Filename:=path_to_save & "\" & name_to_save, FileFormat:=51
        Application.DisplayAlerts = False
        Workbooks(name_to_save & ".xlsx").Close True
Application.ScreenUpdating = True
MsgBox "Этот лист успешно сохранен в отдельную книгу!"
Exit Sub
er: MsgBox "Проверьте наличие основных подкаталогов в файловой системе!"
End Sub
Изменено: zavex - 31.07.2018 02:24:45
VBA. Подстановка в таблицу по двум значениям
 
ВСЕ СУПЕР!!!) СПАСИБО-СПАСИБО-СПАСИБО ВАМ, Nordheim за волшебные 19 строчек кода))
VBA. Подстановка в таблицу по двум значениям
 
Hugo, спасибо за участие в теме. Пока ошибки замечено не было
VBA. Подстановка в таблицу по двум значениям
 
Nordheim, судя по Вашим сверхскоростным макросам, уровень Ваш с каждой секундой все ближе к профи:)
Если у Вас вдруг остался код, где также суммируются остатки, скиньке его тоже, пожалуйста)
Большое спасибо за ссылку. Перешел что бы добавить в закладки и засел на добрый час) Очень интересный ресурс.
VBA. Подстановка в таблицу по двум значениям
 
Уважаемый Nordheim, 6,5 секунд) фантастика!!)) эх, есть чего у Вас поучиться) с удовольствием купил бы Вашу книгу с вашими лайфхаками работы vba excel:) массивы и словари - такой великолепный инструмент)
ПРЕБЛАГОДАРЕН ВАМ, Nordheim!!!!

Цитата
Nordheim написал:
Но немного не понятно почему берется первое количество , а не сумма. Или в приоритете то количество которое стоит в таблице выше?
в идеале что бы подставлялась сумма остатков, которая соответствует общему значению "Код" и "Код_главного". Но вот если, к примеру, нужно будет подставлять текстовые строки, тогда их значения нужно объединять и разделять "; ".
Такая доработка почему-то кажется очень сложной... Но это было бы конечно же идеально и очень правильно!)
VBA. Подстановка в таблицу по двум значениям
 
Думаю, что следует еще попробовать массивы записать в словари и уже проводить проверку между словарями, и при совпадении производить запись найденного значения в новый массив в нужную строку и только в самом конце выгружать массив. Это должно существенно ускорить код. Но т.к. только начал разбираться в массивах, мои попытки оптимизации кода пока не привели к желаемому результату(Быстрому выполнению макроса).
VBA. Подстановка в таблицу по двум значениям
 
mrzv, спасибо большое за участие в теме!
через файнд, увы, быстрее вообще не выходит((((

статью подробно изучу, буду пробовать...
https://excelvba.ru/code/SearchArray
VBA. Подстановка в таблицу по двум значениям
 
Подстановка всего лишь для 1000 строк происходит 3 минуты!!!

пример загрузил  
VBA. Подстановка в таблицу по двум значениям
 
БМВ, немного изменил Ваш макрос.
Код
Sub Макрос1()
Application.ScreenUpdating = False
t = Timer
'диапазон где искать и что найти
a = Workbooks("пример11.xlsm").Worksheets("1").Range(Workbooks("пример11.xlsm").Worksheets("1").Range("a4"), Workbooks("пример11.xlsm").Worksheets("1").Range("a" & Rows.Count).End(xlUp)).Resize(, 4).Value
'диапазон, что искать(диапазон условий)
my_array = Workbooks("пример11.xlsm").Worksheets("2").Range(Workbooks("пример11.xlsm").Worksheets("2").Range("a1"), Workbooks("пример11.xlsm").Worksheets("2").Range("a" & Rows.Count).End(xlUp)).Resize(, 2).Value


For j = 1 To UBound(my_array)
b = my_array(j, 1) 'условие, что искать 1. указываем по каким столбцам диапазона искать
c = my_array(j, 2) 'условие, что искать 2. указываем по каким столбцам диапазона искать
        
    For i = 1 To UBound(a)
    If CStr(a(i, 1)) = CStr(b) And CStr(a(i, 3)) = CStr(c) Then 'в диапазоне, где искать указываем по каким столбцам диапазона
        Workbooks("пример11.xlsm").Worksheets(2).Cells(j, 3).Value = a(i, 4) 'куда вставлять найденное = что вставлять
        Exit For
    End If
    Next i
Next j
Application.ScreenUpdating = True
Debug.Print Timer - t
End Sub

на небольшом файле отрабатывает хорошо, быстро.
Файл побольше отрабатывает СЛИШКОМ ДОЛГО, к сожалению(((
А скриптом хотелось выиграть по времени, по сравнению с формулами( =индекс(поискпоз)) ).

пример загрузил (пример создан специально для теста кода)
Изменено: zavex - 16.07.2018 15:57:45
Поиск подходящих строк в двумерном массиве
 
Nordheim, прикольно, спасибо за оптимизацию! теперь одновременно два массива не висят в памяти.
работать тоже стало быстрее на 19%. 1,7 против 2,1 сек.(643000 строк * 5 столбцов  и 1400 критериев )
Изменено: zavex - 10.07.2018 15:04:22
Поиск подходящих строк в двумерном массиве
 
Hugo, спасибо большое за участие и Ваш комментарий!
Поиск подходящих строк в двумерном массиве
 
Nordheim, какой у Вас характер спортивный))) Результат просто великолепный 643000 строк * 5 столбцов  и 1400 критериев отработало за 2 секунды!!!! СПАСИБО!!!!!!!!!!!!!!
Поиск подходящих строк в двумерном массиве
 
Казанский, действительно, в этом случае расширенный фильтр отрабатывает круто) ОГРОМНОЕ ВАМ СПАСИБО!!!))) Буду применять постоянно)

Добавил 1400 критериев для фильтрации. Отфильтровало почти за 3 минуты (168 сек)
Изменено: zavex - 10.07.2018 13:43:21
Поиск подходящих строк в двумерном массиве
 
Nordheim, протестировал код. на небольшом массиве данных фильтрует быстро и хорошо.
С задачей 643000 * 5 - код никак не справляется. Обрабатывает слишком медленно и в результате ничего не находит.

пример загрузил
Поиск подходящих строк в двумерном массиве
 
Nordheim, еще раз большое спасибо)))
Поиск подходящих строк в двумерном массиве
 
Nordheim, подскажите пожалуйста, где указать в Вашем коде, № столбца, по которому должна происходить фильтрация?
Поиск подходящих строк в двумерном массиве
 
Nordheim, СУПЕР!!!! СПАСИБО ВАМ ОГРОМНОЕ!!!)))
Поиск подходящих строк в двумерном массиве
 
Казанский, хотелось, что бы было поменьше выгрузок на лист. Есть один массив, есть второй. Что нужно отфильтровалось и выгрузили готовенькое.
Да и всем пользователям vba, думаю, будет круто иметь такой удобный инструмент. Еще бы расширить функцию, что бы можно было фильтровать значения больше, мешьне, между...

Конечно, если что, будем выгружать на лист и фильтровать.
Поиск подходящих строк в двумерном массиве
 
Bema, спасибо! Увы 300 000 * 5 перебирать формулами уж слишком долго будет.
Изменено: zavex - 09.07.2018 10:39:14
Поиск подходящих строк в двумерном массиве
 
Nordheim, да
Страницы: 1 2 След.
Наверх