Доброго времени суток форумчане.
Есть проблема с макросом. Работает через раз. В ситуации с длиной строки sql запроса длиннее 255 символов макрос выдает ошибку, что логично. Но мне не понятно, как это пофиксить.
Прикладываю макрос и примеры файлов с которыми он должен работать.
Прошу прощения за новую тему. Не нашел ничего похожего по форуму. Если подскажите буду благодарен и перенесу в соответствующий раздел.
Макрос
Sub Stamp()
Dim fso As Object
Dim conn As Object
Dim fsoFile As Object
Dim folderPath As String
Application.ScreenUpdating = False
folderPath = ActiveDocument.Path
Set fso = CreateObject("Scripting.FileSystemObject")
On Error Resume Next
Set fsoFile = fso.GetFile(folderPath & "\øòàìï.xlsx")
On Error GoTo 0
If fsoFile Is Nothing Then
MsgBox "Штамп не найден!"
Application.ScreenUpdating = True
Exit Sub
Else
folderPath = folderPath & "\штамп.xlsx"
With ActiveDocument.MailMerge
.OpenDataSource _
Name:=folderPath, _
ConfirmConversions:=False, _
ReadOnly:=False, _
LinkToSource:=True, _
AddToRecentFiles:=False, _
PasswordDocument:="", _
PasswordTemplate:="", _
WritePasswordDocument:="", _
WritePasswordTemplate:="", _
Revert:=False, _
Format:=wdOpenFormatAuto, _
Connection:="Provider=Microsoft.ACE.OLEDB.12.0;User ID=Admin;Data Source=" & folderPath & ";Mode=Read;Extended Properties=""HDR=YES;IMEX=1;"";Jet OLEDB:System database="""";Jet OLEDB:Regis", _
SQLStatement:="SELECT * FROM `Штамп$`", _
SQLStatement1:="", _
SubType:=wdMergeSubTypeAccess
.ViewMailMergeFieldCodes = False
End With
' Восстанавливаем обновление экрана
Application.ScreenUpdating = True
MsgBox "Обновление штампа прошло успешно"
End If
End Sub
Вы в эту строку:
SQLStatement:="SELECT * FROM `Штамп$`",
вместо:
SELECT * FROM `Штамп$`
пишите другой sql-запрос, длина которого больше 255 символов?
Нет. Код остается в таком виде, как Я его опубликовал, в некоторых случаях код работает корректно, а в некоторых выдает ошибку Run-time error `9105` длина строки превышает 255 символов. Кнопка дебаг отправляет меня в метод MailMerge.OpenDataSource. Я и подумал что вся проблема скрыта именно в sql запросе.
Я пробовал построчно запустить (F8) и посмотреть что как меняется, но не смог разобраться. Поскольку как только попадаю в MailMerge.OpenDataSource получаю ошибку.
Возможно тут скрыта иная проблема, которая мне не ведома.
Поясню, что по моей задумке активный файл ворд должен подгружать данные из файла штамп, который находится с ним в одной папке, папки лежат на общем рабочем сервере и полная длинна пути не превышает 255 символов.
К примеру:
[УДАЛЕНО, Т.К. МОЖЕТ БЫТЬ КОНФИДЕНЦИАЛЬНАЯ ИНФОРМАЦИЯ]
Запустите макрос, дождитесь ошибки.
1. Сделайте скриншот сообщения, в котором ошибка.
2. Нажмите в сообщении кнопку "Debug", отобразится VBA и в нём будет выделена строка жёлтым. Сделайте скриншот жёлтой строки.
Пожалуйста
И ещё нужно скриншот сообщения.
Вот