Страницы: 1
RSS
[ Закрыто ] хеш ячейки
 
Вставляю этот макрос в Module1, запускаю, и вижу в ячейке B2 - #ЗНАЧ! и никак не могу в чем дело! ячейка A1-  пустая, в ней нет ничего.
Код
Function GetHash(ByVal txt$) As String
    Dim oUTF8, oMD5, abyt, i&, k&, hi&, lo&, chHi$, chLo$
    Set oUTF8 = CreateObject("System.Text.UTF8Encoding")
    Set oMD5 = CreateObject("System.Security.Cryptography.MD5CryptoServiceProvider")
    abyt = oMD5.ComputeHash_2(oUTF8.GetBytes_4(txt$))
    For i = 1 To LenB(abyt)
        k = AscB(MidB(abyt, i, 1))
        lo = k Mod 16: hi = (k - lo) / 16
        If hi > 9 Then chHi = Chr(Asc("a") + hi - 10) Else chHi = Chr(Asc("0") + hi)
        If lo > 9 Then chLo = Chr(Asc("a") + lo - 10) Else chLo = Chr(Asc("0") + lo)
        GetHash = GetHash & chHi & chLo
    Next
    Set oUTF8 = Nothing: Set oMD5 = Nothing
End Function
 
Цитата
aist123 написал: ячейка A1-  пустая, в ней нет ничего
а должно быть наоборот.
 
нет не должно! я пишу в ячейку B2 =GetHash(a1) и кнопка энтер и в ячейке B2 должно быть типа d41d8cd98f00b204e9800998ecf8427e , но пишет #ЗНАЧ!  - почему, я не знаю, поэтому сюда написал может быть вы знаете??
 
aist123, в ячейке A1 должны быть данные. Вы сами то проверяли?
 
данные могут быть любые, и хеш от этих данных будет соответствущий, если ячейка пустая то мд5 будет тот который я написал выше, где ошибка в коде раз он vba пишет ЗНАЧ!?
Изменено: aist123 - 18.02.2017 11:01:19
 
Цитата
aist123 написал: в ячейке B2 должно быть типа d41d8cd98f00b204e9800998ecf8427e , но пишет #ЗНАЧ!  - почему, я не знаю
вы исполняли код в пошаговом режиме (F5/F8)?.. у вас строка 3 и 4 создают нужные объекты?.. - первый возникающий к вам вопрос... (код не проверяла. но лично у меня вызывает сомнение наличие в xl библиотек для создания объектов, вами указанных)
p.s. и вообще, при выполнении в пошаговом режиме - на каком шаге появляется не та переменная?  
Изменено: JeyCi - 18.02.2017 06:15:37
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
 
Доброе время суток
Цитата
JeyCi написал: вызывает сомнение наличие в xl библиотек для создания объектов,
Это Net библиотеки в Windows они, как правило, есть. Код рабочий. Но, aist123 использует найденный код, ничего в нём не понимая
Цитата
aist123 написал: ячейка A1-  пустая, в ней нет ничего.
По коду же
Цитата
aist123 написал: abyt = oMD5.ComputeHash_2(oUTF8.GetBytes_4(txt$))
Если A1 - пустая, то и txt$ - пустая, строка не содержащая ни одного байта. Jungl, просто подумайте, как можно получить какие-нибудь байты вызовом Get_Bytes_4, передавая нечто не содержащее ни одного байта?
 
Цитата
Андрей VG написал:
Jungl , просто подумайте, как можно получить какие-нибудь байты вызовом Get_Bytes_4, передавая нечто не содержащее ни одного байта?
Добрый день.
Я это все понимаю.
Но, вопрос автора в том, что он не поймет, отчего же в ячейке B1 #ЗНАЧ!, на что ему был дан ответ в посте №2 :)
Можно обойтись проверкой на пустоту в ячейке и делать выход из функции или выдавать месседж бокс.
 
Jungl, ваше имя в моём сообщении появилось, видимо, из-за глюков форума. Порою случается, указываешь одного пользователя, а в результате выводится другой. Не проследил, приношу свои извинения.
А по поводу пустоты. В коде явно должен быть хотя бы один байт, поэтому и глюк. С другой стороны если набрать в SQL Server
Код
Select Cast(HASHBYTES(N'SHA2_512', N'') As nvarchar(max)) As sha_text;

то, как не странно, получим результат
sha_text
菏㗡붸哱倨淖ހ⃖פ國�↩泓컩큇㳑蕝냲菿툘纇⿬륣봱䅇腺㢥稲⟹㻚
Так что и у пустой строки есть свой хэш-код :)
 
Как же тогда надо изменитьь код, чтобы получить мд5 от ячейки ?
Цитата
Андрей VG написал:
использует найденный код, ничего в нём не понимая
да, так и есть, потому-то я не знаю как пишется хеширование для экселя, нашел в нете только такой код.(
 
у меня в Excel 2013 по приведенному коду при пустой ячейке получается хеш = d41d8cd98f00b204e9800998ecf8427e
поэтому проблема где-то в другом месте, а не в строке
Код
abyt = oMD5.ComputeHash_2(oUTF8.GetBytes_4(txt$))
aist123, приложите файл в котором у вас выходит ошибка #ЗНАЧ!
Изменено: Zoynels - 18.02.2017 14:17:15
 
Цитата
Zoynels написал:
aist123, приложите файл
- не получится. На другом форуме два дня пытали - как партизан, только скриншотами отстреливается... :)
Я там подсказал сперва проверить систему таким кодом:
Код
Sub proverkaNet()
    Dim oUTF8 As Object, oMD5 As Object

    On Error Resume Next
    Set oUTF8 = CreateObject("System.Text.UTF8Encoding")
    Set oMD5 = CreateObject("System.Security.Cryptography.MD5CryptoServiceProvider")

    MsgBox "System.Text.UTF8Encoding is " & (Not oUTF8 Is Nothing) & vbNewLine _
           & "System.Security.Cryptography.MD5CryptoServiceProvider is " & (Not oMD5 Is Nothing), vbInformation
           
    On Error GoTo 0

End Sub
 
Цитата
Андрей VG написал: А по поводу пустоты. В коде явно должен быть хотя бы один байт, поэтому и глюк. С другой стороны если набрать в SQL Server ... то, как не странно, получим результат
Андрей VG спасибо за разъяснения по библиотекам... если у ТСа стоит Net.Framework. полагаю?.. но сравнение с SQL'ем, подумалось мне, не совсем правомерно - с учётом его троичной логики... всё-таки null-значение для sql'я, наверно, тоже значения (а не отсутствие байтов)... предполагаю
Изменено: JeyCi - 18.02.2017 18:18:24
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
 
не, код не робит(((
мд5 хеш от "1" будет c4ca4238a0b923820dcc509a6f75849b
Изменено: aist123 - 18.02.2017 19:08:54
 
#12 читали? - о файле...
#12 запускали? - результат?
код из #1 !!
 
Цитата
если у ТСа стоит Net.Framework
так установлен он у вас в системе или нет?
p.s.
ваш скрин не отвечает ни на один из этих вопросов...
Изменено: JeyCi - 18.02.2017 19:26:57
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
 
Вот что мне показывает
 
Цитата
aist123 написал: Вот что мне показывает
должен показывать True, а не False... у вас в системе нет нужных библиотек... устанавливайте Net.Framework
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
 
а какой именно net framework нужен ? какую версию? 4.6 я ставил уже

хотел поставить и вот что пишет
Майкрософт .NET Framework 4.5 уже является частью этой операционной системы. Установка распространяемого компонента .NET Framework 4.5 не требуется.

На этом компьютере уже установлена та же или более новая версия .NET Framework 4.5.
Изменено: aist123 - 18.02.2017 20:58:59
 
Цитата
Hugo написал:
только скриншотами отстреливается
И здесь продолжает.
 
Цитата
Юрий М написал:
И здесь продолжает.
че продолжает, я не знаю какую библиотек брать, *лять((((
 
Не "че", а что. Продолжаете вместо файла показывать скрины.
За хамское поведение (#20) бан.
Тема закрыта.
Страницы: 1
Наверх