Подскажите, please, почему происходит ошибка при отмене разбиения или при нажатии Esc?
Задумывалось так, чтобы при нахождении курсора в таблице, было предложено разбить ячейку, в которой курсор. Если же было выделено несколько ячеек, то сначала должно быть предложение их слить, а при ответе "НЕТ" — опять же разбить. Но если отказаться от разбиения, то выскакивает ошибка.
[vba]
Код
Sub ЯчейкиОбъединитьИлиРазбить() If Selection.Cells.Count <= 1 Then Razbivka: Application.Run MacroName:="TableSplitCells" GoTo Vykhod Else If MsgBox("Слить выделенные ячейки в одну?", vbYesNoCancel + vbDefaultButton2 + vbQuestion, "СЛИЯНИЕ ИЛИ РАЗБИВКА КЛЕТОК") = vbYes Then Application.Run MacroName:="TableMergeCells" Else GoTo Razbivka End If End If Vykhod: End Sub
[/vba] Какой должен быть правильный код?
Подскажите, please, почему происходит ошибка при отмене разбиения или при нажатии Esc?
Задумывалось так, чтобы при нахождении курсора в таблице, было предложено разбить ячейку, в которой курсор. Если же было выделено несколько ячеек, то сначала должно быть предложение их слить, а при ответе "НЕТ" — опять же разбить. Но если отказаться от разбиения, то выскакивает ошибка.
[vba]
Код
Sub ЯчейкиОбъединитьИлиРазбить() If Selection.Cells.Count <= 1 Then Razbivka: Application.Run MacroName:="TableSplitCells" GoTo Vykhod Else If MsgBox("Слить выделенные ячейки в одну?", vbYesNoCancel + vbDefaultButton2 + vbQuestion, "СЛИЯНИЕ ИЛИ РАЗБИВКА КЛЕТОК") = vbYes Then Application.Run MacroName:="TableMergeCells" Else GoTo Razbivka End If End If Vykhod: End Sub
[/vba] Какой должен быть правильный код?auto-teacher
Сформулирую по-другому. Курсор в таблице. Если на ленте Word выполнить команду Макет/Объединение/Разделить ячейки (а это будет SplitCells), то появится окно "Разбиение ячеек". Если нажать Esc или Отмена, то команда прервется и все. Если же выполнить: Разработчик/Код/Макросы/Макросы из: Команд Word/TableSplitCells (макроса SplitCells среди встроенных не обнаруживается), то также появится окно "Разбиение ячеек". Но если в этом случае нажать Отмена или Esc, то команда прервется с ошибкой, и откроется Visusl Basic для отладки. Как исправить мой код? Что сделать?
Сформулирую по-другому. Курсор в таблице. Если на ленте Word выполнить команду Макет/Объединение/Разделить ячейки (а это будет SplitCells), то появится окно "Разбиение ячеек". Если нажать Esc или Отмена, то команда прервется и все. Если же выполнить: Разработчик/Код/Макросы/Макросы из: Команд Word/TableSplitCells (макроса SplitCells среди встроенных не обнаруживается), то также появится окно "Разбиение ячеек". Но если в этом случае нажать Отмена или Esc, то команда прервется с ошибкой, и откроется Visusl Basic для отладки. Как исправить мой код? Что сделать?auto-teacher
А вы в блокноте этот макрос выполнить не пробовали? Или вы считаете, что блокнот может не знать о существовании макросов Excel, но Excel просто обязан знать встроенные команды Word'a?
А вы в блокноте этот макрос выполнить не пробовали? Или вы считаете, что блокнот может не знать о существовании макросов Excel, но Excel просто обязан знать встроенные команды Word'a?RAN
Sub ЯчейкиОбъединитьИлиРазбить() If Selection.Cells.Count <= 1 Then Razbivka: Application.Run MacroName:="TableSplitCells" GoTo Vykhod Else s=MsgBox("Слить выделенные ячейки в одну?", vbYesNoCancel + vbDefaultButton2 + vbQuestion, "СЛИЯНИЕ ИЛИ РАЗБИВКА КЛЕТОК") If s = vbYes Then Application.Run MacroName:="TableMergeCells" ElseIf s=vbNo Then GoTo Razbivka End If End If Vykhod: End Sub
[/vba]
Может так имелось в виду? [vba]
Код
Sub ЯчейкиОбъединитьИлиРазбить() If Selection.Cells.Count <= 1 Then Razbivka: Application.Run MacroName:="TableSplitCells" GoTo Vykhod Else s=MsgBox("Слить выделенные ячейки в одну?", vbYesNoCancel + vbDefaultButton2 + vbQuestion, "СЛИЯНИЕ ИЛИ РАЗБИВКА КЛЕТОК") If s = vbYes Then Application.Run MacroName:="TableMergeCells" ElseIf s=vbNo Then GoTo Razbivka End If End If Vykhod: End Sub
Pelena, при отказе от команды TableMergeCells ничего страшного не происходит: просто идет переход на метку Razbivka. Ошибка (см. фото) появляется при отказе от команды TableSplitCells. Вот в этой ветке чего-нибудь бы исправить на случай отмены команды (Отмена) и на случай выхода из команды (Escape): [vba]
[/vba] Чем (каким другим кодом) можно заменить TableSplitCells, чтобы начался диалог "Разбиение ячеек"?
Pelena, при отказе от команды TableMergeCells ничего страшного не происходит: просто идет переход на метку Razbivka. Ошибка (см. фото) появляется при отказе от команды TableSplitCells. Вот в этой ветке чего-нибудь бы исправить на случай отмены команды (Отмена) и на случай выхода из команды (Escape): [vba]
Sub ЯчейкиОбъединитьИлиРазбить() If Selection.Cells.Count > 1 Then If MsgBox("Слить выделенные ячейки в одну?", vbYesNoCancel + vbDefaultButton2 + vbQuestion, "СЛИЯНИЕ ИЛИ РАЗБИВКА КЛЕТОК") = vbYes Then Application.Run MacroName:="TableMergeCells" Application.Run MacroName:="TableSplitCells" ElseIf s=vbNo Then Application.Run MacroName:="TableSplitCells" End If End If End Sub
[/vba] Если опять не то, прикладывайте файл с примером и всеми макросами
А так? [vba]
Код
Sub ЯчейкиОбъединитьИлиРазбить() If Selection.Cells.Count > 1 Then If MsgBox("Слить выделенные ячейки в одну?", vbYesNoCancel + vbDefaultButton2 + vbQuestion, "СЛИЯНИЕ ИЛИ РАЗБИВКА КЛЕТОК") = vbYes Then Application.Run MacroName:="TableMergeCells" Application.Run MacroName:="TableSplitCells" ElseIf s=vbNo Then Application.Run MacroName:="TableSplitCells" End If End If End Sub
[/vba] Если опять не то, прикладывайте файл с примером и всеми макросамиPelena
"Черт возьми, Холмс! Но как??!!" Ю-money 41001765434816
[/vba] При отказе от выполнения команды аргументы не передаются, что и приводит к ошибке. При этом сам метод Split совершенно спокойно относится к отсутствию оных. Лечится же это простым добавлением On Error Resume Next [vba]
Код
Sub ЯчейкиОбъединитьИлиРазбить() If Selection.Cells.Count <= 1 Then Razbivka: On Error Resume Next Application.Run MacroName:="TableSplitCells" GoTo Vykhod Else If MsgBox("Слить выделенные ячейки в одну?", vbYesNoCancel + vbDefaultButton2 + vbQuestion, "СЛИЯНИЕ ИЛИ РАЗБИВКА КЛЕТОК") = vbYes Then Application.Run MacroName:="TableMergeCells" Else GoTo Razbivka End If End If Vykhod: End Sub
[/vba] При отказе от выполнения команды аргументы не передаются, что и приводит к ошибке. При этом сам метод Split совершенно спокойно относится к отсутствию оных. Лечится же это простым добавлением On Error Resume Next [vba]
Код
Sub ЯчейкиОбъединитьИлиРазбить() If Selection.Cells.Count <= 1 Then Razbivka: On Error Resume Next Application.Run MacroName:="TableSplitCells" GoTo Vykhod Else If MsgBox("Слить выделенные ячейки в одну?", vbYesNoCancel + vbDefaultButton2 + vbQuestion, "СЛИЯНИЕ ИЛИ РАЗБИВКА КЛЕТОК") = vbYes Then Application.Run MacroName:="TableMergeCells" Else GoTo Razbivka End If End If Vykhod: End Sub