Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
Проблема с работой объекта word.application в новом 2016 офисе
 
Добрый день, столкнулся со следующей проблемой в 2016 офисе.

Есть макрос, выполняющий роль заполнялки документов по шаблону. Выполняется макрос из excel файлика, среди шаблонов есть Word документы, соответсвенно приходится в самом макросе оперировать с этими word объектами через Word.Application. Макрос корректно работал на версии офиса 2010 и младше. Сейчас установили 2016 офис и возникла проблема - при выполнении одной из строк кода возникает ошибка
Код
Run-Time Error 4605
Данная команда недоступна

Начальная инициализация
Код
Dim WordApp As Object

Set WordApp = CreateObject("Word.Application")
With WordApp
        .Visible = False
        .WindowState = wdWindowStateNormal
        .ScreenUpdating = False
End With
Проблемная функция
Код
Private Sub WordReplacement(word_selection As String, _
                            replacement_text As String, _
                            appobject As Object)
                             
    appobject .Application.Selection.Find.ClearFormatting
    appobject .Application.Selection.Find.Replacement.ClearFormatting

    With appobject.Application.Selection.Find
        .Text = word_selection
        .Replacement.Text = replacement_text
        appobject .Application.Selection.Find.Execute Replace:=wdReplaceAll
    End With

Проблемная строка на которой светится ошибка 4605
Код
 appobject .Application.Selection.Find.Execute Replace:=wdReplaceAll
End Sub

Буду рад любой помощи
Оптимизировать функцию удаления недопустимых стоковых значений для имени файла/книги, есть свой, но слишком лобовой вариант
 
Добрый день, форумчане, хотел бы узнать советы опытных по возможным вариантам оптимизации следующей задачи - в своих программках очень часто необходимо оперировать с присвоениями имен листам/книгам/файлам. Зачастую эти имена берутся определенным образом из ячеек. Однако для имен листов/книг/файлов есть ограничения - нельзя присваивать определенные символы типа кавычек и прочего.

Я написал мини-функцию, которая возвращает "отфильтрованный" от ненужных символов для сохранения. Но каждый раз смотря на неё я понимаю, что логика её работы слишком лобовая и наверняка есть более изящные методы реализации. Ниже мой вариант и описание логики.

В общем-то логика проста - функция принимает в качестве аргумента определенную строковую переменную. Внутри функции я заполняю строковый массив теми символами, от которых я хочу избавиться и передать уже "очищенный результат". Массив с нежелательными символами я просто тупо заполняю с помощью функции Chr и номером ненужного мне символа. Изначально, чтобы выбрать правильные номера Chr я тупо вывел все значения Chr(1) - Chr(256) и ненужные диапазоны номеров отметил.
Код
' ============================================================================================
' функция убирает недопустимые символы в имени файла
' ============================================================================================
Function IlligalSymbolsCut(name As String) As String

Dim i As Integer
Dim illegal_char(56) As String

'заполняем массив недопустимых символов
    For i = 1 To 6
        illegal_char(i) = Chr(i + 32)
    Next i

    illegal_char(7) = "39"
    illegal_char(8) = ""

    For i = 9 To 12
        illegal_char(i) = Chr(i + 33)
    Next i
    illegal_char(13) = ""
    illegal_char(14) = Chr(47)
    For i = 15 To 21
        illegal_char(i) = Chr(i + 43)
    Next i
    For i = 22 To 25
        illegal_char(i) = Chr(i + 69)
    Next i

    illegal_char(26) = Chr(96)

    For i = 27 To 31
        illegal_char(i) = Chr(i + 96)
    Next i
    For i = 32 To 42
        illegal_char(i) = Chr(i + 113)
    Next i
    For i = 43 To 49
        illegal_char(i) = Chr(i + 128)
    Next i

    illegal_char(50) = ""
    illegal_char(51) = ""

    For i = 52 To 55
        illegal_char(i) = Chr(i + 128)
    Next i

    illegal_char(56) = Chr(187)

'начинаем цикл по удалению недопустимых символов
    IlligalSymbolsCut = name
    For i = 1 To 56
        IlligalSymbolsCut = Replace(IlligalSymbolsCut, illegal_char(i), "")
    Next i
End Function
Добавить в ячейку формулу с передачей переменной, VBA
 
Господа, заранее извиняюсь за довольно дилетантский вопрос, но никак не могу разобраться что же от меня хочет компилятор и почему он не выполняет то, что я от него хочу. А хочу я следующее - чтобы в отдельную выбранную ячейку вбивалась специфическая формула, например, формула суммирования.

К примеру, есть такая вот формула
Код
Selection.FormulaR1C1 = "=SUM(R[-2]C:R[-5]C)"

Однако значения отставаний я хотел бы передавать через переменную my_direct_cell , к примеру так
Код
Selection.FormulaR1C1 = "=SUM(R[-2]C:R[-my_direct_cell]C)"

Пробовал громадить конструкцию из конкатенаций, которая мне казалась правильной по логике
Код
 Selection.FormulaR1C1 = """=SUM(R[-2]C:R[-" & last_cell & "]C)"""

но в этом случае в ячейку вставляется не формула а полностью "нужный" текст в кавычках
Страницы: 1
Наверх