#excel #vba #type-mismatch
#excel #vba #несоответствие типа
Вопрос:
Это код, который пытается изменить цвет фона некоторых ячеек в зависимости от условия. Это работало на компьютере друга, где я создал код, но когда я отправил его на свой компьютер и запустил, появилось сообщение о несоответствии типа.
Отладчик останавливается на ячейках назначения (i, j).Интерьер.Цвет = RGB (0,255,0)
Может быть, это проблема совместимости с версией Excel???
Sub Acumuladores()
Dim j As Integer
Dim i As Integer
Dim Title As String
Dim numColumnas As Integer
numColumnas = 36
j = 1
Do While j < numColumnas
Title = Cells(1, j)
i = 1
Do While Cells(i, 1) <> ""
i = i 1
If (i Mod 2 = 0) Then
If (Title = "PV" Or Title = "PPALUNITCCY1" Or Title = "PPALUNITCCY1" Or Title = "IMPORTE_TOTAL_ACUMULADO" Or Title = "FXFORWARDPPAL" Or Title = "FXFORWARDRATE" Or Title = "FXFWDVTO") Then
If Cells(i, j) = -Cells(i 1, j) Then
Cells(i, j).Interior.Color = RGB(0, 255, 0)
Else
Cells(i, j).Interior.Color = RGB(255, 0, 0)
End If
End If
If (Title = "TIPOEMISION" Or Title = "STARTDATE" Or Title = "MATURITYDATE" Or Title = "DESCRIPTION" Or Title = "CECACUMTIPO" Or Title = "CECACUMRATIO" Or Title = "CECACUMRATIO1" Or Title = "CECACUMNOBS" Or Title = "CECACUMFREQ" Or Title = "CECACUMSTRIKE" Or Title = "CECACUMBARRERA") Then
If Cells(i, j) = Cells(i 1, j) Then
Cells(i, j).Interior.Color = RGB(0, 255, 0)
Else
Cells(i, j).Interior.Color = RGB(255, 0, 0)
End If
End If
End If
Loop
j = j 1
Loop
End Sub
Комментарии:
1. У вас есть
-Cells(i 1, j)
.-
Вероятно, это ваша проблема.2.
Cells(i,j).Interior.Color = RGB(0,255,0)
Выстрел в темноте. Поставьте точку останова в этой строке. Найдите значениеi
, аj
затем физически проверьте эту ячейку и посмотрите, есть ли какая-либо ошибка формулы, например#N/A
? Например, еслиi=1 and j=1
затем вручную проверьтеcells(1,1)
, что естьA1
, и посмотрите, есть ли какая-либо ошибка формулы
Ответ №1:
Внутри инструкции if:
If Cells(i, j) = -Cells(i 1, j) Then
Cells(i, j).Interior.Color = RGB(0, 255, 0)
Else
У вас есть -Cells
вместо Cells
. Так что исправьте это с помощью:
If Cells(i, j) = Cells(i 1, j).Value * -1Then
Cells(i, j).Interior.Color = RGB(0, 255, 0)
Else
Комментарии:
1. Но мне нужно сравнить ячейку с отрицательным значением следующей ячейки. Как мне это сделать? И почему это выражение не сломалось на компьютере, на котором я создал код?
2. попробуйте
Cells(i 1, j).Value * -1