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

Страницы: 1 2 3 4 5 6 7 8 9 След.
Отправка письма вместо MsgBox об успешном запросе HTTP (код 200)
 
,

попробовал, не выходит...
Код
Public Sub httpclient()

    Dim token As String * 1024
    token = GetToken()
    SendFile "\\...\...xlsx", token
       
End Sub
Private Function GetToken() As String

Application.DisplayAlerts = False

    Const tokenUrl As String = "https://.../authenticate"
    Const userName As String = "Name1"
    Dim userPwd As String
    userPwd = InputBox("Укажите пароль:")

    Dim tokenRequest As String
    tokenRequest = "{""username"": """ & userName & """, ""password"": """ & userPwd & """}"
    
    With CreateObject("MSXML2.ServerXMLHTTP")
        .Open "POST", tokenUrl, False
        .setRequestHeader "Content-Type", "application/json"
        .setRequestHeader "accept", "application/json"
        .send (tokenRequest)
'        MsgBox (.responseText)

'<<<<<<<<<<<<<< Формируем ответ в Outlook >>>>>>>>>>>>>>
' -----------------------------------------------------------------------------------------------------------------------
    Dim OutApp As Object
    Dim OutMail As Object
    Dim cell As Range
     
    Set OutApp = CreateObject("Outlook.Application")   'запускаем Outlook в скрытом режиме
    OutApp.Session.Logon
    On Error GoTo cleanup  'если не запустился - выходим
    Set OutMail = OutApp.CreateItem(0)   'создаем новое сообщение
    On Error Resume Next
    'заполняем поля сообщения
    With OutMail
        .To = Range("A1").value 'адрес сообщения (Кому:)
        .Subject = Range("A2").value 'тема сообщения
        .Body = .responseText
'       Set .SendUsingAccount = .Session.Accounts.Item("Hotmail") ' отправка с другой учетной записи Outlook, если их несколько, при этом Hotmail - Hotmail - название требуемой учетной записи
        .send 'просмотр сообщения перед отправкой. Без просмотра - .Send
        GetToken = Mid(.responseText, 11, Len(.responseText) - 12)
    End With
 
    On Error GoTo 0
    Set OutMail = Nothing
 
cleanup:
    Set OutApp = Nothing
    Application.ScreenUpdating = True ' открыть работу макроса

'----------------------------------------------
    End With
End Function


Private Sub SendFile(FileName As String, accessToken As String)

Application.DisplayAlerts = False

    Const fileType As String = "application/vnd.ms-excel"
    Const uploadUrl As String = "https://.../upload"
    Const Boundary = "---------------------------0123456789012"
    Const FieldName As String = "file"
    
    Dim FileContents, FormData
    
    FileContents = GetFile(FileName)
    FormData = BuildFormData(FileContents, Boundary, FileName, FieldName)
    With CreateObject("MSXML2.ServerXMLHTTP")
        .Open "POST", uploadUrl, False
        .setRequestHeader "Authorization", "Bearer " & accessToken
        .setRequestHeader "Content-Type", "multipart/form-data; boundary=" & Boundary
        .send (FormData)
'        MsgBox .Status
    End With
    
End Sub


Function GetFile(FileName As String)
  Dim Stream: Set Stream = CreateObject("ADODB.Stream")
  Stream.Type = 1 'Binary
  Stream.Open
  Stream.LoadFromFile FileName
  GetFile = Stream.Read
  Stream.Close
End Function


Function mpFields(FieldName, FileName, ContentType)
  Dim MPTemplate
  MPTemplate = "Content-Disposition: form-data; name=""{field}"";" + _
   " filename=""{file}""" + vbCrLf + _
   "Content-Type: {ct}" + vbCrLf + vbCrLf
  Dim Out
  Out = Replace(MPTemplate, "{field}", FieldName)
  Out = Replace(Out, "{file}", FileName)
  mpFields = Replace(Out, "{ct}", ContentType)
End Function


Function StringToMB(S)
  Dim i, B
  For i = 1 To Len(S)
    B = B & ChrB(Asc(Mid(S, i, 1)))
  Next
  StringToMB = B
End Function


Function BuildFormData(FileContents, Boundary, FileName, FieldName)
  Dim FormData, Pre, Po
  Const ContentType = "application/upload"
  
  Pre = "--" + Boundary + vbCrLf + mpFields(FieldName, FileName, ContentType)
  Po = vbCrLf + "--" + Boundary + "--" + vbCrLf
  
  Const adLongVarBinary = 205
  Dim RS: Set RS = CreateObject("ADODB.Recordset")
  RS.Fields.Append "b", adLongVarBinary, Len(Pre) + LenB(FileContents) + Len(Po)
  RS.Open
  RS.AddNew
    Dim LenData
    LenData = Len(Pre)
    RS("b").AppendChunk (StringToMB(Pre) & ChrB(0))
    Pre = RS("b").GetChunk(LenData)
    RS("b") = ""
    LenData = Len(Po)
    RS("b").AppendChunk (StringToMB(Po) & ChrB(0))
    Po = RS("b").GetChunk(LenData)
    RS("b") = ""
    RS("b").AppendChunk (Pre)
    RS("b").AppendChunk (FileContents)
    RS("b").AppendChunk (Po)
  RS.Update
  FormData = RS("b")
  RS.Close
  BuildFormData = FormData
End Function

Отправка письма вместо MsgBox об успешном запросе HTTP (код 200)
 
Ігор Гончаренко , спасибо за Вашу заботу, но я написал выше, что с запросом не получилось.Я прописывал .Status к .Body - не сработало. Как корректно прописать ответ сервера я не знаю.
Изменено: stevie44 - 06.12.2021 14:37:58
Отправка письма вместо MsgBox об успешном запросе HTTP (код 200)
 
Здравствуйте!
Просьба помочь в следующем вопросе: я загружаю на сервер через VBA некоторую информацию. После обработки макроса мне выдает сообщение об успешности запроса:
Код
MsgBox .Status
В результате мне приходит обычно успешная обработка запроса: 200.

Можно ли как-то отправить этот ответ на почту? Как отправлять письма через VBA я знаю, нашел на форуме и применял неоднократно. Но с запросом не получилось.

И тоже самое до ответа на запрос мне приходит информация от сервера в виде ключа:
Код
MsgBox (.responseText)
Как отправить письма вместо MsgBox? Либо хотя бы одного письма со статусом 200?

Спасибо.
Из нескольких периодов отсутствия выцепить начальную и конечную даты
 
Mershik, шикарно! Я зыбал про Lookup, он же ищет последнее значение, а не как Vlookup - 1-е.
Спасибо огромное за оперативную помощь!
Из нескольких периодов отсутствия выцепить начальную и конечную даты
 
Здравствуйте!
Есть таблица по декретницам:
- в столбцах C и D указаны виды отсутствия и периоды отсутствия - это может быть как в одну строчку, так и в несколько, в зависимости от видов отпусков по декрету (по беременности и родам, до 1,5 лет, до 3 лет, а далее может быть сразу и 2-й ребенок и т.д.);
- в столбцах E и F указаны даты досрочного выхода из декрета.
- в столбцах I и L я указал итоги, как должно получиться.

Некоторые комментарии:
Если строка с отзывом из отпуска является последней по сотруднице (пример Петрова), то дата начала отзыва из отпуска будет являться финальной датой окончания декрета минус 1 день.
Если есть отзыв из отпуска, но строка не является последней по сотруднице (пример Иванова), то финальной датой окончания декрета будет дата в последней строке по сотруднице из ячейки D.

Можно ли как-то это сделать?

Спасибо.
Из нескольких периодов отсутствия нужно рассчитать общее количество дней отсутствия в отчетном периоде
 
Так и не выложил решение, сорри.
Выкладываю.  
Из нескольких периодов отсутствия нужно рассчитать общее количество дней отсутствия в отчетном периоде
 
vikttur,да, я сделал 3 условия через ЕСЛИ и РАЗНДАТ, и получилось. Думал изначально, что там полно условий будет, оказалось не так и муторно, поэтому нет смысла писать массивы, макросы. Еще раз спасибо!)
Из нескольких периодов отсутствия нужно рассчитать общее количество дней отсутствия в отчетном периоде
 
vikttur,с 01 по 02 июня - 2 дня, с 25 по 30 июня - 6 дней (27-го был отзыв, значит 5 дней), итого 7 дней (2+5)

Я только что решил задачу самостоятельно, через банальную функцию ЕСЛИ, где условий, как оказалось, совсем мало получилось.
Спасибо за потраченное время и попытку помочь!
Из нескольких периодов отсутствия нужно рассчитать общее количество дней отсутствия в отчетном периоде
 
Александр Моторин,спасибо за помощь, но считает неверно.
Попробовал вбил отчетный период июнь, выдает у Иванова 4 (должно быть 7), у Петрова 2 (должно быть 1).
Мне кажется через UDF наоборот слишком сложно... Я пытался написать массив, тоже не вышло, похожих решений на форуме не нашел..
Из нескольких периодов отсутствия нужно рассчитать общее количество дней отсутствия в отчетном периоде
 
Здравствуйте!
Просьба помочь из нескольких периодов отсутствия рассчитать общее количество дней отсутствия в отчетном периоде.
В файле в столбцах A:I указаны все периоды отсутствия сотрудников (отпуска, больничные), при этом по одному и тому же сотруднику каждый период отсутствия указывается в отдельной строке. Во время отпуска может быть отзыв из отпуска: например сотрудник должен быть в отпуске 10 дней, но по договоренности с работодателем его вызвали на несколько дней на работу, дни отзыва из отпуска обозначены в столбцах F:H.
В столбцах K:N указывается отчетный период, в рамках которого нужно рассчитать общее количество дней отсутствия.
Итоговый результат указывается в столбце Q (я вручную указал количество дней отсутствия в отчетном периоде по сотрудникам).
Как можно рассчитать этот результат в столбце Q? Главная сложность для меня состоит в том, что информацию нужно получить по одному сотруднику из нескольких строк...

Спасибо.
Обращение к API через POST-запрос в VBA для загрузки файла
 
doober, извиняюсь за долгий ответ. Огромное спасибо за код!

Не срабатывало, так как после user потеряны кавычки были (Chr(34)) :)
Потом возникли сложности, в string не помещался токен из-за ограничения в 255 символов.
Токен удалось вырезать mid(xmlhttp.responseText, 11, len(xmlhttp.responseText) - 12)
Токен получается взять и отправить его в сервис, не получается файл отправить, выдает 400 bad request.
Если токен "поломать", то выдает 401...
Обращение к API через POST-запрос в VBA для загрузки файла
 
doober, я погуглил как раз, там про 4 минуты везде пишут. Я поэтому и замерял время обработки до возникновения ошибки.

Поэтому и не понял... Нашёл команду SetTimeouts - не помогло.
Код
xmlhttp.SetTimeouts 3000000, 3000000, 3000000, 3000000
Изменено: stevie44 - 10.12.2020 19:08:11
Обращение к API через POST-запрос в VBA для загрузки файла
 
doober, появилась ошибка на строке:
Код
xmlhttp.send (ToByteArray(PostData))

Цитата
Run-time error '-2147012894 (80072ee2)':
The operation timed-out.
Но скрипт работал не долго, 22 секунды.

sokol92, я полагаю, что разработчик VBA плохо знает, работают с другими языками программирования.
Я с Crul не работал вообще никак, поэтому у меня нет соображений, как это сделать.
Обращение к API через POST-запрос в VBA для загрузки файла
 
sokol92,уточнил у разработчика, вот что он ответил: "да, это синтаксис курла, для VBA надо будет раскладывать по заголовкам".
Как это сделать - не знаю...
Обращение к API через POST-запрос в VBA для загрузки файла
 
Здравствуйте!
Очень прошу вашей помощи по следующей задаче:
- есть excel-файл формата csv, который через API мне нужно загружать в специальное ПО.
Через VBA мне нужно получить токен аутентификации и затем загрузить файл. Разработчики мне прислали информацию (ниже указал), чтобы прописать это в VBA, но я с такими запросами не работал и возникли сложности:
1) Нужно получить токен аутентификации
POST запрос
Код
"http://authentication-123.ru" -H "accept: application/json" -H "Content-Type: application/json" -d "{ "username": "login", "password": "string"}"


В теле ответа придёт токен:
Код
{
 "token": "eyJhbGciOiJIUzI1NiJ9.eyJ1c2VyRGF0YSI6eyJsb2dpbiI6InJ"
}


2)      Чтобы загрузить файл нужно использовать другое API
http://test.ru/index.html
Для загрузки файла нужен еще один POST запрос, в котором передается токен и файл
"http://test.ru/uploadDiscountData" -H "accept: */*" -H "Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJ1c2VyRGF0YSI6eyJsb2dpbiI6InJ" -H "Content-Type: multipart/form-data" -F "file=@PL.csv;type=text/csv"

Я попробовал для 1-го пункта прописать запрос (поискал на форумах), но не вышло. Выдает ошибку: base64encode sub or function not defined
Если задача очень сложная, то кто сможет помочь на платной основе?

Спасибо.

P.S. Ссылки и токены я указал произвольные.
Расширенный фильтр - не работает при нескольких условиях "не равно"
 
Дмитрий(The_Prist) Щербаков, "А для исключений всегда берут по принципу И: И это не берем, И это не берем и т.д." - золотые слова!!! Сделал условия в одной строке и все сработало! Не знал про это, хотя много раз использовал расширенный фильтр, но не в курсе исключений был.
Дмитрий(The_Prist) Щербаков, БМВ, большое спасибо!
Расширенный фильтр - не работает при нескольких условиях "не равно"
 
Дмитрий(The_Prist) Щербаков, БМВ, прошу прощения, что сразу не приложил исходную таблицу.
Добавил исходную таблицу, что должно получиться в результате, и что на текущий момент получается расширенным фильтром (не отличаются данные от исходных...)
Изменено: stevie44 - 26.11.2020 22:22:25
Расширенный фильтр - не работает при нескольких условиях "не равно"
 
БМВ,я как раз и хочу, чтобы все эти исключения были удалены из общей таблицы сразу. Но не удаляются, только если диапазон условий указываю отдельно (сначала должность, потом отдельно группу и т.д.). Я думал, может я неправильно прописал их?  
Расширенный фильтр - не работает при нескольких условиях "не равно"
 
БМВ, как раз по ИЛИ. Я знаю, что нужно в одной строке по И, я в таком же виде указывал условия, которые наоборот нужно учесть. А вот с исключениям не получается.
Дмитрий(The_Prist) Щербаков, нет, диапазон точно верно выбираю (расширенным фильтром когда нужно выцепить оттуда наоборот по условиям данные, то выцепляю). Если я исключения укажу в одну строку, это не будет расцениваться как И? Я разнёс по разным, так как подразумевал ИЛИ.
Изменено: stevie44 - 26.11.2020 18:40:01
Расширенный фильтр - не работает при нескольких условиях "не равно"
 
Сорри, не приложил ранее.  
Расширенный фильтр - не работает при нескольких условиях "не равно"
 
Здравствуйте!
Просьба помочь в вопросе расширенного фильтра. Есть таблица со структурой сотрудников, которую я хочу обработать расширенным фильтром и исключить из нее некоторые значения, которые содержат фразы (я их выделил в условиях ровным счетом так, как на форумах нашел). Но если я прописываю несколько условий, то они не срабатывают, а вот если по одному несколько раз запускаю, то срабатывает.
Можно ли как-то с первого раза все условия учесть?
Пример условий прилагаю
Спасибо.
Автозаполнение от активного диапазона в VBA
 
Здравствуйте!
Просьба помочь со следующим вопросом: необходимо автозаполнением протянуть диапазон E5:J5 до последней заполненной строки в столбце B.
Макрорекодер записывает конкретный диапазон автозаполнения, а диапазон E5:J5 динамический, в будущем это может быть любая ячейка в столбце E и J.
То есть нужно макросом протянуть последнюю заполненную строку в столбцах E:J до последней заполненной строки в столбце B.
В интернете много разных примеров, в том числе на планете эксель, но конкретно решения под мой запрос я не нашел, а в VBA не силен...

Спасибо.
Подтянуть коэффициент по 2-м критериям с приближенным значением в обоих случаях
 
Большое спасибо всем, отличные варианты!
Но buchlotnik самый классный, отдельное спасибо!
Подтянуть коэффициент по 2-м критериям с приближенным значением в обоих случаях
 
Vik_tor,не подойдет такой вариант, т.к. если будет прирост, к примеру в 1-м случае более 5%, то должно быть 6,5 коэффициент, а по формуле получается 7,5. Объем остается менее <10000, следовательно 7,5 быть не может.
Изменено: stevie44 - 30.04.2020 15:57:28
Подтянуть коэффициент по 2-м критериям с приближенным значением в обоих случаях
 
Здравствуйте!
Мне необходимо подтянуть коэффициент по 2-м условиям, но при этом оба условия должны быть приближенными, а не точными.
Поэтому сделать ключ и тянуть по 2-м условиям ВПР-ом не получилось. Соответственно, ИНДЕКС+ПОИСК массивом по 2-м условиям из-за необходимости поиска приближенного, а не точного значения не получилось подтянуть. Есть ли иной способ?
Прилагаю файл, в котором:
- в столбце D должен быть итоговый результат по формуле (я указал верные цифрами), который должен подтягивать по 2-м условиям: "Объем на начало периода" и "Прирост"
- в столбцах G и I шкала к этим 2-м условиям, а в столбце J - результат (зеленым я выделил результаты, которые должны подтянуться в столбец D).

Буду очень признателен за помощь.

Спасибо.
Функция СРЗНАЧЕСЛИ не подтягивает данные по диапазону из нескольких столбцов
 
БМВ,супер!!!) Спасибо огромное, очень помогли)
Функция СРЗНАЧЕСЛИ не подтягивает данные по диапазону из нескольких столбцов
 
БМВ,функция неверно работает, там явно не средний возраст считается. В исходных данных самый младший - 20 лет, а массивом получаются 4 года, 5 и т.д.
Функция СРЗНАЧЕСЛИ не подтягивает данные по диапазону из нескольких столбцов
 
Добрый вечер!
Не могу понять, в чем моя ошибка. Мне необходимо получить средний возраст сотрудников в разрезе по каждому ответу, то ее какой средний возраст сотрудников, которые выбрали конкретный ответ. На листе1 выделил желтым, формула некорректно работает.
Просьба подсказать, что я делаю не так и, по возможности, подскажите правильное решение.

Спасибо.
Изменение абсолютной ссылки на относительную в формуле через VBA при автозаполнении
 
V, гениально!!! Супер!!! Спасибо большое )))
Изменение абсолютной ссылки на относительную в формуле через VBA при автозаполнении
 
_Igor_61,выдает "syntax error"
Код
ActiveCell.Formula = "=INDEX('" & .[e6] & "SI'!$BE:$BE,MATCH(" & RC[23] & ",'" & .[e6] & "SI'!$BH:$BH,0))"
Страницы: 1 2 3 4 5 6 7 8 9 След.
Наверх