На форуме по моей просьбе был написан скрипт (точно не помню - вроде Serge_007, но могу и ошибаться). Его суть - конвертация файла Excel в HTLM (именно из 2-х колонок и получать нужный нам HTLM). Не было проблем, все работало отлично пока у нас все компы были XP. Как появились с Windows 7 - скрипт перестал на этих компах выполняться и возникала надпись: Не удается найти исполняющего ядра VBScript для сценария... а на другом: Невозможно создание объекта контейнером ActiveX... Как я понимаю все проблема только в Винде. на Windows 7 и на 8 этот скрипт не выполняется. Можно ли подправить его для выполнения и в 7 и в xp (что оптимально) или видоизменить для 7 (тогда на компах с Windows 7 установим видоизмененный скрипт) ? Спасибо. А это вообще возможно ? На 7 как не бились запустить не удалось.
На форуме по моей просьбе был написан скрипт (точно не помню - вроде Serge_007, но могу и ошибаться). Его суть - конвертация файла Excel в HTLM (именно из 2-х колонок и получать нужный нам HTLM). Не было проблем, все работало отлично пока у нас все компы были XP. Как появились с Windows 7 - скрипт перестал на этих компах выполняться и возникала надпись: Не удается найти исполняющего ядра VBScript для сценария... а на другом: Невозможно создание объекта контейнером ActiveX... Как я понимаю все проблема только в Винде. на Windows 7 и на 8 этот скрипт не выполняется. Можно ли подправить его для выполнения и в 7 и в xp (что оптимально) или видоизменить для 7 (тогда на компах с Windows 7 установим видоизмененный скрипт) ? Спасибо. А это вообще возможно ? На 7 как не бились запустить не удалось.mihail728
Похоже на мой почерк... У меня нет Вин7-8, поэтому точно не скажу, в чём беда. Нужно гуглить. А может поможет банально первое, что нашлось:
Go to Start / Control Panel / Default Programs / "Associate a file type or protocol with a specific program" , what is the file extension .vbs associated with? Mine says "Microsoft Windows Based Script Host". This is wscript.exe found in the C:\Windows\System32 folder.
Похоже на мой почерк... У меня нет Вин7-8, поэтому точно не скажу, в чём беда. Нужно гуглить. А может поможет банально первое, что нашлось:
Go to Start / Control Panel / Default Programs / "Associate a file type or protocol with a specific program" , what is the file extension .vbs associated with? Mine says "Microsoft Windows Based Script Host". This is wscript.exe found in the C:\Windows\System32 folder.
Попробовали заменить блок с открытием файла на Option Explicit
WScript.Echo "Selected file: " & ChooseFile( )
Function ChooseFile( ) ' Select File dialog based on a script by Mayayana ' Known issues: ' * Tree view always opens Desktop folder ' * In Win7/IE8 only the file NAME is returned correctly, the path returned will always be C:\fakepath\ ' * If a shortcut to a file is selected, the name of that FILE will be returned, not the shortcut's On Error Resume Next Dim objIE, strSelected ChooseFile = "" Set objIE = CreateObject( "InternetExplorer.Application" ) objIE.visible = False objIE.Navigate( "about:blank" ) Do Until objIE.ReadyState = 4 Loop objIE.Document.Write "<HTML><BODY><INPUT ID=""FileSelect"" NAME=""FileSelect"" TYPE=""file""><BODY></HTML>" With objIE.Document.all.FileSelect .focus .click strSelected = .value End With objIE.Quit Set objIE = Nothing ChooseFile = strSelected End Function
Диалог выводится, при обработке файла выдает http://clip2net.com/s/2Aqd8 Измененная версия во вложении. Помогите пожалуйста!
Попробовали заменить блок с открытием файла на Option Explicit
WScript.Echo "Selected file: " & ChooseFile( )
Function ChooseFile( ) ' Select File dialog based on a script by Mayayana ' Known issues: ' * Tree view always opens Desktop folder ' * In Win7/IE8 only the file NAME is returned correctly, the path returned will always be C:\fakepath\ ' * If a shortcut to a file is selected, the name of that FILE will be returned, not the shortcut's On Error Resume Next Dim objIE, strSelected ChooseFile = "" Set objIE = CreateObject( "InternetExplorer.Application" ) objIE.visible = False objIE.Navigate( "about:blank" ) Do Until objIE.ReadyState = 4 Loop objIE.Document.Write "<HTML><BODY><INPUT ID=""FileSelect"" NAME=""FileSelect"" TYPE=""file""><BODY></HTML>" With objIE.Document.all.FileSelect .focus .click strSelected = .value End With objIE.Quit Set objIE = Nothing ChooseFile = strSelected End Function
Значит скрипт работатет, а вся беда в диалоге выбора файла. Попробуйте приложенный файл. Правда у меня толком не работает - 90% попыток зарубает антивирус, avast script blocker
Значит скрипт работатет, а вся беда в диалоге выбора файла. Попробуйте приложенный файл. Правда у меня толком не работает - 90% попыток зарубает антивирус, avast script blocker Hugo
Точно, была там беда с этим fakepath, припоминаю (недавно уже рассматривали на форуме этот диалог). Т.е. получить имя файла таким образом можно, но без полного пути. Нет у меня возможности под семёркой эксперементировать, т.ч. я пас. Может кто другой поможет, или гугл А может быть переписать весь код как макрос, используя доступный под вин7 диалог Экселя? Работы там немного по переделке. Но я пас - и не на чем, и некогда...
Точно, была там беда с этим fakepath, припоминаю (недавно уже рассматривали на форуме этот диалог). Т.е. получить имя файла таким образом можно, но без полного пути. Нет у меня возможности под семёркой эксперементировать, т.ч. я пас. Может кто другой поможет, или гугл А может быть переписать весь код как макрос, используя доступный под вин7 диалог Экселя? Работы там немного по переделке. Но я пас - и не на чем, и некогда...Hugo
...А может быть переписать весь код как макрос, используя доступный под вин7 диалог Экселя? Работы там немного по переделке. Но я пас - и не на чем, и некогда...
Может действительно кто-нибудь из специалистов поможет каким-то методом - разумеется отблагодарим...
...А может быть переписать весь код как макрос, используя доступный под вин7 диалог Экселя? Работы там немного по переделке. Но я пас - и не на чем, и некогда...
Может действительно кто-нибудь из специалистов поможет каким-то методом - разумеется отблагодарим...mihail728
Sub parser() Dim objFSO As Object, OutStream As Object Dim wb As Object, sh As Object, iLastRow&, a, i& Dim MyPath As String, fname As String Dim SelectedItem As String 'имя файла выбранного в диалоге
'вызываем диалог выбора файла With Application.FileDialog(msoFileDialogFilePicker) .Title = "Выберите файл для обработки" 'надпись в окне диалога 'путь по умолчанию к папке /где расположен исходный файл .InitialFileName = ThisWorkbook.Path & Application.PathSeparator & "*.xls*" .AllowMultiSelect = False 'запрет выбора нескольких файлов If .Show = False Then Exit Sub SelectedItem = .SelectedItems(1) End With
Set wb = Workbooks.Open(SelectedItem) Set sh = wb.Worksheets.Item(1) MyPath = ThisWorkbook.Path & "\"
Sub parser() Dim objFSO As Object, OutStream As Object Dim wb As Object, sh As Object, iLastRow&, a, i& Dim MyPath As String, fname As String Dim SelectedItem As String 'имя файла выбранного в диалоге
'вызываем диалог выбора файла With Application.FileDialog(msoFileDialogFilePicker) .Title = "Выберите файл для обработки" 'надпись в окне диалога 'путь по умолчанию к папке /где расположен исходный файл .InitialFileName = ThisWorkbook.Path & Application.PathSeparator & "*.xls*" .AllowMultiSelect = False 'запрет выбора нескольких файлов If .Show = False Then Exit Sub SelectedItem = .SelectedItems(1) End With
Set wb = Workbooks.Open(SelectedItem) Set sh = wb.Worksheets.Item(1) MyPath = ThisWorkbook.Path & "\"
...недавно уже рассматривали на форуме этот диалог
Я так понял толкового решения не последовало. Я нашел нужный код и фильтрацию. Но он выдает синтаксическую ошибку. В Jave, к сожалению не силен. Уж, извините за ссылку на англ. форум, но там несколько интересных вариантов: Code by tom lavedas & mayayana Сам подправленный мною, но еще нерабочий код:
[vba]
Code
MsgBox FileOpen("C:\windows\notepad.exe", "GIF JPG BMP, gif jpg bmp, Text Files, txt, HTML Files, htm html, All Files, *", "Choose File")
WScript.Quit
Function FileOpen(Path, Filter, Title) Dim IE, HTA, ShAp Dim A1, sFilter, i2, s1 CreateObject("WScript.Shell").Run "MSHTA.EXE ""javascript:new ActiveXObject('InternetExplorer.Application').Put Property('ID1', window);""", 0 Set ShAp = CreateObject("Shell.Application") WScript.sleep 300 On Error Resume Next For Each IE In ShAp.Windows If IsObject(IE.GetProperty("ID1")) Then Set HTA = IE.GetProperty("ID1") IE.quit Exit For End If Next Set ShAp = Nothing
Пока единственная альтернатива, которая у меня есть - использовать 2 диалога, что не очень удобно: а. Который в объекте Shell, метод BrowseForFolder - для выбора папки,
[vba]
Code
dim objShellApp set objShellApp = CreateObject("Shell.Application") set Folder = objShellApp.BrowseForFolder(0, "SELECT FOLDER", 1, "::{20D04FE0-3AEA-1069-A2D8-08002B30309D}") thePath = Folder.Self.Path msgbox thePath set objShellApp = nothing
[/vba]
а затем еще одно окно: б. выбор файла через объект InternetExplorer, метод FileSelect.
[vba]
Code
WScript.Echo "Selected file: " & ChooseFile( )
Function ChooseFile( ) ' Select File dialog based on a script by Mayayana ' Known issues: ' * Tree view always opens Desktop folder ' * In Win7/IE8 only the file NAME is returned correctly, the path returned will always be C:\fakepath\ ' * If a shortcut to a file is selected, the name of that FILE will be returned, not the shortcut's On Error Resume Next Dim objIE, strSelected ChooseFile = "" Set objIE = CreateObject( "InternetExplorer.Application" ) objIE.visible = False objIE.Navigate( "about:blank" ) Do Until objIE.ReadyState = 4 Loop objIE.Document.Write "<HTML><BODY><INPUT ID=""FileSelect"" NAME=""FileSelect"" TYPE=""file""><BODY></HTML>" With objIE.Document.all.FileSelect .focus .click strSelected = .value End With objIE.Quit Set objIE = Nothing ChooseFile = strSelected End Function
[/vba]
...недавно уже рассматривали на форуме этот диалог
Я так понял толкового решения не последовало. Я нашел нужный код и фильтрацию. Но он выдает синтаксическую ошибку. В Jave, к сожалению не силен. Уж, извините за ссылку на англ. форум, но там несколько интересных вариантов: Code by tom lavedas & mayayana Сам подправленный мною, но еще нерабочий код:
[vba]
Code
MsgBox FileOpen("C:\windows\notepad.exe", "GIF JPG BMP, gif jpg bmp, Text Files, txt, HTML Files, htm html, All Files, *", "Choose File")
WScript.Quit
Function FileOpen(Path, Filter, Title) Dim IE, HTA, ShAp Dim A1, sFilter, i2, s1 CreateObject("WScript.Shell").Run "MSHTA.EXE ""javascript:new ActiveXObject('InternetExplorer.Application').Put Property('ID1', window);""", 0 Set ShAp = CreateObject("Shell.Application") WScript.sleep 300 On Error Resume Next For Each IE In ShAp.Windows If IsObject(IE.GetProperty("ID1")) Then Set HTA = IE.GetProperty("ID1") IE.quit Exit For End If Next Set ShAp = Nothing
Пока единственная альтернатива, которая у меня есть - использовать 2 диалога, что не очень удобно: а. Который в объекте Shell, метод BrowseForFolder - для выбора папки,
[vba]
Code
dim objShellApp set objShellApp = CreateObject("Shell.Application") set Folder = objShellApp.BrowseForFolder(0, "SELECT FOLDER", 1, "::{20D04FE0-3AEA-1069-A2D8-08002B30309D}") thePath = Folder.Self.Path msgbox thePath set objShellApp = nothing
[/vba]
а затем еще одно окно: б. выбор файла через объект InternetExplorer, метод FileSelect.
[vba]
Code
WScript.Echo "Selected file: " & ChooseFile( )
Function ChooseFile( ) ' Select File dialog based on a script by Mayayana ' Known issues: ' * Tree view always opens Desktop folder ' * In Win7/IE8 only the file NAME is returned correctly, the path returned will always be C:\fakepath\ ' * If a shortcut to a file is selected, the name of that FILE will be returned, not the shortcut's On Error Resume Next Dim objIE, strSelected ChooseFile = "" Set objIE = CreateObject( "InternetExplorer.Application" ) objIE.visible = False objIE.Navigate( "about:blank" ) Do Until objIE.ReadyState = 4 Loop objIE.Document.Write "<HTML><BODY><INPUT ID=""FileSelect"" NAME=""FileSelect"" TYPE=""file""><BODY></HTML>" With objIE.Document.all.FileSelect .focus .click strSelected = .value End With objIE.Quit Set objIE = Nothing ChooseFile = strSelected End Function