Привет! Имеется макрос который нарыл на просторах интернет, он сейчас собирает информацию о файлах в указанной папке. Но еще нужно как то прикрутить к этому макросу чтобы он считал хеш MD5 и добавлял в соотвествующий столбик. Нашел как можно посмотреть хеш через командную строку но как это прикрутить к макросу не понимаю
Certutil -hashfile c:file MD5
Прошу помощи в данном вопросе, возможно есть другой способ получения хеша файла. Это нужно для подготовки ИУЛ (информационно удостоверяющий лист) который содержит информацию о файле включая хеш.
Код
Sub FileList() Dim V As String Dim BrowseFolder As String
'открываем диалоговое окно выбора папки With Application.FileDialog(msoFileDialogFolderPicker) .Title = "Выберите папку с разделами для экспертизы" .Show On Error Resume Next Err.Clear V = .SelectedItems(1) If Err.Number <> 0 Then MsgBox "Вы ничего не выбрали!" Exit Sub End If End With BrowseFolder = CStr(V)
'добавляем лист и выводим на него шапку таблицы ActiveWorkbook.Sheets.Add.Name = "Files" With Range("A1:E1") .Font.Bold = True .Font.Size = 12 End With Range("A1").Value = "Имя файла" Range("B1").Value = "Путь" Range("C1").Value = "Размер" Range("D1").Value = "Дата создания" Range("E1").Value = "Дата изменения"
'вызываем процедуру вывода списка файлов 'измените True на False, если не нужно выводить файлы из вложенных папок ListFilesInFolder BrowseFolder, False End Sub
Private Sub ListFilesInFolder(ByVal SourceFolderName As String, ByVal IncludeSubfolders As Boolean)
Dim FSO As Object Dim SourceFolder As Object Dim SubFolder As Object Dim FileItem As Object Dim r As Long
Set FSO = CreateObject("Scripting.FileSystemObject") Set SourceFolder = FSO.getfolder(SourceFolderName)
r = Range("A65536").End(xlUp).Row + 1 'находим первую пустую строку 'выводим данные по файлу For Each FileItem In SourceFolder.Files Cells(r, 1).Formula = FileItem.Name Cells(r, 2).Formula = FileItem.Path Cells(r, 3).Formula = FileItem.Size Cells(r, 4).Formula = FileItem.DateCreated Cells(r, 5).Formula = FileItem.DateLastModified r = r + 1 x = SourceFolder.Path Next FileItem
'вызываем процедуру повторно для каждой вложенной папки If IncludeSubfolders Then For Each SubFolder In SourceFolder.SubFolders ListFilesInFolder SubFolder.Path, True Next SubFolder End If
Columns("A:E").AutoFit
Set FileItem = Nothing Set SourceFolder = Nothing Set FSO = Nothing End Sub
Заранее благодарен
MS Office Office 2010 x64 версия 14.0.7015.1000
Привет! Имеется макрос который нарыл на просторах интернет, он сейчас собирает информацию о файлах в указанной папке. Но еще нужно как то прикрутить к этому макросу чтобы он считал хеш MD5 и добавлял в соотвествующий столбик. Нашел как можно посмотреть хеш через командную строку но как это прикрутить к макросу не понимаю
Certutil -hashfile c:file MD5
Прошу помощи в данном вопросе, возможно есть другой способ получения хеша файла. Это нужно для подготовки ИУЛ (информационно удостоверяющий лист) который содержит информацию о файле включая хеш.
Код
Sub FileList() Dim V As String Dim BrowseFolder As String
'открываем диалоговое окно выбора папки With Application.FileDialog(msoFileDialogFolderPicker) .Title = "Выберите папку с разделами для экспертизы" .Show On Error Resume Next Err.Clear V = .SelectedItems(1) If Err.Number <> 0 Then MsgBox "Вы ничего не выбрали!" Exit Sub End If End With BrowseFolder = CStr(V)
'добавляем лист и выводим на него шапку таблицы ActiveWorkbook.Sheets.Add.Name = "Files" With Range("A1:E1") .Font.Bold = True .Font.Size = 12 End With Range("A1").Value = "Имя файла" Range("B1").Value = "Путь" Range("C1").Value = "Размер" Range("D1").Value = "Дата создания" Range("E1").Value = "Дата изменения"
'вызываем процедуру вывода списка файлов 'измените True на False, если не нужно выводить файлы из вложенных папок ListFilesInFolder BrowseFolder, False End Sub
Private Sub ListFilesInFolder(ByVal SourceFolderName As String, ByVal IncludeSubfolders As Boolean)
Dim FSO As Object Dim SourceFolder As Object Dim SubFolder As Object Dim FileItem As Object Dim r As Long
Set FSO = CreateObject("Scripting.FileSystemObject") Set SourceFolder = FSO.getfolder(SourceFolderName)
r = Range("A65536").End(xlUp).Row + 1 'находим первую пустую строку 'выводим данные по файлу For Each FileItem In SourceFolder.Files Cells(r, 1).Formula = FileItem.Name Cells(r, 2).Formula = FileItem.Path Cells(r, 3).Formula = FileItem.Size Cells(r, 4).Formula = FileItem.DateCreated Cells(r, 5).Formula = FileItem.DateLastModified r = r + 1 x = SourceFolder.Path Next FileItem
'вызываем процедуру повторно для каждой вложенной папки If IncludeSubfolders Then For Each SubFolder In SourceFolder.SubFolders ListFilesInFolder SubFolder.Path, True Next SubFolder End If
Columns("A:E").AutoFit
Set FileItem = Nothing Set SourceFolder = Nothing Set FSO = Nothing End Sub
Заранее благодарен
MS Office Office 2010 x64 версия 14.0.7015.1000ArtyLight
Сообщение отредактировал ArtyLight - Воскресенье, 10.03.2019, 18:39
Function GetMD5(ByVal FilePath As String) As String GetMD5 = Split(CreateObject("WScript.Shell"). _ Exec("Certutil -hashfile """ & FilePath & """ MD5").StdOut.ReadAll, vbCrLf)(1) End Function
[/vba]
но лучше прямо через VBA, Смотрите например туттут
[vba]
Код
Function GetMD5(ByVal FilePath As String) As String GetMD5 = Split(CreateObject("WScript.Shell"). _ Exec("Certutil -hashfile """ & FilePath & """ MD5").StdOut.ReadAll, vbCrLf)(1) End Function
[/vba]
но лучше прямо через VBA, Смотрите например туттутbmv98rus
Замечательный Временно просто медведь , процентов на 20.
Сообщение отредактировал bmv98rus - Воскресенье, 10.03.2019, 22:32
Function FileMD5$(sFilePath$) On Error GoTo err Dim byteArr() As Byte, B As Variant, sTmp$ With CreateObject("adodb.stream") .Type = 1: .Open: .LoadFromFile sFilePath byteArr = .read End With With CreateObject("System.Security.Cryptography.MD5CryptoServiceProvider") For Each B In .ComputeHash_2(byteArr) sTmp = sTmp & UCase(Right("0" & Hex(B), 2)) Next End With Erase byteArr FileMD5 = sTmp Exit Function err: Debug.Print "Ну не шмогла я, не шмогла" End Function
[/vba] [vba]
Код
Function FileMD5$(sFilePath$) On Error GoTo err Dim byteArr() As Byte With CreateObject("adodb.stream") .Type = 1: .Open: .LoadFromFile sFilePath byteArr = .read End With With CreateObject("System.Security.Cryptography.MD5CryptoServiceProvider") FileMD5 = Join(Application.Dec2Hex(.ComputeHash_2(byteArr), 2), "") End With Erase byteArr Exit Function err: Debug.Print "Ну не шмогла я, не шмогла" End Function
Function FileMD5$(sFilePath$) On Error GoTo err Dim byteArr() As Byte, B As Variant, sTmp$ With CreateObject("adodb.stream") .Type = 1: .Open: .LoadFromFile sFilePath byteArr = .read End With With CreateObject("System.Security.Cryptography.MD5CryptoServiceProvider") For Each B In .ComputeHash_2(byteArr) sTmp = sTmp & UCase(Right("0" & Hex(B), 2)) Next End With Erase byteArr FileMD5 = sTmp Exit Function err: Debug.Print "Ну не шмогла я, не шмогла" End Function
[/vba] [vba]
Код
Function FileMD5$(sFilePath$) On Error GoTo err Dim byteArr() As Byte With CreateObject("adodb.stream") .Type = 1: .Open: .LoadFromFile sFilePath byteArr = .read End With With CreateObject("System.Security.Cryptography.MD5CryptoServiceProvider") FileMD5 = Join(Application.Dec2Hex(.ComputeHash_2(byteArr), 2), "") End With Erase byteArr Exit Function err: Debug.Print "Ну не шмогла я, не шмогла" End Function
bmv98rus, маркос для получения получения хеша файла. извините за неточное описание в прошлом письме, просто тема была создана, для автоматического определения в экселе хеша файлов, для создания ИУЛ. я прописала вышеуказанные кода, и не получилось нужного результата. а у вас получились Дата: Понедельник, 11.03.2019, 07:41 | Сообщение № 6 "1D36B7F799F673BF45370D0AF4C3F4C8"
bmv98rus, маркос для получения получения хеша файла. извините за неточное описание в прошлом письме, просто тема была создана, для автоматического определения в экселе хеша файлов, для создания ИУЛ. я прописала вышеуказанные кода, и не получилось нужного результата. а у вас получились Дата: Понедельник, 11.03.2019, 07:41 | Сообщение № 6 "1D36B7F799F673BF45370D0AF4C3F4C8"dashunka