Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 28.05.2018
Сообщений: 23
1

Макрос MD5

15.11.2023, 14:26. Показов 892. Ответов 4

Author24 — интернет-сервис помощи студентам
Не понимаю почему и что изменилось, но под win11 перестал работать макрос, который отлично работал и работает в win10.
Кто может подсказать что и почему перестало работать?

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Public Function FileToMD5(sFullPath As String, Optional bB64 As Boolean = False) As String
        
    Dim enc, bytes, outstr As String, pos As Integer
    
    Set enc = CreateObject("System.Security.Cryptography.MD5CryptoServiceProvider")
    bytes = GetFileBytes(sFullPath)
    bytes = enc.ComputeHash_2((bytes))
    
    If bB64 = True Then
       FileToMD5 = ConvToBase64String(bytes)
    Else
       FileToMD5 = ConvToHexString(bytes)
    End If
        
    Set enc = Nothing
 
End Function
Добавлено через 1 час 51 минуту
модуль целиком со всеми функциями:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
'процедура расчета хэша MD5:
Public Function FileToMD5(sFullPath As String, Optional bB64 As Boolean = False) As String
        
    Dim enc, bytes, outstr As String, pos As Integer
    
    Set enc = CreateObject("System.Security.Cryptography.MD5CryptoServiceProvider")
    bytes = GetFileBytes(sFullPath)
    bytes = enc.ComputeHash_2((bytes))
    
    If bB64 = True Then
       FileToMD5 = ConvToBase64String(bytes)
    Else
       FileToMD5 = ConvToHexString(bytes)
    End If
        
    Set enc = Nothing
 
End Function
 
Private Function GetFileBytes(ByVal sPath As String) As Byte()
 
    Dim lngFileNum As Long, bytRtnVal() As Byte, bTest
    
    lngFileNum = FreeFile
    
    If LenB(Dir(sPath)) Then
        
        Open sPath For Binary Access Read As lngFileNum
        
        ReDim bytRtnVal(0 To LOF(lngFileNum) - 1&) As Byte
        Get lngFileNum, , bytRtnVal
        Close lngFileNum
    Else
        err.Raise 53
    End If
    
    GetFileBytes = bytRtnVal
    
    Erase bytRtnVal
 
End Function
 
Function ConvToBase64String(vIn As Variant) As Variant
     
    Dim oD As Object
      
    Set oD = CreateObject("MSXML2.DOMDocument")
      With oD
        .LoadXML "<root />"
        .DocumentElement.DataType = "bin.base64"
        .DocumentElement.nodeTypedValue = vIn
      End With
    ConvToBase64String = Replace(oD.DocumentElement.Text, vbLf, "")
    
    Set oD = Nothing
 
End Function
 
Function ConvToHexString(vIn As Variant) As Variant
  
    Dim oD As Object
      
    Set oD = CreateObject("MSXML2.DOMDocument")
      
      With oD
        .LoadXML "<root />"
        .DocumentElement.DataType = "bin.Hex"
        .DocumentElement.nodeTypedValue = vIn
      End With
    ConvToHexString = Replace(oD.DocumentElement.Text, vbLf, "")
    
    Set oD = Nothing
 
End Function
 
Function GetFileSize(sFilePath As String, nSize As Long) As Boolean
   
    Dim fs As Object, f As Object
    
    Set fs = CreateObject("Scripting.FileSystemObject")
    
    If fs.FileExists(sFilePath) Then
        Set f = fs.getfile(sFilePath)
        nSize = f.Size
        GetFileSize = True
        Exit Function
    End If
 
End Function
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.11.2023, 14:26
Ответы с готовыми решениями:

Макрос: Написать макрос по сравнению двух таблиц для нахождения несоответствий...
знатоки, прошу помощи в еще одном деле: есть два листа, --в одном список: яблоко, груша, слива, ...

Макрос вставки файлов в листы-Необходимо изменить ниже приведённый макрос
Необходимо изменить ниже приведённый макрос, взятый с форума. Необходима помощь. Буду признателен....

Макрос: из PowerPoint развернуть Exel и вызвать уже в нём макрос
Собственно сабж. Работая в презентации PowerPoint нужно по клику на кнопку с прикреплённым макросом...

Макрос который формирует макрос для универсальных масок ввода
Приветствую! Написал макрос, который формирует код в зависимости от придуманной вами маски ввода...

4
823 / 316 / 41
Регистрация: 10.05.2021
Сообщений: 1,394
Записей в блоге: 10
15.11.2023, 16:29 2
matuz, гадать мало, кто любит, а у вас "что-то поменялось". Что поменялось-то?
Тестируйте свои функции отдельно и поймите, какая и в чём сбоит. Тогда и приходите.
0
0 / 0 / 0
Регистрация: 28.05.2018
Сообщений: 23
15.11.2023, 18:22  [ТС] 3
Ну в том то и дело что один и тот же файл с макросом на трех устройствах под вин10 ведет себя штатно, а на двух других под вин11 ломается
0
823 / 316 / 41
Регистрация: 10.05.2021
Сообщений: 1,394
Записей в блоге: 10
16.11.2023, 11:11 4
matuz, возможно, какая-то из библиотек отсутствует. Гуглите, "раннее связывание" и имя библиотеки из CreateObject (например "Scripting.FileSystemObject"). Как найдёте, как они полностью называются, ищите их у себя в проекте в Tools → References и подключайте. Скорее всего, какой-то не будет.
0
917 / 577 / 71
Регистрация: 08.02.2017
Сообщений: 2,217
Записей в блоге: 1
16.11.2023, 12:22 5
Цитата Сообщение от matuz Посмотреть сообщение
System.Security
Это объекты NetFramework. Может быть что-то не так с нетфреймворком, но это так поверхностно, лучше пошагово выполнять, и смотреть на каком месте ошибка или отсутствие нужного результата.

Добавлено через 16 минут
Получить FileMD5 файла можно с помощью capicom.dll. Взято отсюда (было в закладках с давних времен).
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Function FileMD5(FlPath As String) As String
    Const CAPICOM_HASH_ALGORITHM_MD5 = 3
    Const adTypeBinary = 1
    Const lngPortion = 1024                    ' 1048576
    Dim objStream
    Dim objHashedData
        
    ' CAPICOM 2.1.0.2 (http://support.microsoft.com/kb/931906/)
    Set objHashedData = CreateObject("CAPICOM.HashedData")
    Set objStream = CreateObject("ADODB.Stream")
    
    objHashedData.Algorithm = CAPICOM_HASH_ALGORITHM_MD5
    
    With objStream
        .Type = adTypeBinary
        .Open
        .LoadFromFile (FlPath)
        Do Until .EOS
            objHashedData.hash .Read(lngPortion)
        Loop
        .Close
    End With
    
    FileMD5 = objHashedData.Value
End Function
Добавлено через 29 минут
На раннем связывании будет выглядеть так:
(для работы нужно подключить "CAPICOM v2.1 Type Library" и "Microsoft ActiveX Data Objects 6.1 Library" в референсах)
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Function FileMD5(FlPath As String) As String
    Const lngPortion = 1024                    ' 1048576
    Static objStream As New ADODB.Stream
    Static objHashedData As New CAPICOM.HashedData
        
    objHashedData.Algorithm = CAPICOM_HASH_ALGORITHM_MD5
    
    With objStream
        .Type = adTypeBinary
        .Open
        .LoadFromFile FlPath
        Do Until .EOS
            objHashedData.hash .Read(lngPortion)
        Loop
        .Close
    End With
    
    FileMD5 = objHashedData.Value
End Function
0
16.11.2023, 12:22
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.11.2023, 12:22
Помогаю со студенческими работами здесь

Макрос на сумму чисел из выборки и макрос на откат удаления строк
Привет. Помогите, пожалуйста, с двумя задачками: 1. составить макрос или формулу для ячейки:...

Макрос хранимый в отдельном файле или макрос на обновление макросов
Уважаемые форумчане, подскажите советом. Есть у меня файл Excel с макросами, которые я поддерживаю...

Макрос делает копию листа и сохраняет в новую книгу, но макрос в новой не работает
Есть макрос в книге. Он копирует текущий лист, создает новую книгу и копирует в новую книгу лист. ...

Макрос, чтобы другой макрос распихал сам по N файлам
Может эта тема уже тут звучала, да поиск не помог... Просто проблема в том, что макрос постоянно...

Макрос, запускающий макрос из другого закрытого файла
Здравствуйте. Использую Office 2007. Поискал на форуме, не нашел ответа. Опишу подробно...

Сделать макрос в Word, вводишь строку и макрос произвольно меняет шрифт, цвет и размер для каждого слова из этого активного вордовского документа.
Началось VBA - лекций нет, только практика. Препод категоричеки отказывается что-нить объяснять,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru