Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Изменить свойства выделенной ячейки и вернуть прежний формат - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Изменить свойства выделенной ячейки и вернуть прежний формат
nordri Дата: Суббота, 24.06.2023, 14:13 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 37
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Проблема... Точнее вопросы!
Вызов функции с передаваемым параметром адреса ячейки и необязательным параметром.
В общем то работает. Но не все.

Хочу что бы при вызове макроса выделенная ячейка меняла свой формат на установленный, и после задержки получала свой формат до вызова обратно.
[vba]
Код
Sub ChangeRangeClick()
Dim MyChangeRange As Range
Dim MyAdres As String
  MyAdres = ActiveCell.Address
        MsgBox MyAdres
'      a = MsgBox(MyAdres, , ActiveWorkbook.ActiveSheet.Name)
Call ChangeRangeSub(MyAdres)
' Call ChangeRangeSub(MyAdres,5) ' Как вариант
   MsgBox "Готово!"
' MyChangeRange = ActiveCell.Address  'ERROR
' Call ChangeRangeSub(MyChangeRange)  'ERROR
End Sub

Sub ChangeRangeSub(MyRangeSub, Optional SubTimeSllep As Integer = 2)
Dim MyNextRangeSub As Range
Set MyNextRangeSub = ActiveWorkbook.ActiveSheet.Range(MyRangeSub)

   Range(MyRangeSub).Copy

     With MyNextRangeSub.Interior
        .PatternColorIndex = xlAutomatic
        .color = 255
    End With
        Application.Wait Time:=Now + TimeSerial(0, 0, SubTimeSllep)
        
   Range(MyRangeSub).PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False
             Application.CutCopyMode = False
'   With MyNextRangeSub.Interior
'        .Pattern = xlNone
'    End With
           Application.Wait Time:=Now + TimeSerial(0, 0, SubTimeSllep - 1)
End Sub
[/vba]
Вопросы:

Почему не работает это[vba]
Код
MyChangeRange = ActiveCell.Address  'ERROR
Call ChangeRangeSub(MyChangeRange)  'ERROR
[/vba]

Можно ли как то по другому, лаконичнее?[vba]
Код
Dim MyNextRangeSub As Range
Set MyNextRangeSub = ActiveWorkbook.ActiveSheet.Range(MyRangeSub)
[/vba]

Не работает вставка форматирования, скопированая ранее в буфер обмена
[vba]
Код
   Range(MyRangeSub).PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False
             Application.CutCopyMode = False
[/vba]

'      a = MsgBox(MyAdres, , ActiveWorkbook.ActiveSheet.Name)
И без вывода в переменную это не работает. Это констатация факта.
К сообщению приложен файл: svojstva_vydelennoj_jachejki_2.xlsm (18.3 Kb)


Сообщение отредактировал nordri - Суббота, 24.06.2023, 14:21
 
Ответить
СообщениеПроблема... Точнее вопросы!
Вызов функции с передаваемым параметром адреса ячейки и необязательным параметром.
В общем то работает. Но не все.

Хочу что бы при вызове макроса выделенная ячейка меняла свой формат на установленный, и после задержки получала свой формат до вызова обратно.
[vba]
Код
Sub ChangeRangeClick()
Dim MyChangeRange As Range
Dim MyAdres As String
  MyAdres = ActiveCell.Address
        MsgBox MyAdres
'      a = MsgBox(MyAdres, , ActiveWorkbook.ActiveSheet.Name)
Call ChangeRangeSub(MyAdres)
' Call ChangeRangeSub(MyAdres,5) ' Как вариант
   MsgBox "Готово!"
' MyChangeRange = ActiveCell.Address  'ERROR
' Call ChangeRangeSub(MyChangeRange)  'ERROR
End Sub

Sub ChangeRangeSub(MyRangeSub, Optional SubTimeSllep As Integer = 2)
Dim MyNextRangeSub As Range
Set MyNextRangeSub = ActiveWorkbook.ActiveSheet.Range(MyRangeSub)

   Range(MyRangeSub).Copy

     With MyNextRangeSub.Interior
        .PatternColorIndex = xlAutomatic
        .color = 255
    End With
        Application.Wait Time:=Now + TimeSerial(0, 0, SubTimeSllep)
        
   Range(MyRangeSub).PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False
             Application.CutCopyMode = False
'   With MyNextRangeSub.Interior
'        .Pattern = xlNone
'    End With
           Application.Wait Time:=Now + TimeSerial(0, 0, SubTimeSllep - 1)
End Sub
[/vba]
Вопросы:

Почему не работает это[vba]
Код
MyChangeRange = ActiveCell.Address  'ERROR
Call ChangeRangeSub(MyChangeRange)  'ERROR
[/vba]

Можно ли как то по другому, лаконичнее?[vba]
Код
Dim MyNextRangeSub As Range
Set MyNextRangeSub = ActiveWorkbook.ActiveSheet.Range(MyRangeSub)
[/vba]

Не работает вставка форматирования, скопированая ранее в буфер обмена
[vba]
Код
   Range(MyRangeSub).PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False
             Application.CutCopyMode = False
[/vba]

'      a = MsgBox(MyAdres, , ActiveWorkbook.ActiveSheet.Name)
И без вывода в переменную это не работает. Это констатация факта.

Автор - nordri
Дата добавления - 24.06.2023 в 14:13
RAN Дата: Суббота, 24.06.2023, 17:35 | Сообщение № 2
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Почему не работает это

Потому, что вы объекту Range пытаетесь втюхать переменную String.
Можно ли как то по другому, лаконичнее?

[vba]
Код
Set MyNextRangeSub = Range(MyRangeSub)
[/vba]
И без вывода в переменную это не работает. Это констатация факта.

[vba]
Код
MsgBox MyAdres, , ActiveWorkbook.ActiveSheet.Name
[/vba]


Быть или не быть, вот в чем загвоздка!
 
Ответить
Сообщение
Почему не работает это

Потому, что вы объекту Range пытаетесь втюхать переменную String.
Можно ли как то по другому, лаконичнее?

[vba]
Код
Set MyNextRangeSub = Range(MyRangeSub)
[/vba]
И без вывода в переменную это не работает. Это констатация факта.

[vba]
Код
MsgBox MyAdres, , ActiveWorkbook.ActiveSheet.Name
[/vba]

Автор - RAN
Дата добавления - 24.06.2023 в 17:35
nordri Дата: Понедельник, 26.06.2023, 17:33 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 37
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016

[vba]
Код
Range(MyRangeSub).Copy

    With MyNextRangeSub.Interior
        .PatternColorIndex = xlAutomatic
        .color = 255
[/vba]

У меня получается в этот момент происходит очищение буфера обмена? И если мне очень хочется "временно" изменить формат выделенной ячейки, и вернуть "как было", то единственный вариант, использовать "промежуточную - временную" ячейку?


Сообщение отредактировал nordri - Понедельник, 26.06.2023, 17:56
 
Ответить
Сообщение

[vba]
Код
Range(MyRangeSub).Copy

    With MyNextRangeSub.Interior
        .PatternColorIndex = xlAutomatic
        .color = 255
[/vba]

У меня получается в этот момент происходит очищение буфера обмена? И если мне очень хочется "временно" изменить формат выделенной ячейки, и вернуть "как было", то единственный вариант, использовать "промежуточную - временную" ячейку?

Автор - nordri
Дата добавления - 26.06.2023 в 17:33
nordri Дата: Понедельник, 26.06.2023, 23:27 | Сообщение № 4
Группа: Пользователи
Ранг: Новичок
Сообщений: 37
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Хочу что бы при вызове макроса выделенная ячейка меняла свой формат на установленный, и после задержки получала свой формат до вызова обратно

Если вопрос ограничивается только цветом заливки ячейки у меня получилось следующее:
[vba]
Код
Sub CopyChangeColor()

Dim sColor As String, myColor As String, sRange, tWait, i
tWait = 1

    myColor = 250
   Set sRange = Selection
sColor = sRange.Interior.Color
               
MsgBox "Begin"

For i = 1 To 3
   Application.Wait Time:=Now + TimeSerial(0, 0, tWait)
sRange.Interior.Color = myColor
   Application.Wait Time:=Now + TimeSerial(0, 0, tWait)
sRange.Interior.Color = sColor
Next
            Application.CutCopyMode = False
        sRange.Activate
        MsgBox "Compleate!"
End Sub
[/vba]


Сообщение отредактировал nordri - Понедельник, 26.06.2023, 23:29
 
Ответить
Сообщение
Хочу что бы при вызове макроса выделенная ячейка меняла свой формат на установленный, и после задержки получала свой формат до вызова обратно

Если вопрос ограничивается только цветом заливки ячейки у меня получилось следующее:
[vba]
Код
Sub CopyChangeColor()

Dim sColor As String, myColor As String, sRange, tWait, i
tWait = 1

    myColor = 250
   Set sRange = Selection
sColor = sRange.Interior.Color
               
MsgBox "Begin"

For i = 1 To 3
   Application.Wait Time:=Now + TimeSerial(0, 0, tWait)
sRange.Interior.Color = myColor
   Application.Wait Time:=Now + TimeSerial(0, 0, tWait)
sRange.Interior.Color = sColor
Next
            Application.CutCopyMode = False
        sRange.Activate
        MsgBox "Compleate!"
End Sub
[/vba]

Автор - nordri
Дата добавления - 26.06.2023 в 23:27
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!