Ошибка выполнения PowerPoint VBA «13»: несоответствие типов

Я пытаюсь создать интерактивную PowerPoint (это не Excel, потому что ее нужно отображать). Я пытаюсь сделать условное форматирование с помощью кода. ProdArray — это все текстовые поля, которые я хочу раскрасить в зависимости от их значения по сравнению с другим текстовым полем (ProdTarg).

Dim ProdArray(0 To 5) As String
Dim Day As Variant
ProdArray(0) = MonProd
ProdArray(1) = TueProd
ProdArray(2) = WedProd
ProdArray(3) = ThuProd
ProdArray(4) = FriProd
ProdArray(5) = SatProd

For Each Day In ProdArray
    If Val(Day) >= Val(ProdTarg) * (Sixth + SixthLim) Then
        Day.BackColor = &HFF00&
        ElseIf Val(Day) < Val(ProdTarg) * (Sixth - SixthLim) Then
        Day.BackColor = &HFF&
        Else
        Day.BackColor = &H80FF&
    End If
Next Day

У меня есть цикл For Each, чтобы сделать код более кратким, но я продолжаю получать несоответствие типов. Цикл If внутри основан на следующем коде:

If Val(TueProd) >= Val(ProdTarg) * (Sixth + SixthLim) Then
    TueProd.BackColor = &HFF00&
    ElseIf Val(TueProd) < Val(ProdTarg) * (Sixth - SixthLim) Then
    TueProd.BackColor = &HFF&
    Else
    TueProd.BackColor = &H80FF&
End If

Надеюсь, это даст вам представление о том, чего я пытаюсь достичь. Надеюсь, я не был слишком туп, но я не могу найти тему о том, как интегрировать переменную так, как мне нужно.


person Conquistador    schedule 02.07.2013    source источник
comment
этот код для UserForm? Каковы ваши переменные Day и DayArray? Как вы их определяете? В какой строке твоя ошибка?   -  person Kazimierz Jawor    schedule 02.07.2013
comment
Привет, KazJAw, это код для Button1_Click. Моя ошибка исходит из цикла For - он выделяет строку «Для каждого дня в DayArray». Итак, я предполагаю, что это вызвано попыткой использовать значение варианта.   -  person Conquistador    schedule 02.07.2013
comment
мы не знаем, какие у вас Day и DayArray, так как вы не показали соответствующую часть кода. Итак, чем мы могли бы помочь вам тогда?   -  person Kazimierz Jawor    schedule 02.07.2013
comment
Привет, @KazJaw, Day и DayArray вверху первого поля кода - это не то, что тебе нужно?   -  person Conquistador    schedule 02.07.2013
comment
Я не вижу, там ProdArray, а не DayArray :(   -  person Kazimierz Jawor    schedule 02.07.2013
comment
Ой, простите! Это была ошибка, я изменил имя с DayArray на ProdArray - теперь оно читается как ProdArray   -  person Conquistador    schedule 02.07.2013
comment
и что сейчас? какая ошибка и где у вас?   -  person Kazimierz Jawor    schedule 02.07.2013
comment
На данный момент несоответствия типов нет, но теперь я получаю Object required в строке Day.BackColor = . Как я могу преобразовать вариант в объект?   -  person Conquistador    schedule 02.07.2013
comment
чтобы было ясно - MonProd, TueProd ваши текстовые поля в пользовательской форме?   -  person Kazimierz Jawor    schedule 02.07.2013
comment
Да, это правильно, это текстовые поля на слайде презентации.   -  person Conquistador    schedule 02.07.2013
comment
см. мой ответ - надеюсь, что это поможет...   -  person Kazimierz Jawor    schedule 02.07.2013
comment
плюс некоторые улучшения, только что добавленные к ответу :)   -  person Kazimierz Jawor    schedule 02.07.2013


Ответы (1)


Чтобы ваш код заработал, вам необходимо внести следующие изменения:

  1. объявите ProdArray как Variant следующим образом:

    Dim ProdArray(0 To 5)

  2. используйте Set для создания элемента массива, например:

    Set ProdArray(0) = MonProd
    Set ProdArray(1) = TueProd
    'etc

person Kazimierz Jawor    schedule 02.07.2013
comment
У меня все еще возникают проблемы с ошибкой Object required, указывающей на часть Set ProdArray(0) =... - person Conquistador; 02.07.2013
comment
вы видели улучшения, которые я добавил 3 минуты назад? - person Kazimierz Jawor; 02.07.2013
comment
Извините, да, я сейчас изменил это на ваше редактирование - и это работает! Большое спасибо :) - person Conquistador; 02.07.2013