Привет участникам форума. Имеется документ Word в котором склоняются по падежам несколько фамилий и макрос преобразует фамилию, имя и отчество в ФИО. После ввода данных в основных полях (там где изначально вводятся данные фамилии, имя и отчества) макрос выполняется правильно, но при переходе по контролам при попадании курсора на некоторые из них, выскакивает ошибка Run-time error '9': subscript out of range. В макросе ошибка указывает н строку [vba]
Код
O = Split(ContentControl.Range.Text, " ")(2)
[/vba]Прошу знатоков помочь в решении этой проблемы. Я в макросах мало что понимаю, данные для кода брала из разных источников, как говорится, я его слепила из того что было. Всем спасибо. Файл во вложении.
Привет участникам форума. Имеется документ Word в котором склоняются по падежам несколько фамилий и макрос преобразует фамилию, имя и отчество в ФИО. После ввода данных в основных полях (там где изначально вводятся данные фамилии, имя и отчества) макрос выполняется правильно, но при переходе по контролам при попадании курсора на некоторые из них, выскакивает ошибка Run-time error '9': subscript out of range. В макросе ошибка указывает н строку [vba]
Код
O = Split(ContentControl.Range.Text, " ")(2)
[/vba]Прошу знатоков помочь в решении этой проблемы. Я в макросах мало что понимаю, данные для кода брала из разных источников, как говорится, я его слепила из того что было. Всем спасибо. Файл во вложении.irina18
У Вас там, где написано Иванов И.И., нет второго пробела, следовательно, текст делится не на 3 части, а на две - нулевую и первую. А Split(2) подразумевает наличие 3-го элемента массива Предлагаю начало (ну и где там еще нужно) переписать так [vba]
Код
Private Sub Document_ContentControlOnExit(ByVal ContentControl As ContentControl, Cancel As Boolean) 'Именительный падеж ' Для преобразования Фамилии, имя и отчество в ФИО Dim index As String, full, fio, control As ContentControl Dim i As Long Dim F$, im$, O$ ccrt_ = Trim(Replace(Replace(ContentControl.Range.Text, ".", ". "), " ", " "))
F = Split(ccrt_, " ")(0) im = Split(ccrt_, " ")(1) O = Split(ccrt_, " ")(2)
[/vba]
У Вас там, где написано Иванов И.И., нет второго пробела, следовательно, текст делится не на 3 части, а на две - нулевую и первую. А Split(2) подразумевает наличие 3-го элемента массива Предлагаю начало (ну и где там еще нужно) переписать так [vba]
Код
Private Sub Document_ContentControlOnExit(ByVal ContentControl As ContentControl, Cancel As Boolean) 'Именительный падеж ' Для преобразования Фамилии, имя и отчество в ФИО Dim index As String, full, fio, control As ContentControl Dim i As Long Dim F$, im$, O$ ccrt_ = Trim(Replace(Replace(ContentControl.Range.Text, ".", ". "), " ", " "))
F = Split(ccrt_, " ")(0) im = Split(ccrt_, " ")(1) O = Split(ccrt_, " ")(2)
_Boroda_, огромное спасибо за быстрый ответ, а самое главное, что Ваша корректировка макроса помогла. Сейчас работает без проблем. Удачного дня.
_Boroda_, огромное спасибо за быстрый ответ, а самое главное, что Ваша корректировка макроса помогла. Сейчас работает без проблем. Удачного дня.irina18