Страницы: 1
RSS
Передать значение массива в .Interior.Color, VBA
 
Доброго, форумчане!
Подскажите, пожалуйста, как правильно передать значение arr(i, 1) в Interior.Color ?

Имеется следующая строка кода, которая не работает:
Код
Range(Cells(1, 1), Cells(10, 1)).Interior.Color = arr(i, 1)
Хотя при наведении на arr(i, 1) показывает следующее:
Код
arr(i, 1) = "RGB(255, 200, 200)"

и соответственно без массива (напрямую) работает все корректно
Код
Range(Cells(1, 1), Cells(10, 1)).Interior.Color = RGB(255, 200, 200)
Изменено: a43 - 05.12.2024 15:09:02
 
Цитата
a43 написал:
показывает следующее:
так это текст. А Color - это тип Long.
Вам в массив надо так же заносить:
Код
arr(i, 1) = RGB(255, 200, 200)

а потом записывать
Код
Range(Cells(1, 1), Cells(10, 1)).Interior.Color = arr(i, 1)
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
написал:
так это текст. А Color - это тип Long
а если arr(i, 1) присваивается примерно следующим способом? (т.е. в ячейках указан именно "текст"):
Код
for i = 1 to 10
 arr(i, 1) = Cells(i, 1)
next i
 
Как вариант, написать функцию, переводящую текс в Long.
Код
Sub test()
    ActiveCell.Interior.Color = myRGB("RGB(255, 200, 200)")
End Sub

Function myRGB(RGBtext As String) As Long
    Dim arr As Variant
    arr = myRGBarray(RGBtext)
    If Not IsEmpty(arr) Then
        myRGB = RGB(arr(0), arr(1), arr(2))
    End If
End Function

Function myRGBarray(ByVal RGBtext As String) As Variant
    If RGBtext Like "RGB(*, *, *)" Then
        RGBtext = Mid(RGBtext, Len("RGB(1"))
        RGBtext = Left(RGBtext, Len(RGBtext) - 1)
        myRGBarray = Split(RGBtext, ", ")
    End If
End Function
 
Цитата
МатросНаЗебре написал:
Код
If RGBtext Like "RGB(*, *, *)" Then
        RGBtext = Mid(RGBtext, Len("RGB(1"))
        RGBtext = Left(RGBtext, Len(RGBtext) - 1)
        myRGBarray = Split(RGBtext, ", ")
    End If
   Подскажите, пожалуйста, зачем здесь RGBtext присваивается значение Mid(RGBtext, Len("RGB(1")), если следующей же строкой это значение стирается, и RGBtext присваивается новое значение: Left(RGBtext, Len(RGBtext) - 1)?
 
Цитата
написал:
если следующей же строкой это значение стирается
Ошибка.
 
Да нет, какая ошибка? Сначала берется значение до скобок, потом отсекается последняя скобка. Так что все верно.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Я имею в виду утверждение "если следующей же строкой это значение стирается" ошибочное.  :)  
 
МатросНаЗебре,
Почему ошибка? Нельзя же одной переменной присвоить два значения?
 
Цитата
написал:
Нельзя же одной переменной присвоить два значения?
а где там два значения? Там одно, но присваивается последовательно при выполнении пошаговых операций. Сначала получаем одно значение, его же используем далее и изменяем. И это не запрещено. Хотя бы пошагово выполните код - хоть какое-то понимание будет. А то пока выглядит как троллинг какой-то :)
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Дмитрий(The_Prist) Щербаков, МатросНаЗебре, благодарю за помощь!
решил проблему через перевод RGB в LONG с помощью формулы (сразу в ячейку вписал цифры и все):
Код
  RGB=red+(green*256)+(blue*65536)
Изменено: a43 - 06.12.2024 13:52:31
 
Цитата
написал:
Почему ошибка? Нельзя же одной переменной присвоить два значения?
Ээээ... Выражение "i = i + 1" тоже вызывает ощущение, что переменной присваивают два значения?
Вы лучше в C++ не заглядывайте, с их "i++" и "++i"  вообще башню оторвёт.  :D  
Страницы: 1
Наверх