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

Страницы: 1 2 След.
URLDownloadToFile не работает
 
Цитата
sokol92 написал:
Вызовите  curl . Эта программа умеет всё.
Все таки пришлось переделать под CURL . С Urlmon- ом так и не установил причину. То что, он перестает работать после какого то обновления - это факт. Такая ситуация была летом, но тогда  откатился и все заработало. Вот только не записал обновление которое ломает загрузку. В общем пока идеи закончились.
URLDownloadToFile не работает
 
Проверял дома - W11+офис2016 - работает, на работе из 4 машин w10+разные офисы - работает на 1. Все ОС и ПО лицензия, антивирус везде один. Пока не понятно почему так. Буду дальше разбираться. Может подскажете как вывести лог работы URLMONа? Насчет CURL пока повременю. За ссылку спасибо, но если есть ссылка на рабочий код, для разбора буду очень благодарен.
URLDownloadToFile не работает
 
Цитата
Дмитрий(The_Prist) Щербаков написал:
так может проблема не в винде, а в том, что API Вы объявили только для 32-битной версии офиса?
Попробовал, не помогло. Да и офис у меня 32 битный.
Ошибок при исполнении не выдает.
Изменено: evgen032 - 06.02.2024 12:02:32
URLDownloadToFile не работает
 
Доброго всем дня! До обновления W10 прекрасно работал код для скачивания файлов с использованием winapi:
Код
Declare Function URLDownloadToFile Lib "urlmon" Alias "URLDownloadToFileA" _
(ByVal pCaller As Long, ByVal szURL As String, _
ByVal szFileName As String, ByVal dwReserved As Long, _
ByVal lpfnCB As Long) As Long

Function DownLoadFile(FromPathName As String, ToPathName As String) As Boolean
DownLoadFile = URLDownloadToFile(0, FromPathName, ToPathName, 0, 0) = 0
End Function
Sub download()
Dim lp As String, Filename As String

Set spn = ThisWorkbook.ActiveSheet  ' запоминаем лист
LR = ActiveSheet.Cells(Rows.Count, 2).End(xlUp).Row
For x = 2 To LR
lp = spn.Cells(x, 7)
kolvo = (Len(lp) - Len(replace(lp, "https", ""))) / Len("https")
r = 1
w = 1
For y = 1 To kolvo
lim = InStr(r, lp, "https")
lim2 = InStr(lim, lp, "jpg")
If lim2 = 0 Then
lim2 = InStr(lim, lp, "jpeg")
End If
If lim2 = 0 Then
lim2 = InStr(lim, lp, "png")
End If
Dim src As String
If InStr(w, lp, ".jpg") > 0 Then
src = Mid(lp, lim, lim2 - lim) & "jpg"
ElseIf InStr(w, lp, ".jpeg") > 0 Then
src = Mid(lp, lim, lim2 - lim) & "jpeg"
Else
src = Mid(lp, lim, lim2 - lim) & "png"
End If
'ppn = spn.Cells(x, 2)
'pic = spn.Cells(x, 2)
pic = spn.Cells(x, 17)
If y = 1 Then
Filename = "C:\1\" & pic & ".jpg"
Else: Filename = "C:\1\" & pic & "_" & y - 1 & ".jpg"
End If
If DownLoadFile(src, Filename) Then
End If
r = lim2
w = lim2
Next y
r = 1
Next x

End Sub

Но после обновления ничего качает, ошибок тоже не выдает. Lib "urlmon" зарегистрирована.
Подскажите что могло отключиться при обновлении. Офис 2016 стандарт.
На машине с 2007 офисом и W10 код скачивает файлы без проблем.
Поиск среднего и медианы по условию и с фильтром
 
Попробуйте такой вариант
Пропорциональное распределение числа на группу чисел, Плывут цифры после запятой
 
Цитата
aSeSja написал:
Тогда уже лучше распределять в позиции с большими значениями
Используйте сортировку
Цитата
aSeSja написал:
Итоговая сумма при распределении может быть ка меньше так и больше.
Поправил
Пропорциональное распределение числа на группу чисел, Плывут цифры после запятой
 
Как вариант распределить "недостающее" по первым позициям списка. По 1 грамму, до тех пор пока не получится ровно. Но решение с доп.столбцом.
Копирование диапазона с форматированием и формулами, добавить после последней заполненной строки
 
Код
Sub copy()
  Lr = Cells(Rows.Count, 1).End(xlUp).Row
  Range("A12:G18").Copy Cells(Lr + 1, 1)
  Application.CutCopyMode = False
End Sub
Изменено: evgen032 - 18.10.2019 15:06:20
Макрос переноса строк по условию после шапки
 
Код
Sub qq()
   Application.ScreenUpdating = False
   x = "True"
   If Sheets("Лист1").[A:A].Find(x) Is Nothing Then Exit Sub
        Sheets("Лист1").Activate
        Sheets("Лист1").[A:A].ColumnDifferences([A:A].Find(x)).EntireRow.Hidden = True
        Sheets("Лист1").UsedRange.SpecialCells(xlCellTypeVisible).Copy Sheets("Лист2").[A5]
        Sheets("Лист1").[A:A].EntireRow.Hidden = False
        Sheets("Лист2").Activate
Application.ScreenUpdating = True
  End Sub
Изменено: evgen032 - 16.10.2019 07:42:54
Подсчет выручки по каналам продаж
 
Код
=СУММ(СМЕЩ('Факт Выручки'!$A$1;ПОИСКПОЗ(Выручка!C$2;'Факт Выручки'!$B$1:$B$769;0)-1;
ПОИСКПОЗ(Выручка!A$24;'Факт Выручки'!$A$2:$G$2;0)-1;ПОИСКПОЗ(Выручка!C$8;'Факт Выручки'!$B$1:$B$769;0)-
ПОИСКПОЗ(Выручка!C$2;'Факт Выручки'!$B$1:$B$769;0)+1;1))
SendKeys разных версиях MS Office
 
Владимир, огромное человеческое спасибо! Работает на ура, во всех версиях офиса. Причем данный способ попадался на глаза, но "уперся" почему то в перебор окон проекта (DoEvents тоже пробовал - не помогло).
SendKeys разных версиях MS Office
 
Добрый день! Если кому интересно выкладываю результаты:
Мой макрос из одной книги открывает другую, снимает пароль с проекта VBA с помощью оператора Sendkeys,
после чего заменяет в нужной мне процедуре строки кода и редактирует данные на листах книги. Так вот в 2013 м офисе процедура отрабатывается успешно. В 2016 только при повторном посыле Sendkeys, в 2010 еще интересней: после передачи Sendkeys (один раз) проект разблокируется, но переход на следующую строку процедуры не происходит т.е. выполнение как бы зависает. Пришлось разбить на 2 процедуры и повесить на разные кнопки - первая снимает пароль, а вторая вносит изменения. В таком варианте работает во всех версиях офиса. Как-то так. Если у кого нибудь есть мысли почему так происходит напишите пожалуйста, работать с этим файлом придется неоднократно.

Разобрался: в 2010 м загвоздка была в передаче обработки процедуре- после передачи ENTER-а необходимо сразу передать контроль процедуре:
Код
SendKeys "~Skygo@150~", True: SendKeys "~", False

тогда все работает.
Изменено: evgen032 - 09.07.2019 11:44:51
SendKeys разных версиях MS Office
 
в 2016 - м помогло дублирование sendkeys
Код
For Each objWindow In objVBProject.VBE.Windows
         
        If objWindow.Type = 6 Then
            objWindow.Visible = True
            objWindow.SetFocus: Exit For
        End If
    Next
 
    SendKeys "~Skygo@150~", True: SendKeys "{ENTER}", True
SendKeys "~Skygo@150~", True: SendKeys "{ENTER}", True

не понимаю почему так, но работает!
в 2010 попробую завтра.
SendKeys разных версиях MS Office
 
Пароль от проекта: Skygo@150,
SendKeys разных версиях MS Office
 
Добрый день! Есть необходимость изменить защищенный проект vba одной книги макросом из другой.
Так вот в офис 2013 процедура:
Код
For Each objWindow In objVBProject.VBE.Windows
        
        If objWindow.Type = 6 Then
            objWindow.Visible = True
            objWindow.SetFocus: Exit For
        End If
    Next

    SendKeys "~Skygo@150~", True: SendKeys "{ENTER}", True

дает необходимый результат, но если пытаюсь запустить макрос в 2010,2016 офисе выходит сообщение: invalid password.
С чем это связано и как  бороться?
то перебор на 0000000000001 то недобор на 0000000000002 при операции вставка значений
 
Спасибо за ЛикБез
то перебор на 0000000000001 то недобор на 0000000000002 при операции вставка значений
 
Добрый день! Объясните если можно как так получается: в ячейке формула - =1397,89-1329,97 имеем результат 67,92, далее копирую ячейку и вставляю в соседнюю с выбором параметра "Значения" и получается результат 67,9200000000001. Такие же манипуляции с формулой =13,55-11,33 дают нормальный результат как слева так и справа. с формулой =1671,11-1625,91 результат 45,1999999999998. как с этим жить?
Два критерия отбора максимального значения, ускорить формулу массива
 
Цитата
vikttur написал:
Вам нужно 30000 строк, а проверяете чуть больше миллиона.
намек понял, попробую создать именованные диапазоны(Этот файл результирующий - макросом  должен собирать данные из 245 файлов, поэтому количество строк +-
Цитата
vikttur написал:
Пример, конечно же, стесняетесь показать, пусть помогающие сами рисуют...
)
не по религиозным соображениям, файл  весит 4  мб.
Попробую с диапазонами - отпишусь.
Два критерия отбора максимального значения, ускорить формулу массива
 
Ок.
Два критерия отбора максимального значения, ускорить формулу массива
 
Jack Famous, ради спортивного интереса, попробовал:
=АГРЕГАТ(14;7;ЕСЛИ(Лист5!$B:$B=A12;ЕСЛИ(Лист5!$M:$M="ИТОГО";Лист5!$Z:$Z));1)
Результат 1мин 43 сек.
Два критерия отбора максимального значения, ускорить формулу массива
 
Jack Famous, огромное спасибо за подсказку.
UDF-ом не стал заморачиваться, но сцепить реально помогло: на листе с данными добавил столбец со сцепленными необходимыми критериями, а формулу переделал
{=МАКС(ЕСЛИ(Лист5!$AE:$AE=A12&"ИТОГО";Лист5!$Z:$Z))}.
Разница по времени выполнения 35 сек. против 1 мин. 15 сек., это уже приемлемо. Недумаю что UDF существенно изменит результат.
Еще раз спасибо!
Два критерия отбора максимального значения, ускорить формулу массива
 
Добрый день.
Есть массив даннных примерно на 30000 строк, из которого необходимо вытащить максимальные значения из определенного столбца по 2- м критериям.
Реализовал такой формулой: {=МАКС(ЕСЛИ(Лист5!$B:$B=A219;ЕСЛИ(Лист5!$M:$M="ИТОГО";Лист5!$Z:$Z)))}
Ячеек с такой формулой 230.
При пересчете значений наблюдаются значительные тормоза.
Подскажите, можно ли ускорить вычисления (модифицировать эту f? или использовать другую)?
Макрос для нескольких сводных таблиц на одном листе
 
Может кому понадобится: Рабочий код в первом сообщении (поправил) . Можно по аналогии добавлять сводные, в моем случае выдает данные по 14 ти .
Есть ли способ автоматического определения версии офиса и подстановки результата в  DefaultVersion:=xlPivotTableVersion15? Не хочется отдельные кнопки делать.
Макрос для нескольких сводных таблиц на одном листе
 
Переход на пустую ячейку оформил:
Код
Dim lr1&
lr1 = Cells(Rows.Count, 1).End(xlUp).Row + 1

ActiveCell.Offset(lr1, 0)


А вот как решить TableDestination:="Лист2!R35C1" ?
Макрос для нескольких сводных таблиц на одном листе
 
Добрый день. На одном листе необходимо разместить несколько сводных макросом:
Код
Sub ддд()
Dim lr1& 
   ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
        "Лист1!R9C1:R2000C25", Version:=xlPivotTableVersion15).CreatePivotTable _
        TableDestination:="Лист2!R1C1", TableName:="СводнаяТаблица1", _
        DefaultVersion:=xlPivotTableVersion15
     With ActiveSheet.PivotTables("СводнаяТаблица1")
        .PivotFields( _"группа")
        .Orientation = xlRowField        
         .Position = 1
    End With
    With ActiveSheet.PivotTables("СводнаяТаблица1").PivotFields( _"степень") 
       .Orientation = xlRowField  
       .Position = 2  
  End With    
       ActiveSheet.PivotTables("СводнаяТаблица1").AddDataField ActiveSheet.PivotTables _
        ("СводнаяТаблица1").PivotFields("размер"), _ 
         "Количество по полю размер", xlCount  
         lr1 = Cells(Rows.Count, 1).End(xlUp).Row + 1
       ActiveWorkbook.Worksheets("Лист2").PivotTables("СводнаяТаблица1").PivotCache. _
        CreatePivotTable TableDestination:=Worksheets("Лист2").Cells(lr1 + 1, 1), TableName:= _
        "СводнаяТаблица2", DefaultVersion:=xlPivotTableVersion15

 With ActiveSheet.PivotTables("СводнаяТаблица2").PivotFields("канал")
        .Orientation = xlRowField    
        .Position = 1  
      End With  
   With ActiveSheet.PivotTables("СводнаяТаблица2").PivotFields("вид") 
       .Orientation = xlRowField    
        .Position = 2    End With  
  ActiveSheet.PivotTables("СводнаяТаблица2").AddDataField ActiveSheet.PivotTables _ 
       ("СводнаяТаблица2").PivotFields("Совокупный"), _ 
       "Количество по полю Совокупный", xlCountEnd Sub

Вот только количество строк с результатами всегда будут разное, то есть первая таблица выйдет за пределы 34 строки. Может подскажете как разместить вторую сводную  после результатов первой и указать этот адрес в TableDestination:="Лист2!R35C1" ?

Изменено: evgen032 - 13.03.2017 16:19:02
Адрес верхней ячейки
 
Спасибо, все работает как надо. Формула приняла вид
ЕСЛИ(L18="";"";ЕСЛИ(L18="ИТОГО";0;СМЕЩ(C18;-1;0)+1))
Адрес верхней ячейки
 
Добрый день. Формула ЕСЛИ(L18="";"";ЕСЛИ(L18="ИТОГО";0;C17+1)) вычисляет значение ячейки на основе значения вышестоящей +1, но при удалении строки принимает вид ЕСЛИ(L18="";"";ЕСЛИ(L18="ИТОГО";0;#ССЫЛКА!+1)), хочу попробовать прямое указание С17 заменить на ДВССЫЛ, но как записать адрес вышестоящей ячейки не могу придумать. Может подскажете?
Порядковый номер строки в группе
 
Да Вы правы, еще раз спасибо.
Порядковый номер строки в группе
 
Спасибо.
Я еще кое как приладил. если нет ограничения по количеству параметров
Код
=ЕСЛИ(G7="";"";ЕСЛИ(G7="ИТОГО";0;ЕСЛИ(C6=0;1;C6+1)))
Порядковый номер строки в группе
 
А если предусмотреть увеличение нумерации до 7 к примету, то как быть? Предел по аргументам ЕСЛИ уже достигнут.
Страницы: 1 2 След.
Наверх