Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.12.2017, 11:31   #1
Iskin
Форумчанин
 
Регистрация: 22.09.2008
Сообщений: 307
По умолчанию Заглавные автоматически

Здравствуйте всем!
Надо что бы в диапазоне h3:h720 все строчные буквы становились в прописные. написал код:
Код:
Private Sub Worksheet_Change(ByVal Target As Range)
   If Target.Cells.Count > 1 Then Exit Sub
   If Not Intersect(Target, Range("h3:h720")) Is Nothing Then '-тут ругается
       Target.Value = UCase(Target.Value)
   End If
End Sub
макрос отрабатывает, но и ругается на строку. Помогите исправить.
И второй момент, если мне надо отредактировать два столбца (например еще и O:O), то какой должен быть код?
Думайте глобально - действуйте локально!
Iskin вне форума Ответить с цитированием
Старый 28.12.2017, 12:42   #2
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

На кого и как ругается? Где файл, скриншот ошибки?
Код:
Private Sub Worksheet_Change(ByVal Target As Range)
   If Target.Cells.Count > 1 Then Exit Sub
   If Not Intersect(Target, Range("h3:h720,O:O")) Is Nothing Then 
       Target.Value = UCase(Target.Value)
   End If
End Sub
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 28.12.2017, 13:09   #3
Iskin
Форумчанин
 
Регистрация: 22.09.2008
Сообщений: 307
По умолчанию

Пример во вложение. Может с самой книгой что-то не то...
Вложения
Тип файла: rar 111.rar (39.1 Кб, 11 просмотров)
Думайте глобально - действуйте локально!
Iskin вне форума Ответить с цитированием
Старый 28.12.2017, 13:37   #4
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

Пример из вложения работает как прописано в макросе.
Код:

Private Sub Worksheet_Change(ByVal Target As Range)
   With Range("h3:h720,O:O")
       .Value = UCase(.Value)
   End with
End Sub
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 28.12.2017, 13:47   #5
Iskin
Форумчанин
 
Регистрация: 22.09.2008
Сообщений: 307
По умолчанию

Ругается на .Value = UCase(.Value)
пишет:
Run-time error 13
Type mismatch
Думайте глобально - действуйте локально!
Iskin вне форума Ответить с цитированием
Старый 28.12.2017, 13:53   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Iskin, если использовать If Target.Cells.Count > 1 Then Exit Sub
тогда в вашем файле никакой ошибки не возникает.
но и множественные ячейки не обрабатываются. (попробуйте скопировать несколько ячеек в столбец H)

попробуйте такой вариант (это я слямзил с StackOverflow):
Код:
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim aCell As Range
    Dim onlyThese As Range   ' collection of ranges that, if changed, trigger some action
    Dim cellsToUse As Range  ' cells that are both in "Target" and in "onlyThese"

    On Error GoTo Whoa

    Application.EnableEvents = False

    Set onlyThese = Range("h3:h720") ' in this instance, but could be anything - even a union of ranges
    Set cellsToUse = Intersect(onlyThese, Target)
    If cellsToUse Is Nothing Then GoTo Letscontinue

    ' loop over cells that were changed, and of interest:
    For Each aCell In cellsToUse
        If aCell.Value <> "" Then
            aCell.Value = UCase(aCell.Value)
        End If
    Next

Letscontinue:
    Application.EnableEvents = True
    Exit Sub
Whoa:
    MsgBox Err.Description
    Resume Letscontinue
End Sub
Serge_Bliznykov вне форума Ответить с цитированием
Старый 28.12.2017, 14:08   #7
Iskin
Форумчанин
 
Регистрация: 22.09.2008
Сообщений: 307
По умолчанию

Не чего не понял про If Target.Cells.Count > 1 Then Exit Sub
Но ваш вариант отработал как надо
Всем спасибо и с наступающим НГ!
Думайте глобально - действуйте локально!
Iskin вне форума Ответить с цитированием
Старый 28.12.2017, 14:08   #8
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

Цитата:
Сообщение от Iskin Посмотреть сообщение
Ругается на .Value = UCase(.Value)
пишет:
Run-time error 13
Type mismatch
Да, косяк не тестированый. Пользуйтесь советом Serge
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Из строчных в заглавные и наоборот joe cross Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 01.11.2015 13:45
Заглавные буквы aj.matter Помощь студентам 3 03.11.2012 16:17
Заглавные в пропесные Misha-QWERTY Visual C++ 2 04.05.2011 05:41
pascal. строки.заглавные буквы parovoz121 Помощь студентам 1 22.09.2010 08:06
заглавные буквы, прописные ЦЕРЦЕЯ Microsoft Office Excel 1 21.01.2010 14:43