Страницы: 1
RSS
With Selection.Interior не работает с переменной
 
Добрый день.
Есть, для примера, такой код. Он работает.

Код
Public Sub colorFill()
'
' colorFill Macro
'
    Columns("C:C").Select
    With Selection.Interior
        .PatternColorIndex = xlAutomatic
        .ThemeColor = xlThemeColorAccent3
        .TintAndShade = 0.399975585192419
        .PatternTintAndShade = 0
    End With
End Sub 
Как только я пытаюсь заменить строку Columns("C:C").Select на Columns(x & ":" & x).Select, у меня выскакивает сообщение об ошибке Compile Error: Expected Function or variable на строке Selection.

Переменная объявлена как Public x As String до самого Sub, значение x берется из формы, которая вызывается до этого кода.
Отдельно в другом модуле код работает, а вот так уже нет.
Код
PriceListAuto.Show
PriceListAuto.MaterialGroup = Split(Range("A1:CZ12").Find("òîâàð*ãð*").Address, "$")(1)
x = PriceListAuto.MaterialGroup
Columns(x & ":" & x).Select
With Selection.Interior
        .PatternColorIndex = xlAutomatic
        .ThemeColor = xlThemeColorAccent3
        .TintAndShade = 0.399975585192419
        .PatternTintAndShade = 0
End With

Не могу понять почему...
Заранее благодарю за помощь.
Изменено: invirtus - 29.06.2015 15:55:08
 
У вас переменная Х, передаваемая в эту инструкцию, чему равна?

p.s. Мне кажется, что работать с целым столбцом - это неправильно. Наверняка данные занимают не весь столбец, а какой-то ограниченный диапазон.
Определить его и работать только с ним, исключить всякие Select'ы и макрос заработает ощутимо быстрее.
Изменено: Пытливый - 29.06.2015 15:52:20
Кому решение нужно - тот пример и рисует.
 
У меня без ошибки... А переменной значение присвоено?
 
Можно конечно без select попробовать, но у меня каждый раз разный диапазон задаваемый из формы... мне казалось выделение проще и быстрее сделать столбцами.
 
А, я кажется знаю в чем проблема.. из поля формы нельзя передать таким образом значение в переменную видимо.
 
Проверьте, чему равно значение переменной. И согласен - нет никакой необходимости ВЫДЕЛЯТЬ столбец/диапазон.
 
Цитата
Юрий М написал: нет никакой необходимости ВЫДЕЛЯТЬ столбец/диапазон.
А как работать с выделением цветом без select? Чтобы залить цветом надо же сначала выделить диапазон, или нет?
 
Так все-таки, при выполнении макроса в инструкцию передается какое значение Х?
Кому решение нужно - тот пример и рисует.
 
Не нужно без явной необходимости выделять ни столбцы, ни диапазоны - только тормоза получите при выполнении кода. Это относится и к Activate ))
Код
Public Sub colorFill()
Dim x As String
    x = "C"
'    Columns(x & ":" & x).Select
'    With Selection.Interior
    With Columns(x & ":" & x).Interior
        .PatternColorIndex = xlAutomatic
        .ThemeColor = xlThemeColorAccent3
        .TintAndShade = 0.399975585192419
        .PatternTintAndShade = 0
    End With
End Sub
 
Нет, достаточно указать диапазон и рассказать, что с ним делать...противоестественное... а выделять его для этого совершенно не надо. :)

Код
Wiht Range(A1:C12)
.Interior.Color=5
End with

например.
Кому решение нужно - тот пример и рисует.
 
Я даже и не знаю, переменная без проблем присваивается... а если Selection раскомментить на нём ошибка вылезает, как я и описал.
 
invirtus, поставьте точку останова на 1-ю строку вызываемой процедуры. Когда останов произойдет, наведите курсор на х и посмотрите, чему он равен.
Option Explicit в начале каждого модуля помогает избегать таких проблем. Установите галку Tools - Options - Editor - Require variable declaration, чтобы редактор сам вставлял эту строку в НОВЫХ модулях.
А сам код можно написать без Select
Код
Option Explicit

Public x As String

Public Sub colorFill()
'
' colorFill Macro
'
    With Columns(x).Interior
        .PatternColorIndex = xlAutomatic
        .ThemeColor = xlThemeColorAccent3
        .TintAndShade = 0.4
        .PatternTintAndShade = 0
    End With
End Sub
Изменено: Казанский - 29.06.2015 16:09:34
 
О, здорово. Без selection всё заработало. Спасибо. Поиграю с диапазонами вместо столбцов. Диапазоны выделять быстрее чем целые столбцы?
 
Да зачем их выделять-то?! :)
В столбце сколько ячеек? А в диапазоне сколько? Как вы думаете, где  быстрее сработает - сначала выделить, потом (например) присвоить каждой ячейке какое-то значение, на фоне каждой пятой нарисовать фигу, на фоне каждой четвертой - смокву и в конце еще в первой ячейке написать что-нибудь позитивное? :)

P.S. Наверное я так и состарюсь, не узнав значение Х передаваемое в инструкцию... хнык...

p.p.s. У меня рождается страшное подозрение... у вас в переменной буковка какой национальности? :)
Изменено: Пытливый - 29.06.2015 16:28:12
Кому решение нужно - тот пример и рисует.
 
Так вон же на картинке выше всё есть... Watches, там значение переменной. в x у меня буква String, С допустим.

Я имел ввиду не выделять, а работать (выделять цветом имел ввиду). Просто у меня не всегда правильно определяется конец диапазона по строкам, если столбец пустой например, тогда вообще ничего не выделится цветом... а если столбец целиком заливать, то такой проблемы не возникнет.


я уже на такое переделал и всё заработало. Непонятно почему With selection не работало, если переменная нормально присваивалась.
Код
PriceListAuto.MaterialGroup = Split(Range("A1:CZ12").Find("òîâàð*ãð*").Address, "$")(1)
xMaterialGroup = PriceListAuto.MaterialGroup
With Columns(xMaterialGroup & ":" & xMaterialGroup).Interior
    .PatternColorIndex = xlAutomatic
    .ThemeColor = xlThemeColorAccent3
    .TintAndShade = 0.399975585192419
    .PatternTintAndShade = 0
End With
Изменено: invirtus - 29.06.2015 16:35:04
Страницы: 1
Читают тему
Наверх