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

Страницы: 1
Вывод последних файлов на страницу Excel
 
Цитата
БМВ написал:
Еще раз, последний может быть только один. В любой из тем Вам бы уточнить критерий последних файлов.

Критерий: крайняя дата.
Архивирование и отправка архива на outlook
 
Добрый день! Требуется решение. По цене с ориентируйте, сам макрос нужен срочно, но сроки обговариваемы.

Необходимо разработать макрос, который бы архивировал ПОСЛЕДНИЕ файлы в выбранной папке (файлы конкретного типа). И папки и тип файла изменяемы пользователем без редактирования макроса. Этот заархивированный файл макрос добавляет в черновики outlook, где уже прописаны тема, текст письма и указаны пользователи.

Адрес папки состоит из Константы+Имя пользователя+Константа+выбранная папка (например, C://Операторы//ИвановВА//Тверь//Март, где ИвановВА - имя пользователя, март - выбранная папка). В принципе, данная сложность решается функциями "Сцепить"; "ИмяПользователя" и "проверкой данных". Сейчас у меня это все собирается и получается нужный адрес в ячейке Excel, поэтому можно в макросе ссылаться на ячейку А1.

ТЗ (от лица пользователя):
Я захожу в excel файл, где в ячейках указаны: А1 - я выбираю папку (март, февраль, январь - к примеру), А2- формируется адрес папки; А3 - выбранный формат файла; А4 - тема письма; А5 - текст письма; А6 - получатели. Далее я запускаю макрос, перехожу в Outlook в раздел "Черновики", при необходимости добавляю дополнительные материалы (например, скриншот) и отправляю. Сама пыталась написать, не вышло. Код прикладываю.
Вывод последних файлов на страницу Excel
 
Помогите исправить ошибку. Хочу объединить два макроса:
- https://excelvba.ru/code/FilenamesCollection
- https://excelvba.ru/code/LastFile

Выходит ошибка: Run-time error '91'
Еще открывается новая книга, не пойму, что за строчка за эту функцию отвечает?

Файл приложила.
[ Закрыто] Архивирование последних файлов в папке и отправка их по outlook
 
Цитата
Ігор Гончаренко написал:
архивирование файлов, отправка outlook-ом... а каким боком тут Excel?

Игорь, я прокомментировала ваш вопрос и описала желаемый функционал)
[ Закрыто] Архивирование последних файлов в папке и отправка их по outlook
 
Нет, архивируются не файлы Excel. Давайте опишу, как пользуется пользователь:
1. Он заходит в файл Excel, где уже записаны стандартная тема письма, текст письма и список получателей.
2. Он с помощью "выбора данных (проверка данных)" выбирает папку, откуда берутся файлы и формат файлов.
3. Запускает макрос и он уже архивирует последние файлы в выбранной папке с конкретным условием. Далее добавляет сформированный архив в черновик outlook, где уже вписан текст и тему письма, а также получатели.

При необходимости: пользователь в этот черновик добавляет скриншот
и отправляет.

Какую-то специальную программу нельзя написать, она просто не установиться у нас по тех.безопасности. Поэтому и шаманим с макросами))

Так-то во вложении написан макрос, который позволяет выбрать файлы, архивирует их и отправляет. + я нашла макрос для отбора файлов, чтобы выбирался только последний, но у меня не получается заменить условие "выбора файла" на функцию LastFile (последний файл в указанной папке). + не нашла макрос, который бы не отправлял письмо, а сохранял его в черновиках. Есть макрос для outlook, но это другое. Поэтому задача намного прозаичнее: 1) подсказать, как объединить для готовых макроса; 2) если есть какие-то доступные примеры по созданию черновика в excel - прислать примерики или посоветовать, что можно сделать))
Изменено: Вероника Некрасова - 05.05.2022 12:46:36
[ Закрыто] Архивирование последних файлов в папке и отправка их по outlook
 
Здравствуйте, похожие задачи есть в форуме, но не то. Есть макрос, который архивирует все файлы из папки, есть макрос, который предлагает выбрать файлы для архивации и в обоих случаях отправляется письмо в outlook, НО мне нужно сложнее.

У нас есть следующие данные, например, адрес папки (А1, пользователь будет самостоятельно выбирать адрес папки), формат (вообще .log, но плюсом будет, если можно будет менять форматы по выбору). Необходимо, чтобы в выбранной пользователем папке, архивировались только ПОСЛЕДНИЕ добавленные файлы (их будет много, дата одна, время разное). После этого, собранные файлы архивировались и отправлялись, НО иногда в письмо необходимо еще приложить скриншот. Пока не понимаю, как сделать. Приложить скриншот в Excel не удобно. Наверное проще, чтобы макрос не отправлял письмо, а сохранял его в черновиках outlook, а потом уже пользователь самостоятельно отправлял письмо.

Обобщив, что должен делать макрос:
1. Архивировать все последние файлы в заданной папке;
2. Добавлять в outlook черновик с вложенным архивом и получателями.

Я нашла макрос для поиска последнего файла, но там именно файла, а не файлов (их будет несколько), макрос с черновиком вообще не нашла. И в общий макрос по архивированию не получается вставить макрос LastFile. Файл прикладываю.

Версия Excel: 2016
[ Закрыто] Помогите решить проблему с архивированием файлов
 
Здравствуйте! Необходим макрос, который бы собирал ПОСЛЕДНИЕ файлы определенного формата из указанной папки, потом всё архивировалось и отправлялось пользователю в otlook. НО есть один момент. Письмо должно не сразу отправляться, а создаваться черновиков с конкретным пользователем. Пока получилось так:

I10 - это ячейка с адресом папки. Жирным выделила то, где не получается, выходит ошибка  :(

Sub CreateNewZip(sPath As String)
   If Dir(sPath) <> "" Then Kill sPath
   Open sPath For Output As #1
   Print #1, Chr$(80) & Chr$(75) & Chr$(5) & Chr$(6) & String(18, 0)
   Close #1
End Sub
Sub Zip_File_Or_Files()
   Dim sDate As String, sZIPPath As String, sZIPFileName As String, sWBName As String
   Dim objShell As Object, lf As Long, lZIPCnt As Long
   Dim LastFile$
   If VarType(LastFile$) = vbBoolean Then Exit Sub
   sZIPPath = Replace(LastFile$(1), Dir(LastFile$(1), 16), "")

   If Right(sZIPPath, 1) <> "\" Then
       sZIPPath = sZIPPath & "\"
   End If
       
   sDate = Format(Now, " dd-mm-yy h-mm-ss")
   sZIPFileName = sZIPPath & "Логи" & sDate & ".zip"
   CreateNewZip (sZIPFileName)
   Set objShell = CreateObject("Shell.Application")
   lZIPCnt = 0
   For lf = LBound(avFiles) To UBound(avFiles)
       sWBName = Dir(avFiles(lf), 16)
       If IsBookOpen(sWBName) Then
           MsgBox "Невозможно поместить файл'" & avFiles(lf) & "' в архив!" & vbNewLine & _
                  "Закройте книгу и повторите попытку."
       Else
           lZIPCnt = lZIPCnt + 1
           objShell.Namespace((sZIPFileName)).CopyHere CStr(avFiles(lf))
           Do Until objShell.Namespace((sZIPFileName)).Items.Count = lZIPCnt
               DoEvents
           Loop
       End If
   Next lf
   If lZIPCnt Then
       MsgBox "Архив создан по пути: " & sZIPFileName
   End If
   Send_Mail sZIPFileName
End Sub
Function IsBookOpen(wbName As String) As Boolean
   Dim wbBook As Workbook: On Error Resume Next
   Set wbBook = Workbooks(wbName)
   IsBookOpen = Not wbBook Is Nothing
End Function
Sub Send_Mail(sPath As String)
   Dim objOutlookApp As Object, objMail As Object
   Dim sTo As String, sSubject As String, sBody As String, sAttachment As String
   
   Application.ScreenUpdating = False
   On Error Resume Next
   Set objOutlookApp = GetObject(, "Outlook.Application")
   Err.Clear
   If objOutlookApp Is Nothing Then
       Set objOutlookApp = CreateObject("Outlook.Application")
   End If
   Set objMail = objOutlookApp.CreateItem(0)
   If Err.Number <> 0 Then Set objOutlookApp = Nothing: Set objMail = Nothing: Exit Sub
   sTo = Range("B32").Value
   sSubject = Range("F3").Value
   sBody = Range("F8").Value
   sAttachment = sPath
   With objMail
       .To = sTo
       .CC = ""
       .BCC = ""
       .Subject = sSubject
       .Body = sBody
       If sAttachment <> "" Then
           If Dir(sAttachment, 16) <> "" Then
               .Attachments.Add sAttachment
           End If
       End If
       .Send
       End With
   
   Set objOutlookApp = Nothing: Set objMail = Nothing
   Application.ScreenUpdating = True
End Sub
Function LastFile$(ByVal FolderPath As String, Optional ByVal Mask As String = "", _
                   Optional ByVal SearchDeep As Long = 999)
   Dim FilenamesCollection As New Collection
   Set FSO = CreateObject("Scripting.FileSystemObject")
   GetAllfileNameUsingFSO FolderPath, Mask, FSO, FilenamesCollection, SearchDeep
   Set FSO = Nothing: Application.StatusBar = False
   Dim maxFileDate As Double
   For Each file In FilenamesCollection
       currFileDate = FileDateTime(file)
       If currFileDate > maxFileDate Then LastFile$ = file: maxFileDate = currFileDate
   Next file
End Function
Function GetAllFileNamesUsingFSO(ByVal FolderPath As String, ByVal Mask As String, ByRef FSO, _
                                 ByRef FileNamesColl As Collection, ByVal SearchDeep As Long)
   On Error Resume Next: Set curfold = FSO.GetFolder(FolderPath)
   If Not curfold Is Nothing Then
       Application.StatusBar = "Поиск в папке: " & FolderPath
       For Each fil In curfold.Files
           If fil.Name Like "*" & Mask Then FileNamesColl.Add fil.Path
       Next
       SearchDeep = SearchDeep - 1
       If SearchDeep Then
           For Each sfol In curfold.subfolders
               GetAllfileNameUsingFSO sfol.Path, Mask, FSO, FileNamesColl, SearchDeep
           Next
       End If
       Set fil = Nothing: Set curfold = Nothing
   End If
End Function
Ссылка на лист в книге в сводной таблице, Переход на лист из сводной таблицы
 
Очень актуальный вопрос, который остался без решения. Может кто-то знает какую-то лазейку, как можно вставить ссылку на лист в сводной таблице? Очень нужно((
Связь таблицы со срезами и сводной таблицы, Необходимо сделать динамическую диаграмму
 
Очень сложная задача, не знаю как к ней подойди.

У нас есть дашборд таблицы с срезами, и по ней нужно сделать динамичную диаграмму. Раньше я делала динамичные таблицы через сводные таблицы, но в них нет возможности вставить гиперссылки, поэтому сделать дашборд из сводной таблицы нам не подходит. Как тогда быть? Может есть какой-то волшебный макрос связи, чтобы фильтрация таблицы на одном листе со срезами отображалась в сводной таблице на другом листе?
Страницы: 1
Наверх