Ошибка при экспорте мастера OrgChart в Visio через VBA

Я пытаюсь использовать Мастер OrgChart для экспорта чертежа Visio из Visual Studio через VBA.

Сначала мы настраиваем параметры конфигурации страницы, используя:

'/PAGES=<top employee> <num levels> PAGENAME=<pagename>,<top employee> <num levels> PAGENAME=<pagename>...
 strPageConfig = " /PAGES=" & ListBox1.SelectedItem & " " & lvlNum & " PAGENAME=cleanedData"

Затем мы сохраняем файл Excel в надежном файле с именем visExcelFile. Затем мы создали OrgChart Wizard:

visApp = CreateObject("Visio.Application")
visApp.visible = False
objAddOn = visApp.Addons.ItemU("OrgCWiz")
objAddOn.Run("/S-INIT")

Добавьте Аргументы Org Chart и запустите Мастер:

orgWizArgs = " /FILENAME=" & visExcelFile & " /NAME-FIELD=Name" &
        " /MANAGER-FIELD=Reports_To" & strPageConfig &
        "/DISPLAY-FIELDS=Name, Title /SYNC-ACROSS-PAGES /HYPERLINK-ACROSS-PAGES"

objAddOn.Run("/S-ARGSTR " + orgWizArgs)
objAddOn.Run("/S-RUN")
visApp.visible = True

Ошибка происходит от строки, где мы устанавливаем strPageConfig, особенно когда имя читается из ListBox1. Когда в значении есть пробелы, я получу всплывающее окно для каждого слова (2 или 3, потому что они являются именами) с указанием:

Employee name "Smith" is not in your organization data.
Employee name "John" is not in your organization data.

Что я пропустил или забыл, что вызывает пробелы, чтобы вызвать эту ошибку?

Обходной путь, который вызывает другую проблему, заключается в том, что когда мы загружаем имена сотрудников в ListBox1, мы заменяем пробелы на _, но эти подчеркивания отображаются на чертеже, что нам не нужно.

Итак, мой вопрос: как я могу запустить OrgChart Wizard из VBA с данными, которые содержат пробелы? или: Как я могу войти в эти объекты через VBA и редактировать текстовые поля ShapeData?

Я видел похожие вопросы, размещенные на других сайтах, но без ответа. Я также использую Visio 2013

1 ответ

Решение

Вам нужно процитировать ваши строки, так:

Public Function QuoteString(str as String) as String

    Dim quotechar as String
    quotechar = Chr(34)

    QuoteString = quotechar & str & quotechar

End Function


strPageConfig = " /PAGES=" & QuoteString(ListBox1.SelectedItem) & " " & lvlNum & " PAGENAME=cleanedData"
Другие вопросы по тегам