Function Phone(str$) With CreateObject("VBScript.RegExp") .Pattern = "(((\+7|8)(|-| )?)?((\(|-| )?\d{3}(\)|-| )?){2})?((-| )?\d{2}){2,3}" Phone = IIf(.Test(str), Trim(.Execute(str)(0)), "") End With End Function
[/vba]
еще вариант с UDF [vba]
Код
Function Phone(str$) With CreateObject("VBScript.RegExp") .Pattern = "(((\+7|8)(|-| )?)?((\(|-| )?\d{3}(\)|-| )?){2})?((-| )?\d{2}){2,3}" Phone = IIf(.Test(str), Trim(.Execute(str)(0)), "") End With End Function
как вариант, макрофункция для работы нужно создать именованные диапазоны нужно выделить листы с пунктами, выделил ячейку A1, нажать Ctrl+Shift+F3 (Формулы->Определенные имена->Создать из выделенного), нажать ОК (галочка должна быть на "в столбце слева") сам код макрофункции находится на скрытом листе Макрос1
как вариант, макрофункция для работы нужно создать именованные диапазоны нужно выделить листы с пунктами, выделил ячейку A1, нажать Ctrl+Shift+F3 (Формулы->Определенные имена->Создать из выделенного), нажать ОК (галочка должна быть на "в столбце слева") сам код макрофункции находится на скрытом листе Макрос1krosav4ig
Spartan77, как считать повторяющиеся артикулы (например 34356778037, 34356792571,34356789502 на 1 листе), у которых стоят разные значения в столбцах D и E?
Spartan77, как считать повторяющиеся артикулы (например 34356778037, 34356792571,34356789502 на 1 листе), у которых стоят разные значения в столбцах D и E?krosav4ig
Spartan77, держите два еще варианта 01 - считается ежедневный приход/расход по первым трем столбцам 02 - считается ежедневный приход/расход по первым четырем столбцам
upd. Заменил файлы, ошибочка была
upd. еще раз заменил файлы, не весь приход считался, сейчас должно быть правильно
[p.s.]для корректной работы все исходные данные должны быть строго типизированы т.е. в одном столбце должны быть значения одного типа данных в исходном файле значения в столбцах были вперемешку (число и число, записанное текстом) в столбце с ценой я заменил пробел и неразрывный пробел на пустоту и преобразовал во всех столбцах все числа записанные текстом в число как преобразовать число, записанное текстом в число
Spartan77, держите два еще варианта 01 - считается ежедневный приход/расход по первым трем столбцам 02 - считается ежедневный приход/расход по первым четырем столбцам
upd. Заменил файлы, ошибочка была
upd. еще раз заменил файлы, не весь приход считался, сейчас должно быть правильно
[p.s.]для корректной работы все исходные данные должны быть строго типизированы т.е. в одном столбце должны быть значения одного типа данных в исходном файле значения в столбцах были вперемешку (число и число, записанное текстом) в столбце с ценой я заменил пробел и неразрывный пробел на пустоту и преобразовал во всех столбцах все числа записанные текстом в число как преобразовать число, записанное текстом в числоkrosav4ig
Function Phone(str$) With CreateObject("VBScript.RegExp") .Global = True .Pattern = "(((\+7|8)(|-| )?)?((\(|-| )?\d{3}(\)|-| )?){2}((-| )?\d{2}){2})|\d{2}((-| )?\d{2}){2}" If .Test(str) Then Dim Item As Object For Each Item In .Execute(str) Phone = Phone & IIf(Phone > "", vbLf, "") & Trim(Item) Next End If End With End Function
[/vba]
поправочка... [vba]
Код
Function Phone(str$) With CreateObject("VBScript.RegExp") .Global = True .Pattern = "(((\+7|8)(|-| )?)?((\(|-| )?\d{3}(\)|-| )?){2}((-| )?\d{2}){2})|\d{2}((-| )?\d{2}){2}" If .Test(str) Then Dim Item As Object For Each Item In .Execute(str) Phone = Phone & IIf(Phone > "", vbLf, "") & Trim(Item) Next End If End With End Function
раз все-таки тема в разделе Вопросы по Excel, предложу формульный вариант (только для небольшого количества исходных данных, ибо формула массивная и вычисляется медленно) в файле из 4 поста добавил сверху пустую строку, в F1 число 2 (кол-во повторов), ниже формула
раз все-таки тема в разделе Вопросы по Excel, предложу формульный вариант (только для небольшого количества исходных данных, ибо формула массивная и вычисляется медленно) в файле из 4 поста добавил сверху пустую строку, в F1 число 2 (кол-во повторов), ниже формула
Private Sub Workbook_Open() Application.ScreenUpdating = 0 Sheets("Лист").Activate With [C4:M4].Resize(Application.CountA([B:B]) - 1) .EntireRow.Hidden = True .SpecialCells(2, 23).EntireRow.Select With .Offset(, -2).Find(Date) Union(Selection, .Resize(3)).EntireRow.Hidden = False Application.Goto .Cells, True End With End With Application.ScreenUpdating = 1 End Sub
[/vba]
еще пара вариантов 1 без макросов, фильтром по доп столбцу (O:O) с формулой
Private Sub Workbook_Open() Application.ScreenUpdating = 0 Sheets("Лист").Activate With [C4:M4].Resize(Application.CountA([B:B]) - 1) .EntireRow.Hidden = True .SpecialCells(2, 23).EntireRow.Select With .Offset(, -2).Find(Date) Union(Selection, .Resize(3)).EntireRow.Hidden = False Application.Goto .Cells, True End With End With Application.ScreenUpdating = 1 End Sub
rosko, по первому вопросу из 1 поста: зачем pdf, если у минфина есть опендата 7710168360-BanksID? в файле сделал несколько вариантов получения списка банков + на основе кода doober сделал еще 1 вариант получения закупок, если при первом запросе (выбор из справочника) возвращается >1 значения, выпадает форма для выбора нужного, выбор двойным тыком на форме контрол MSFlexgird, если у вас он не установлен, работать не будет, в архиве msflxgrd_ocx.zip нужные файлы, копируем в system32 (если x64 - в syswow64) и запускаем install_msflxgrd
rosko, по первому вопросу из 1 поста: зачем pdf, если у минфина есть опендата 7710168360-BanksID? в файле сделал несколько вариантов получения списка банков + на основе кода doober сделал еще 1 вариант получения закупок, если при первом запросе (выбор из справочника) возвращается >1 значения, выпадает форма для выбора нужного, выбор двойным тыком на форме контрол MSFlexgird, если у вас он не установлен, работать не будет, в архиве msflxgrd_ocx.zip нужные файлы, копируем в system32 (если x64 - в syswow64) и запускаем install_msflxgrdkrosav4ig
Sub banksID_JSON_REGEX() With CreateObject("msxml2.xmlhttp") .Open "get", "http://skad.minfin.ru:8081/OpenDataAPI/api/json/dataset/7710168360-BanksID/version/0/content", 0 .send Dim s$: s = .responsetext End With With CreateObject("VBScript.RegExp") .Global = True .Pattern = "([^\\])""+|\\": s = .Replace(s, "$1") .Pattern = ",?f\d:": s = .Replace(s, Chr(9) & "@") .Pattern = "\[\{|},{|\}\]": s = .Replace(s, vbLf) .Pattern = "([\n\r])+\t?|": s = .Replace(s, "$1") .Pattern = "(\d{4}-\d{2}-\d{2})T(\d{2})": s = .Replace(s, "$1 $2") End With With CreateObject("new:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}") .SetText Mid(s, 2, Len(s) - 2): .PutInClipboard End With Application.ScreenUpdating = 0: Application.EnableEvents = 0 With Sheets("Json+RegEx").ListObjects(1) If Not .DataBodyRange Is Nothing Then .DataBodyRange.Delete .Parent.Activate: .HeaderRowRange(2, 1).Activate .Parent.PasteSpecial Format:="Текст" .HeaderRowRange = Array("ikb", "name", "ikbstatus", "statusdate") .DataBodyRange.Replace "@", Empty, xlPart End With Application.ScreenUpdating = 1: Application.EnableEvents = 1 End Sub Sub banksID_JSON_SC() Dim s$ With CreateObject("msxml2.xmlhttp") .Open "get", "http://skad.minfin.ru:8081/OpenDataAPI/api/json/dataset/7710168360-BanksID/version/0/content", 0 .send s = .responsetext End With With CreateObject("ScriptControl") .Language = "JScript" .AddCode "function getSentenceCount(){return obj.length;}" .AddCode "function getSentence(i){return obj[i];}" .Eval "var obj=(" & s & ")" Dim n&: n = .Run("getSentenceCount") - 1 Dim i& Dim arr ReDim arr(0 To n, 0 To 3) For i = 0 To n With .Run("getSentence", i) arr(i, 0) = .f1: arr(i, 1) = .f2 arr(i, 2) = .f3: arr(i, 3) = Replace(.f4, "T", " ") End With Next i End With Application.ScreenUpdating = 0: Application.EnableEvents = 0 With Sheets("Json+ScriptControl").ListObjects(1) If Not .DataBodyRange Is Nothing Then .DataBodyRange.Delete .HeaderRowRange(2, 1).Resize(n + 1, 4).Value = arr End With Application.ScreenUpdating = 1: Application.EnableEvents = 1 End Sub Sub banksID_xml() With Sheets("xml") .QueryTables(1).Refresh 0 .Parent.XmlMaps("Banks_карта").Import URL:=.[G16] End With End Sub Sub banksID_Web() Application.EnableEvents = 0 Sheets("Web").QueryTables(1).Refresh 0 Application.EnableEvents = 1 End Sub Sub banksID_JSON_PQ() ThisWorkbook.Connections("Power Query - Запрос1").Refresh End Sub
[/vba]
[vba]
Код
Public FG As MSFlexGridLib.MSFlexGrid, n&, r& Dim bank$, sc As Object, oXMLHTTP As Object Sub init() Set oXMLHTTP = CreateObject("MSXML2.XMLHTTP") Set sc = CreateObject("ScriptControl") With sc .Language = "JScript" .AddCode "function getSentenceCount(){return obj.result.length;}" .AddCode "function getSentence(i){return obj.result[i];}" .AddCode "function encode(str) {return encodeURIComponent(str);}" End With End Sub Function RussianStringToURLEncode(ByVal bank_name As String) As String RussianStringToURLEncode = sc.Run("encode", bank_name) End Function Function GetHTTPResponse(ByVal sURL As String) As String On Error Resume Next With oXMLHTTP .Open "GET", sURL, False .send GetHTTPResponse = .responsetext End With End Function Function Readjson(s) As String Dim URL As String, itm As Object, k&, str$ ',name With sc .Eval "var obj=(" & s & ")" n = .Run("getSentenceCount") If n > 1 Then UserForm1.Hide FG.TextMatrix(0, 0) = bank Do FG.TextMatrix(k + 1, 0) = .Run("getSentence", k).name k = k + 1 Loop While k < n UserForm1.Show Set FG = Nothing End If If n Then With .Run("getSentence", r) URL = "http://zakupki.gov.ru/epz/bankguarantee/extendedsearch/search.html?bankSearchItem.title=" & _ RussianStringToURLEncode(.name) & "&bankSearchItem.code=" & .cpz & "&bankSearchItem.fz94id=" _ & .fz94id & "&bankSearchItem.fz223id=" & .fz223id End With End If End With Readjson = URL End Function Function zakupki(банк As String) Application.Volatile 0 Dim json As String, URL As String bank = банк Call init With CreateObject("VBScript.RegExp") .Global = True .Pattern = "[^\""]*\""(.*)\""[^\""]*" банк = RussianStringToURLEncode(IIf(.test(банк), .Replace(банк, "$1"), банк)) End With json = GetHTTPResponse("http://zakupki.gov.ru/epz/organization/chooseOrganization/autocompleteReturnsCodes.html?term=" & банк & "&placeOfSearch=&organizationType=BANKS") URL = Readjson(json) zakupki = Readtotal(GetHTTPResponse(URL)) Set oXMLHTTP = Nothing Set sc = Nothing End Function Function Readtotal(ByVal s As String) As Integer Dim arr If Len(s) Then With CreateObject("htmlfile") .write Replace(s, "class", "id") arr = Split(Replace(Replace(.getElementByid("allRecords").innerhtml, "<", " "), "-", " "), " ") With Application Readtotal = .Max(.IfError(.Round(arr, 0), 0)) End With End With End If End Function
[/vba]
[vba]
Код
Sub banksID_JSON_REGEX() With CreateObject("msxml2.xmlhttp") .Open "get", "http://skad.minfin.ru:8081/OpenDataAPI/api/json/dataset/7710168360-BanksID/version/0/content", 0 .send Dim s$: s = .responsetext End With With CreateObject("VBScript.RegExp") .Global = True .Pattern = "([^\\])""+|\\": s = .Replace(s, "$1") .Pattern = ",?f\d:": s = .Replace(s, Chr(9) & "@") .Pattern = "\[\{|},{|\}\]": s = .Replace(s, vbLf) .Pattern = "([\n\r])+\t?|": s = .Replace(s, "$1") .Pattern = "(\d{4}-\d{2}-\d{2})T(\d{2})": s = .Replace(s, "$1 $2") End With With CreateObject("new:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}") .SetText Mid(s, 2, Len(s) - 2): .PutInClipboard End With Application.ScreenUpdating = 0: Application.EnableEvents = 0 With Sheets("Json+RegEx").ListObjects(1) If Not .DataBodyRange Is Nothing Then .DataBodyRange.Delete .Parent.Activate: .HeaderRowRange(2, 1).Activate .Parent.PasteSpecial Format:="Текст" .HeaderRowRange = Array("ikb", "name", "ikbstatus", "statusdate") .DataBodyRange.Replace "@", Empty, xlPart End With Application.ScreenUpdating = 1: Application.EnableEvents = 1 End Sub Sub banksID_JSON_SC() Dim s$ With CreateObject("msxml2.xmlhttp") .Open "get", "http://skad.minfin.ru:8081/OpenDataAPI/api/json/dataset/7710168360-BanksID/version/0/content", 0 .send s = .responsetext End With With CreateObject("ScriptControl") .Language = "JScript" .AddCode "function getSentenceCount(){return obj.length;}" .AddCode "function getSentence(i){return obj[i];}" .Eval "var obj=(" & s & ")" Dim n&: n = .Run("getSentenceCount") - 1 Dim i& Dim arr ReDim arr(0 To n, 0 To 3) For i = 0 To n With .Run("getSentence", i) arr(i, 0) = .f1: arr(i, 1) = .f2 arr(i, 2) = .f3: arr(i, 3) = Replace(.f4, "T", " ") End With Next i End With Application.ScreenUpdating = 0: Application.EnableEvents = 0 With Sheets("Json+ScriptControl").ListObjects(1) If Not .DataBodyRange Is Nothing Then .DataBodyRange.Delete .HeaderRowRange(2, 1).Resize(n + 1, 4).Value = arr End With Application.ScreenUpdating = 1: Application.EnableEvents = 1 End Sub Sub banksID_xml() With Sheets("xml") .QueryTables(1).Refresh 0 .Parent.XmlMaps("Banks_карта").Import URL:=.[G16] End With End Sub Sub banksID_Web() Application.EnableEvents = 0 Sheets("Web").QueryTables(1).Refresh 0 Application.EnableEvents = 1 End Sub Sub banksID_JSON_PQ() ThisWorkbook.Connections("Power Query - Запрос1").Refresh End Sub
[/vba]
[vba]
Код
Public FG As MSFlexGridLib.MSFlexGrid, n&, r& Dim bank$, sc As Object, oXMLHTTP As Object Sub init() Set oXMLHTTP = CreateObject("MSXML2.XMLHTTP") Set sc = CreateObject("ScriptControl") With sc .Language = "JScript" .AddCode "function getSentenceCount(){return obj.result.length;}" .AddCode "function getSentence(i){return obj.result[i];}" .AddCode "function encode(str) {return encodeURIComponent(str);}" End With End Sub Function RussianStringToURLEncode(ByVal bank_name As String) As String RussianStringToURLEncode = sc.Run("encode", bank_name) End Function Function GetHTTPResponse(ByVal sURL As String) As String On Error Resume Next With oXMLHTTP .Open "GET", sURL, False .send GetHTTPResponse = .responsetext End With End Function Function Readjson(s) As String Dim URL As String, itm As Object, k&, str$ ',name With sc .Eval "var obj=(" & s & ")" n = .Run("getSentenceCount") If n > 1 Then UserForm1.Hide FG.TextMatrix(0, 0) = bank Do FG.TextMatrix(k + 1, 0) = .Run("getSentence", k).name k = k + 1 Loop While k < n UserForm1.Show Set FG = Nothing End If If n Then With .Run("getSentence", r) URL = "http://zakupki.gov.ru/epz/bankguarantee/extendedsearch/search.html?bankSearchItem.title=" & _ RussianStringToURLEncode(.name) & "&bankSearchItem.code=" & .cpz & "&bankSearchItem.fz94id=" _ & .fz94id & "&bankSearchItem.fz223id=" & .fz223id End With End If End With Readjson = URL End Function Function zakupki(банк As String) Application.Volatile 0 Dim json As String, URL As String bank = банк Call init With CreateObject("VBScript.RegExp") .Global = True .Pattern = "[^\""]*\""(.*)\""[^\""]*" банк = RussianStringToURLEncode(IIf(.test(банк), .Replace(банк, "$1"), банк)) End With json = GetHTTPResponse("http://zakupki.gov.ru/epz/organization/chooseOrganization/autocompleteReturnsCodes.html?term=" & банк & "&placeOfSearch=&organizationType=BANKS") URL = Readjson(json) zakupki = Readtotal(GetHTTPResponse(URL)) Set oXMLHTTP = Nothing Set sc = Nothing End Function Function Readtotal(ByVal s As String) As Integer Dim arr If Len(s) Then With CreateObject("htmlfile") .write Replace(s, "class", "id") arr = Split(Replace(Replace(.getElementByid("allRecords").innerhtml, "<", " "), "-", " "), " ") With Application Readtotal = .Max(.IfError(.Round(arr, 0), 0)) End With End With End If End Function
Function LastDateInText(Text As String) As Date Dim s$ With CreateObject("VBScript.RegExp") .Pattern = ".*(\d\d)\.(\d\d)\.(\d{4})( \(([\d:]{5}))?[^\d]?|[\s\S]+" .Global = True: .MultiLine = True Set f = .Execute(Text) s = "--{" & .Replace(Text, """$2-$1-$3 $5""" & ",") & "0}" End With With Application LastDateInText = .Max(.IfError(Evaluate(.Trim(s)), 0)) End With End Function
Function LastDateInText(Text As String) As Date Dim s$ With CreateObject("VBScript.RegExp") .Pattern = ".*(\d\d)\.(\d\d)\.(\d{4})( \(([\d:]{5}))?[^\d]?|[\s\S]+" .Global = True: .MultiLine = True Set f = .Execute(Text) s = "--{" & .Replace(Text, """$2-$1-$3 $5""" & ",") & "0}" End With With Application LastDateInText = .Max(.IfError(Evaluate(.Trim(s)), 0)) End With End Function
[/vba] +числовой формат и условное форматированиеkrosav4ig
rosko, совсем из головы вылетело, вот так должно быть, и забыл сказать, что после установки нужно перезапустить excel [vba]
Код
#If Win64 Then Private Const d$ = "%windir%\syswow64\" Private Const b$ = "wow6432node\Microsoft" #Else Private Const d$ = "%windir%\system32\" Private Const b$ = "Microsoft" #End If Sub install_msflxgrd() With CreateObject("WScript.Shell") .RegWrite "HKLM\SOFTWARE\" & b$ & "\Internet Explorer\ActiveX Compatibility\{6262D3A0-531B-11CF-91F6-C2863C385E30}\Compatibility Flags", 0, "REG_DWORD" .RegWrite "HKCR\Licenses\72E67120-5959-11cf-91F6-C2863C385E30\", "ibcbbbebqbdbciebmcobmbhifcmciibblgmf", "REG_SZ" .Run "regsvr32 /s " & d & "msflxgrd.ocx " & d & "msstkprp.dll" End With End Sub
[/vba] если разрядность ОС отличается от разрядности Excel, то можно [vba]
Код
Sub install_msflxgrd() Dim d$, b$ If Len(Environ("ProgramW6432")) > 0 Then d = "%windir%\syswow64\" b = "wow6432node\Microsoft" Else d = "%windir%\system32\" b = "Microsoft" End If With CreateObject("WScript.Shell") .RegWrite "HKLM\SOFTWARE\" & b$ & "\Internet Explorer\ActiveX Compatibility\{6262D3A0-531B-11CF-91F6-C2863C385E30}\Compatibility Flags", 0, "REG_DWORD" .RegWrite "HKCR\Licenses\72E67120-5959-11cf-91F6-C2863C385E30\", "ibcbbbebqbdbciebmcobmbhifcmciibblgmf", "REG_SZ" .Run "regsvr32 /s " & d & "msflxgrd.ocx " & d & "msstkprp.dll" End With End Sub
[/vba][p.s.]если включен UAC, то excel должен быть запущен с правами администратора
rosko, совсем из головы вылетело, вот так должно быть, и забыл сказать, что после установки нужно перезапустить excel [vba]
Код
#If Win64 Then Private Const d$ = "%windir%\syswow64\" Private Const b$ = "wow6432node\Microsoft" #Else Private Const d$ = "%windir%\system32\" Private Const b$ = "Microsoft" #End If Sub install_msflxgrd() With CreateObject("WScript.Shell") .RegWrite "HKLM\SOFTWARE\" & b$ & "\Internet Explorer\ActiveX Compatibility\{6262D3A0-531B-11CF-91F6-C2863C385E30}\Compatibility Flags", 0, "REG_DWORD" .RegWrite "HKCR\Licenses\72E67120-5959-11cf-91F6-C2863C385E30\", "ibcbbbebqbdbciebmcobmbhifcmciibblgmf", "REG_SZ" .Run "regsvr32 /s " & d & "msflxgrd.ocx " & d & "msstkprp.dll" End With End Sub
[/vba] если разрядность ОС отличается от разрядности Excel, то можно [vba]
Код
Sub install_msflxgrd() Dim d$, b$ If Len(Environ("ProgramW6432")) > 0 Then d = "%windir%\syswow64\" b = "wow6432node\Microsoft" Else d = "%windir%\system32\" b = "Microsoft" End If With CreateObject("WScript.Shell") .RegWrite "HKLM\SOFTWARE\" & b$ & "\Internet Explorer\ActiveX Compatibility\{6262D3A0-531B-11CF-91F6-C2863C385E30}\Compatibility Flags", 0, "REG_DWORD" .RegWrite "HKCR\Licenses\72E67120-5959-11cf-91F6-C2863C385E30\", "ibcbbbebqbdbciebmcobmbhifcmciibblgmf", "REG_SZ" .Run "regsvr32 /s " & d & "msflxgrd.ocx " & d & "msstkprp.dll" End With End Sub
[/vba][p.s.]если включен UAC, то excel должен быть запущен с правами администратораkrosav4ig
rosko, видимо у вас ограниченная учетная запись, попробуйте так [vba]
Код
#If VBA7 Then Private Declare PtrSafe Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" ( _ ByVal hWnd As LongPtr, _ ByVal lpOperation As String, _ ByVal lpFile As String, _ ByVal lpParameters As String, _ ByVal lpDirectory As String, _ ByVal nShowCmd As Long _ ) As LongPtr #Else Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" ( _ ByVal hWnd As Long, _ ByVal lpOperation As String, _ ByVal lpFile As String, _ ByVal lpParameters As String, _ ByVal lpDirectory As String, _ ByVal nShowCmd As Long _ ) As Long #End If
Public Sub install_msflxgrd() Dim d$, b$ If Len(Environ("ProgramW6432")) > 0 Then d = "%windir%\syswow64\" b = "wow6432node\Microsoft" Else d = "%windir%\system32\" b = "Microsoft" End If ShellExecute 0, "runas", "cmd.exe", "/c " & _ "REG ADD ""HKLM\SOFTWARE\" & b & "\Internet Explorer\ActiveX Compatibility\{6262D3A0-531B-11CF-91F6-C2863C385E30}\Compatibility Flags"" /f /t REG_SZ /d 0&&" & _ "REG ADD ""HKCR\Licenses\72E67120-5959-11cf-91F6-C2863C385E30"" /f /t REG_SZ /d ibcbbbebqbdbciebmcobmbhifcmciibblgmf&&" & _ "regsvr32 /s " & d & "msflxgrd.ocx " & d & "msstkprp.dll", "", 0 End Sub
[/vba]
rosko, видимо у вас ограниченная учетная запись, попробуйте так [vba]
Код
#If VBA7 Then Private Declare PtrSafe Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" ( _ ByVal hWnd As LongPtr, _ ByVal lpOperation As String, _ ByVal lpFile As String, _ ByVal lpParameters As String, _ ByVal lpDirectory As String, _ ByVal nShowCmd As Long _ ) As LongPtr #Else Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" ( _ ByVal hWnd As Long, _ ByVal lpOperation As String, _ ByVal lpFile As String, _ ByVal lpParameters As String, _ ByVal lpDirectory As String, _ ByVal nShowCmd As Long _ ) As Long #End If
Public Sub install_msflxgrd() Dim d$, b$ If Len(Environ("ProgramW6432")) > 0 Then d = "%windir%\syswow64\" b = "wow6432node\Microsoft" Else d = "%windir%\system32\" b = "Microsoft" End If ShellExecute 0, "runas", "cmd.exe", "/c " & _ "REG ADD ""HKLM\SOFTWARE\" & b & "\Internet Explorer\ActiveX Compatibility\{6262D3A0-531B-11CF-91F6-C2863C385E30}\Compatibility Flags"" /f /t REG_SZ /d 0&&" & _ "REG ADD ""HKCR\Licenses\72E67120-5959-11cf-91F6-C2863C385E30"" /f /t REG_SZ /d ibcbbbebqbdbciebmcobmbhifcmciibblgmf&&" & _ "regsvr32 /s " & d & "msflxgrd.ocx " & d & "msstkprp.dll", "", 0 End Sub