Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Переделать макрос для поиска файлов и вывода их на печать - Мир MS Excel

  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_, DrMini  
Переделать макрос для поиска файлов и вывода их на печать
Сашаа Дата: Четверг, 03.04.2014, 00:22 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 12
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Прошу помощи автоматизировать задачу

Есть список фрагментов названий файлов (колонка в Excel), по нему нужно искать файлы .tif в заданном каталоге и выводить на печать найденные.
Нашел частичное решение задачи, но на переделку своих мозгов не хватает.

[vba]
Код
Const inputFolder = "C:\temp\", outFolder = "c:\out\" 'должна существовать
Const logName = "log.txt" 'по условиям задачи, будет находиться в outFolder
Dim folderCount As Long, stbar As Boolean, startTime As Date
Dim frags() As String, fragsCount As Long

Sub ledk()
Dim x As Range, i As Long
'формируем массив со строками для сравнения
Set x = Range("A1").End(xlDown)
If x = "" Then x = Range("A1")  'в списке одно значение
fragsCount = x.Row
ReDim frags(fragsCount)
For i = 1 To fragsCount
frags(i) = "*" & Cells(i, 1) & "*"
Next

Open outFolder & logName For Append As #1
startTime = Time
folderCount = 0
stbar = Application.DisplayStatusBar
Application.DisplayStatusBar = True

Print #1, "******* начало перемещения файлов " & Date & " " & Time
'   запускает процесс с исходной папки
processFolder inputFolder
Print #1, "******* конец перемещения файлов " & Date & " " & Time & _
", папок " & folderCount & ", время " & Format(Time - startTime, "hh:mm:ss")
Close #1
Application.DisplayStatusBar = stbar
Application.StatusBar = False
Debug.Print folderCount & Format(Time - startTime, ", hh:mm:ss")
End Sub

Private Sub processFolder(fName As String)
Dim fso As Object, file As Object, fileName As String, i As Long
folderCount = folderCount + 1
Application.StatusBar = folderCount & " " & fName
Set fso = CreateObject("scripting.filesystemobject")
Set fso = fso.getfolder(fName)

'   Для каждого файла в папке ...
For Each file In fso.Files
fileName = file.Name
For i = 1 To fragsCount
'   Если значение ячейки содержится в имени файла, то в файл-лог выводится путь к файлу,
'   файл перемещается в папку назначения
If fileName Like frags(i) Then
'      If InStr(1, fileName, x, vbTextCompare) > 0 Then 'оказалось медленнее
Print #1, file.Path
file.Move outFolder
Exit For
End If
Next
Next

'   Для каждой подпапки в папке просто вызывается эта же подпрограмма!
For Each file In fso.subfolders
processFolder file.Path
Next
[/vba]


Сообщение отредактировал Сашаа - Четверг, 03.04.2014, 00:23
 
Ответить
СообщениеПрошу помощи автоматизировать задачу

Есть список фрагментов названий файлов (колонка в Excel), по нему нужно искать файлы .tif в заданном каталоге и выводить на печать найденные.
Нашел частичное решение задачи, но на переделку своих мозгов не хватает.

[vba]
Код
Const inputFolder = "C:\temp\", outFolder = "c:\out\" 'должна существовать
Const logName = "log.txt" 'по условиям задачи, будет находиться в outFolder
Dim folderCount As Long, stbar As Boolean, startTime As Date
Dim frags() As String, fragsCount As Long

Sub ledk()
Dim x As Range, i As Long
'формируем массив со строками для сравнения
Set x = Range("A1").End(xlDown)
If x = "" Then x = Range("A1")  'в списке одно значение
fragsCount = x.Row
ReDim frags(fragsCount)
For i = 1 To fragsCount
frags(i) = "*" & Cells(i, 1) & "*"
Next

Open outFolder & logName For Append As #1
startTime = Time
folderCount = 0
stbar = Application.DisplayStatusBar
Application.DisplayStatusBar = True

Print #1, "******* начало перемещения файлов " & Date & " " & Time
'   запускает процесс с исходной папки
processFolder inputFolder
Print #1, "******* конец перемещения файлов " & Date & " " & Time & _
", папок " & folderCount & ", время " & Format(Time - startTime, "hh:mm:ss")
Close #1
Application.DisplayStatusBar = stbar
Application.StatusBar = False
Debug.Print folderCount & Format(Time - startTime, ", hh:mm:ss")
End Sub

Private Sub processFolder(fName As String)
Dim fso As Object, file As Object, fileName As String, i As Long
folderCount = folderCount + 1
Application.StatusBar = folderCount & " " & fName
Set fso = CreateObject("scripting.filesystemobject")
Set fso = fso.getfolder(fName)

'   Для каждого файла в папке ...
For Each file In fso.Files
fileName = file.Name
For i = 1 To fragsCount
'   Если значение ячейки содержится в имени файла, то в файл-лог выводится путь к файлу,
'   файл перемещается в папку назначения
If fileName Like frags(i) Then
'      If InStr(1, fileName, x, vbTextCompare) > 0 Then 'оказалось медленнее
Print #1, file.Path
file.Move outFolder
Exit For
End If
Next
Next

'   Для каждой подпапки в папке просто вызывается эта же подпрограмма!
For Each file In fso.subfolders
processFolder file.Path
Next
[/vba]

Автор - Сашаа
Дата добавления - 03.04.2014 в 00:22
Сашаа Дата: Четверг, 03.04.2014, 23:09 | Сообщение № 2
Группа: Пользователи
Ранг: Новичок
Сообщений: 12
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
 
Ответить
Сообщениеhttp://forum.ixbt.com/topic.cgi?id=23:38561#18

Автор - Сашаа
Дата добавления - 03.04.2014 в 23:09
Сашаа Дата: Суббота, 05.04.2014, 23:08 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 12
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
как вариант пытался переделать данный вариант, но на печать выводился только выделенная ячейка и и только документы MS (на .tif ругается)
[vba]
Код

Sub OpenAndPrint()

Dim i As Integer, FilePath As String, Paus As Long
Dim FL

FilePath = "C:\Temp\" 'please, insert our path to folder-source
URL = Dir(FilePath & "*" & Selection.Value & "*")
If URL = "" Then MsgBox "File NOT found", vbCritical, "": Exit Sub
URL = FilePath & URL
' URL = "C:\Temp\" & Cells(i, "A") 'opening of the file, associated with application
CreateObject("WScript.Shell").Run URL

Paus = 100 'time for delay (mS)
Delay (Paus)

SendKeys "^P", True 'insert "Ctrl+P" (Open window for print)

Paus = 1000 'time for delay (mS)
Delay (Paus)

SendKeys "{Enter}", True 'insert "Enter" (Execute)

Paus = 100 'time for delay (mS)
Delay (Paus)

SendKeys "%{F4}", True 'Close file

End Sub
Private Sub Delay(Paus)

SStime = GetTickCount
DoEvents
Do While GetTickCount - SStime < Paus: DoEvents: Loop

End Sub
[/vba]


Сообщение отредактировал Сашаа - Суббота, 05.04.2014, 23:10
 
Ответить
Сообщениекак вариант пытался переделать данный вариант, но на печать выводился только выделенная ячейка и и только документы MS (на .tif ругается)
[vba]
Код

Sub OpenAndPrint()

Dim i As Integer, FilePath As String, Paus As Long
Dim FL

FilePath = "C:\Temp\" 'please, insert our path to folder-source
URL = Dir(FilePath & "*" & Selection.Value & "*")
If URL = "" Then MsgBox "File NOT found", vbCritical, "": Exit Sub
URL = FilePath & URL
' URL = "C:\Temp\" & Cells(i, "A") 'opening of the file, associated with application
CreateObject("WScript.Shell").Run URL

Paus = 100 'time for delay (mS)
Delay (Paus)

SendKeys "^P", True 'insert "Ctrl+P" (Open window for print)

Paus = 1000 'time for delay (mS)
Delay (Paus)

SendKeys "{Enter}", True 'insert "Enter" (Execute)

Paus = 100 'time for delay (mS)
Delay (Paus)

SendKeys "%{F4}", True 'Close file

End Sub
Private Sub Delay(Paus)

SStime = GetTickCount
DoEvents
Do While GetTickCount - SStime < Paus: DoEvents: Loop

End Sub
[/vba]

Автор - Сашаа
Дата добавления - 05.04.2014 в 23:08
anvg Дата: Понедельник, 07.04.2014, 03:46 | Сообщение № 4
Группа: Друзья
Ранг: Ветеран
Сообщений: 581
Репутация: 271 ±
Замечаний: 0% ±

2016, 365
Доброе время суток
Можно и так
К сообщению приложен файл: FindTif.xlsb (16.6 Kb)
 
Ответить
СообщениеДоброе время суток
Можно и так

Автор - anvg
Дата добавления - 07.04.2014 в 03:46
Сашаа Дата: Понедельник, 07.04.2014, 19:36 | Сообщение № 5
Группа: Пользователи
Ранг: Новичок
Сообщений: 12
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Спасибо за помощь и потраченное время. выдает только Finish
решение найдено [vba]
Код
Option Explicit
     
Const inputFolder = "C:\temp\"  'корневая папка
Const logName = "log.txt"       'будет создан или дополнен в inputFolder
Dim folderCount As Long, stbar As Boolean, startTime As Date
Dim frags() As String, fragsCount As Long
Dim miDoc As Object, ff As Integer
     
Sub Alexanderr()
Dim x As Range, i As Long
      'формируем массив со строками для сравнения
Set x = Range("A1").End(xlDown)
If x = "" Then x = Range("A1")  'в списке одно значение
fragsCount = x.Row
ReDim frags(fragsCount)
For i = 1 To fragsCount
      frags(i) = "*" & Cells(i, 1) & "*"
Next
Set miDoc = CreateObject("modi.document")
ff = FreeFile
Open inputFolder & logName For Append As ff
startTime = Time
folderCount = 0
stbar = Application.DisplayStatusBar
Application.DisplayStatusBar = True
      
Print #ff, "******* начало печати файлов " & Date & " " & Time
'   запускает процесс с исходной папки
processFolder inputFolder
Print #ff, "******* конец печати файлов " & Date & " " & Time & _
      ", папок " & folderCount & ", время " & Format(Time - startTime, "hh:mm:ss")
Close #ff
Application.DisplayStatusBar = stbar
Application.StatusBar = False
Debug.Print folderCount & Format(Time - startTime, ", hh:mm:ss")
End Sub
      
     
Private Sub processFolder(fName As String)
Dim fso As Object, file As Object, fileName As String, i As Long
folderCount = folderCount + 1
Application.StatusBar = folderCount & " " & fName
Set fso = CreateObject("scripting.filesystemobject")
Set fso = fso.getfolder(fName)
      
'   Для каждого файла в папке ...
For Each file In fso.Files
      fileName = file.Name
      For i = 1 To fragsCount
'   Если значение ячейки содержится в имени файла, то в файл-лог выводится путь к файлу,
'   файл распечатывается
         If fileName Like frags(i) Then
              Print #ff, file.Path,
              On Error Resume Next
              miDoc.Create file.Path
              If Err Then
                Err.Clear
                Print #ff, "ERROR"
              Else
                Print #ff, "OK"
                miDoc.PrintOut
              End If
              Exit For
          End If
      Next
Next
      
'   Для каждой подпапки в папке просто вызывается эта же подпрограмма!
For Each file In fso.subfolders
      processFolder file.Path
Next
     
End Sub
[/vba]

Хотел добавить, на будущее (вдруг понадобится удалить log.txt) Kill C:\temp\log.txt ругается и выдает "file already Open"
Не подскажите?


Сообщение отредактировал Сашаа - Понедельник, 07.04.2014, 19:37
 
Ответить
СообщениеСпасибо за помощь и потраченное время. выдает только Finish
решение найдено [vba]
Код
Option Explicit
     
Const inputFolder = "C:\temp\"  'корневая папка
Const logName = "log.txt"       'будет создан или дополнен в inputFolder
Dim folderCount As Long, stbar As Boolean, startTime As Date
Dim frags() As String, fragsCount As Long
Dim miDoc As Object, ff As Integer
     
Sub Alexanderr()
Dim x As Range, i As Long
      'формируем массив со строками для сравнения
Set x = Range("A1").End(xlDown)
If x = "" Then x = Range("A1")  'в списке одно значение
fragsCount = x.Row
ReDim frags(fragsCount)
For i = 1 To fragsCount
      frags(i) = "*" & Cells(i, 1) & "*"
Next
Set miDoc = CreateObject("modi.document")
ff = FreeFile
Open inputFolder & logName For Append As ff
startTime = Time
folderCount = 0
stbar = Application.DisplayStatusBar
Application.DisplayStatusBar = True
      
Print #ff, "******* начало печати файлов " & Date & " " & Time
'   запускает процесс с исходной папки
processFolder inputFolder
Print #ff, "******* конец печати файлов " & Date & " " & Time & _
      ", папок " & folderCount & ", время " & Format(Time - startTime, "hh:mm:ss")
Close #ff
Application.DisplayStatusBar = stbar
Application.StatusBar = False
Debug.Print folderCount & Format(Time - startTime, ", hh:mm:ss")
End Sub
      
     
Private Sub processFolder(fName As String)
Dim fso As Object, file As Object, fileName As String, i As Long
folderCount = folderCount + 1
Application.StatusBar = folderCount & " " & fName
Set fso = CreateObject("scripting.filesystemobject")
Set fso = fso.getfolder(fName)
      
'   Для каждого файла в папке ...
For Each file In fso.Files
      fileName = file.Name
      For i = 1 To fragsCount
'   Если значение ячейки содержится в имени файла, то в файл-лог выводится путь к файлу,
'   файл распечатывается
         If fileName Like frags(i) Then
              Print #ff, file.Path,
              On Error Resume Next
              miDoc.Create file.Path
              If Err Then
                Err.Clear
                Print #ff, "ERROR"
              Else
                Print #ff, "OK"
                miDoc.PrintOut
              End If
              Exit For
          End If
      Next
Next
      
'   Для каждой подпапки в папке просто вызывается эта же подпрограмма!
For Each file In fso.subfolders
      processFolder file.Path
Next
     
End Sub
[/vba]

Хотел добавить, на будущее (вдруг понадобится удалить log.txt) Kill C:\temp\log.txt ругается и выдает "file already Open"
Не подскажите?

Автор - Сашаа
Дата добавления - 07.04.2014 в 19:36
anvg Дата: Вторник, 08.04.2014, 02:51 | Сообщение № 6
Группа: Друзья
Ранг: Ветеран
Сообщений: 581
Репутация: 271 ±
Замечаний: 0% ±

2016, 365
Цитата
выдает только Finish
значит, что в папке нет
Цитата
нужно искать файлы .tif
ваш алгоритм проверяет только имена (возможно у вас там .tiff, например), в остальном - аналогично. (Поменяйте константу
fileExtension = ".*" будет искать только по маске имени с любым расширением).
Цитата
Kill C:\temp\log.txt ругается и выдает "file already Open"

закройте его после всех вызовов записи.
[vba]
Код
Close #ff
[/vba]Успехов
 
Ответить
Сообщение
Цитата
выдает только Finish
значит, что в папке нет
Цитата
нужно искать файлы .tif
ваш алгоритм проверяет только имена (возможно у вас там .tiff, например), в остальном - аналогично. (Поменяйте константу
fileExtension = ".*" будет искать только по маске имени с любым расширением).
Цитата
Kill C:\temp\log.txt ругается и выдает "file already Open"

закройте его после всех вызовов записи.
[vba]
Код
Close #ff
[/vba]Успехов

Автор - anvg
Дата добавления - 08.04.2014 в 02:51
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2025 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!