Я болею за простоту. И большинство (если не все) ваши проблемы, похоже, происходят от , а не , что делает его простым. У вас слишком много движущихся частей, слишком много уровней косвенности. Вы можете попытаться решить эту проблему, взглянув на нее, и вы можете попытаться упростить свой подход.
Все, что вы делаете - создаете строку HTML, записываете ее в файл, копируете папки - можно достигнуто в коде VBA. Я не вижу ничего, что потребовало бы PowerShell.
Для операций с файловой системой Scripting.FileSystemObject
очень удобно, и его использует следующий код. Давайте сделаем это доступным путем обращения к библиотеке «Microsoft Scripting Runtime» через меню «Инструменты» → «Ссылки» в VBA IDE.
Теперь у нас есть две базовые c операции, создающие HTML из исходного документа и записи данного текста в файл.
Dim FSO As New Scripting.FileSystemObject
Function CreateHtml(sourceDoc As Document) As String
' Creates HTML from the tables of the given document.
Dim html As String, text As String
' ... build html from sourceDoc
html = html & text
CreateHtml = html
End Function
Sub WriteTextToFile(content As String, path As String, Optional fileName As String)
' Writes a string to a Unicode file. Target will be overwritten if it exists.
Dim targetPath As String
If fileName > "" Then
targetPath = FSO.BuildPath(path, fileName)
Else
targetPath = path
End If
With FSO.CreateTextFile(fileName:=targetPath, overwrite:=True, unicode:=True)
.Write content
End With
End Sub
И теперь мы можем объединить те в подпункте, который я назвал HtmlWorkflow
, из-за отсутствия лучшего имени:
Sub HtmlWorkflow()
Dim stringSplits As Variant, html as String
stringSplits = Split("something", "delimiter")
html = CreateHtml(sourceDoc:=ActiveDocument)
WriteTextToFile _
content:=html, _
path:="Q:\OIT\Web Sites\This Site\Regulatory\Docketbk\" & stringSplits(1), _
fileName:=FSO.GetBaseName(ActiveDocument.Name) & ".html" _
FSO.CopyFolder _
Source:="Q:\whatever\your\source\folder\path\is", _
Destination:="\\whatever\your\destination\folder\path\is"
End Sub
Примечания:
- Я использую именованные параметры в своих вызовах функций - это может сохранить некоторые временные переменные и делает вещи в основном самодокументируемыми.
_
в конце строки - символ продолжения строки VB. Его использование облегчает чтение длинных строк кода. - Разделение элементов на отдельные функции упрощает отладку и тестирование (теперь вы можете вызывать
CreateHtml()
для любого открытого документа, независимо от того, активен он или нет. нет), и его легко использовать повторно (WriteTextToFile
не имеет значения, какой файл или какой контент). - Документация для
FileSystemObject
находится здесь: https://docs.microsoft.com/en-us/office/vba/language/reference/objects-visual-basic-for-applications