Я пытаюсь импортировать файл CSV в MS Excel (2016) с использованием кода VBA. Манипулирование импортом до сих пор не работало, Excel использует системный разделитель Windows каждый раз, когда я пытаюсь установить импорт VBA.
Итак, я решил использовать VBScript, чтобы сначала изменить системный разделитель с «запятой» на «Tab», импортировать файл CSV, а затем установить системный разделитель обратно на «запятую».
Наличие VBScript в качестве отдельного файла и его запуск:
Shell "wscript D:\Hutsul\ChangeDelimiter.vbs", vbNormalFocus
Работает, но VBA должен работать на других машинах, и для простоты использования я хотел попробовать встроить код VBScript в среду Excel VBA.
Код, который я написал, останавливается на Set scr = New ScriptControl
и выдает:
Ошибка времени выполнения '429': компонент ActiveX не может создать объект
Попробовал set scr = CreateObject("MSScriptControl.ScriptControl")
не помогло.
Кроме того, вот фрагмент моих ссылок на VBAP-проект:
- Visual Basic для приложений
- Библиотека объектов Microsoft Excel 16.0
- OLE Automation
- Библиотека объектов Microsoft Office 16.0
- Объекты данных Microsoft ActiveX 6.1. Библиотека
- Библиотека объектов Microsoft HTML
- Microsoft Scripting Runtime
- Регулярные выражения Microsoft VBScript 5.5
- Microsoft Script Control 1.0
- Библиотека скриптов Microsoft
Ниже приведен мой код VBA для встроенного сценария (отдельный файл сценария содержит только то, что находится в scriptCode
строках:
'Execute VBScript directly from VBA to change system delimiter from COMMA to TAB
Dim scriptCode As String
Dim scr As ScriptControl: Set scr = New ScriptControl
scriptCode = ""
scriptCode = scriptCode & "Set sh = CreateObject(""WScript.Shell"")"
scriptCode = scriptCode & "Path = ""HKCU\Control Panel\International\sList"""
scriptCode = scriptCode & "Set Separator = CreateObject(""Scripting.Dictionary"")"
scriptCode = scriptCode & "Separator.Add True, ""\t"""
scriptCode = scriptCode & "Separator.Add False, "","""
scriptCode = scriptCode & "sh.RegWrite Path, Separator(sh.RegRead(Path) = "",""), ""REG_SZ"""
scr.Language = "VBScript"
scr.AddCode scriptCode
scr.Run scriptCode
Кроме того, когда сам скрипт выполняется (как отдельный файл .vbs на данный момент) несколько раз , он переключает разделитель вместо простой установки с «запятой» на « Tab и сохраняя его таким образом, так что если разделитель уже «Tab» и я снова запускаю скрипт, разделитель снова становится «запятой».
Любая помощь очень ценится, спасибо!