Worksheet_Change Formula работает для чисел, но разрывы для строк - PullRequest
0 голосов
/ 18 марта 2020

Этот код работает для формул, которые возвращают 0, но не для формул, которые возвращают «строку». В результате в ячейке есть побочное значение, которое пользователь может перезаписать, а затем снова посмотреть, удаляют ли они свое значение.

Как я могу сделать это для числовых значений c и для строковых выходов? В этой строке выдается ошибка:

.Formula = v(i, 2)

Вот весь блок.

Private Sub Worksheet_Change(ByVal Target As Range)
  Dim i&, v
  DoEvents
  ReDim v(1 To 40, 1 To 2)
  v(1, 1) = "F7": v(1, 2) = "=IFERROR(INDEX(DATABASE!$D$2:$AG$3222,MATCH('Pricing Grid'!$B$11,DATABASE!$E$2:$E$3222,0),10),0)"
  v(2, 1) = "F8": v(2, 2) = "=IFERROR(INDEX(DATABASE!$D$2:$AG$3222,MATCH('Pricing Grid'!$B$11,DATABASE!$E$2:$E$3222,0),9),0)"
  v(3, 1) = "F9": v(3, 2) = "=IFERROR(INDEX(DATABASE!$D$2:$AG$3222,MATCH('Pricing Grid'!$B$11,DATABASE!$E$2:$E$3222,0),11),0)"
  v(4, 1) = "F10": v(4, 2) = "=IFERROR(INDEX(DATABASE!$D$2:$AG$3222,MATCH('Pricing Grid'!$B$11,DATABASE!$E$2:$E$3222,0),12),0)"
  v(5, 1) = "F11": v(5, 2) = "=IFERROR(INDEX(DATABASE!$D$2:$AG$3222,MATCH('Pricing Grid'!$B$11,DATABASE!$E$2:$E$3222,0),15),0)"
  v(6, 1) = "F12": v(6, 2) = "=IFERROR(INDEX(DATABASE!$D$2:$AG$3222,MATCH('Pricing Grid'!$B$11,DATABASE!$E$2:$E$3222,0),14),0)"
  v(7, 1) = "F13": v(7, 2) = "=IFERROR(INDEX(DATABASE!$D$2:$AG$3222,MATCH('Pricing Grid'!$B$11,DATABASE!$E$2:$E$3222,0),8),0)"
  v(8, 1) = "F16": v(8, 2) = "=IFERROR(INDEX(DATABASE!$D$2:$AG$3222,MATCH('Pricing Grid'!$B$11,DATABASE!$E$2:$E$3222,0),19),0)"
  v(9, 1) = "B26": v(9, 2) = "=IFERROR(INDEX(DATABASE!$D$2:$AG$3222,MATCH('Pricing Grid'!$B$11,DATABASE!$E$2:$E$3222,0),1),"")"
  v(10, 1) = "G24": v(10, 2) = "=IFERROR(INDEX(DATABASE!$D$2:$AG$3222,MATCH(1,($B$11=DATABASE!$E$2:$E$3222) * (G3=DATABASE!$T$2:$T$3222) * (G4=DATABASE!T2:T3222),0),24),"")"
  v(11, 1) = "G28": v(11, 2) = "=IFERROR(INDEX(DATABASE!$D$2:$AG$3222,MATCH(1,($B$11=DATABASE!$E$2:$E$3222) * (G3=DATABASE!$T$2:$T$3222) * (G4=DATABASE!T2:T3222),0),26),"")"
  v(12, 1) = "H24": v(12, 2) = "=IFERROR(INDEX(DATABASE!$D$2:$AG$3222,MATCH(1,($B$11=DATABASE!$E$2:$E$3222) * (H3=DATABASE!$T$2:$T$3222) * (H4=DATABASE!U2:U3222),0),24),"")"
  v(13, 1) = "H28": v(13, 2) = "=IFERROR(INDEX(DATABASE!$D$2:$AG$3222,MATCH(1,($B$11=DATABASE!$E$2:$E$3222) * (H3=DATABASE!$T$2:$T$3222) * (H4=DATABASE!U2:U3222),0),26),"")"
  v(14, 1) = "I24": v(14, 2) = "=IFERROR(INDEX(DATABASE!$D$2:$AG$3222,MATCH(1,($B$11=DATABASE!$E$2:$E$3222) * (I3=DATABASE!$T$2:$T$3222) * (I4=DATABASE!U2:U3222),0),24),"")"
  v(15, 1) = "I28": v(15, 2) = "=IFERROR(INDEX(DATABASE!$D$2:$AG$3222,MATCH(1,($B$11=DATABASE!$E$2:$E$3222) * (I3=DATABASE!$T$2:$T$3222) * (I4=DATABASE!U2:U3222),0),26),"")"
  v(16, 1) = "J24": v(16, 2) = "=IFERROR(INDEX(DATABASE!$D$2:$AG$3222,MATCH(1,($B$11=DATABASE!$E$2:$E$3222) * (J3=DATABASE!$T$2:$T$3222) * (J4=DATABASE!U2:U3222),0),24),"")"
  v(17, 1) = "J28": v(17, 2) = "=IFERROR(INDEX(DATABASE!$D$2:$AG$3222,MATCH(1,($B$11=DATABASE!$E$2:$E$3222) * (J3=DATABASE!$T$2:$T$3222) * (J4=DATABASE!U2:U3222),0),26),"")"
  v(18, 1) = "M24": v(18, 2) = "=IFERROR(INDEX(DATABASE!$D$2:$AG$3222,MATCH(1,($B$11=DATABASE!$E$2:$E$3222) * (M3=DATABASE!$T$2:$T$3222) * (M4=DATABASE!U2:U3222),0),24),"")"
  v(19, 1) = "M28": v(19, 2) = "=IFERROR(INDEX(DATABASE!$D$2:$AG$3222,MATCH(1,($B$11=DATABASE!$E$2:$E$3222) * (M3=DATABASE!$T$2:$T$3222) * (M4=DATABASE!U2:U3222),0),26),"")"
  v(20, 1) = "N24": v(20, 2) = "=IFERROR(INDEX(DATABASE!$D$2:$AG$3222,MATCH(1,($B$11=DATABASE!$E$2:$E$3222) * (N3=DATABASE!$T$2:$T$3222) * (N4=DATABASE!U2:U3222),0),24),"")"
  v(21, 1) = "N28": v(21, 2) = "=IFERROR(INDEX(DATABASE!$D$2:$AG$3222,MATCH(1,($B$11=DATABASE!$E$2:$E$3222) * (N3=DATABASE!$T$2:$T$3222) * (N4=DATABASE!U2:U3222),0),26),"")"
  v(22, 1) = "O24": v(22, 2) = "=IFERROR(INDEX(DATABASE!$D$2:$AG$3222,MATCH(1,($B$11=DATABASE!$E$2:$E$3222) * (O3=DATABASE!$T$2:$T$3222) * (O4=DATABASE!U2:U3222),0),24),"")"
  v(23, 1) = "O28": v(23, 2) = "=IFERROR(INDEX(DATABASE!$D$2:$AG$3222,MATCH(1,($B$11=DATABASE!$E$2:$E$3222) * (O3=DATABASE!$T$2:$T$3222) * (O4=DATABASE!U2:U3222),0),26),"")"
  v(24, 1) = "P24": v(24, 2) = "=IFERROR(INDEX(DATABASE!$D$2:$AG$3222,MATCH(1,($B$11=DATABASE!$E$2:$E$3222) * (P3=DATABASE!$T$2:$T$3222) * (P4=DATABASE!V2:V3222),0),24),"")"
  v(25, 1) = "P28": v(25, 2) = "=IFERROR(INDEX(DATABASE!$D$2:$AG$3222,MATCH(1,($B$11=DATABASE!$E$2:$E$3222) * (P3=DATABASE!$T$2:$T$3222) * (P4=DATABASE!V2:V3222),0),26),"")"
  v(26, 1) = "Q24": v(26, 2) = "=IFERROR(INDEX(DATABASE!$D$2:$AG$3222,MATCH(1,($B$11=DATABASE!$E$2:$E$3222) * (Q3=DATABASE!$T$2:$T$3222) * (Q4=DATABASE!U2:U3222),0),24),"")"
  v(27, 1) = "Q28": v(27, 2) = "=IFERROR(INDEX(DATABASE!$D$2:$AG$3222,MATCH(1,($B$11=DATABASE!$E$2:$E$3222) * (Q3=DATABASE!$T$2:$T$3222) * (Q4=DATABASE!U2:U3222),0),26),"")"
  v(28, 1) = "R24": v(28, 2) = "=IFERROR(INDEX(DATABASE!$D$2:$AG$3222,MATCH(1,($B$11=DATABASE!$E$2:$E$3222) * (R3=DATABASE!$T$2:$T$3222) * (R4=DATABASE!U2:U3222),0),24),"")"
  v(29, 1) = "R28": v(29, 2) = "=IFERROR(INDEX(DATABASE!$D$2:$AG$3222,MATCH(1,($B$11=DATABASE!$E$2:$E$3222) * (R3=DATABASE!$T$2:$T$3222) * (R4=DATABASE!U2:U3222),0),26),"")"
  v(30, 1) = "T24": v(30, 2) = "=IFERROR(INDEX(DATABASE!$D$2:$AG$3222,MATCH(1,($B$11=DATABASE!$E$2:$E$3222) * (T3=DATABASE!$T$2:$T$3222) * (T4=DATABASE!U2:U3222),0),24),"")"
  v(31, 1) = "T28": v(31, 2) = "=IFERROR(INDEX(DATABASE!$D$2:$AG$3222,MATCH(1,($B$11=DATABASE!$E$2:$E$3222) * (T3=DATABASE!$T$2:$T$3222) * (T4=DATABASE!U2:U3222),0),26),"")"
  v(32, 1) = "U24": v(32, 2) = "=IFERROR(INDEX(DATABASE!$D$2:$AG$3222,MATCH(1,($B$11=DATABASE!$E$2:$E$3222) * (U3=DATABASE!$T$2:$T$3222),0),24),"")"
  v(33, 1) = "U28": v(33, 2) = "=IFERROR(INDEX(DATABASE!$D$2:$AG$3222,MATCH(1,($B$11=DATABASE!$E$2:$E$3222) * (U3=DATABASE!$T$2:$T$3222),0),26),"")"
  v(34, 1) = "V24": v(34, 2) = "=IFERROR(INDEX(DATABASE!$D$2:$AG$3222,MATCH(1,($B$11=DATABASE!$E$2:$E$3222) * (V3=DATABASE!$T$2:$T$3222),0),24),"")"
  v(35, 1) = "V28": v(35, 2) = "=IFERROR(INDEX(DATABASE!$D$2:$AG$3222,MATCH(1,($B$11=DATABASE!$E$2:$E$3222) * (V3=DATABASE!$T$2:$T$3222),0),26),"")"
  v(36, 1) = "B26": v(36, 2) = "=IFERROR(INDEX(DATABASE!$D$2:$AG$3222,MATCH('Pricing Grid'!$B$11,DATABASE!$E$2:$E$3222,0),1),"")"
  v(37, 1) = "B27": v(37, 2) = "=IFERROR(INDEX(DATABASE!$D$2:$AG$3222,MATCH('Pricing Grid'!$B$11,DATABASE!$E$2:$E$3222,0),5),"")"
  v(38, 1) = "B28": v(38, 2) = "=IFERROR(INDEX(DATABASE!$D$2:$AG$3222,MATCH('Pricing Grid'!$B$11,DATABASE!$E$2:$E$3222,0),3),"")"
  v(39, 1) = "B29": v(39, 2) = "=IFERROR(INDEX(DATABASE!$D$2:$AG$3222,MATCH('Pricing Grid'!$B$11,DATABASE!$E$2:$E$3222,0),4),"")"
  v(40, 1) = "B31": v(40, 2) = "=IFERROR(INDEX(DATABASE!D2:AG3222,MATCH(B11,DATABASE!E2:E3222,0),7),0)"
  Application.EnableEvents = False
  For i = 1 To UBound(v)
    With Range(v(i, 1))
      If Not Intersect(Target, .Cells) Is Nothing Then
        If Len(.Value2) = 0 Then
          .Formula = v(i, 2)
        End If
      End If
    End With
  Next
  Application.EnableEvents = True
End Sub

1 Ответ

1 голос
/ 18 марта 2020

Это проблема:

...(G4=DATABASE!T2:T3222),0),24),"")" 

Двойные кавычки в строках нужно удвоить:

...(G4=DATABASE!T2:T3222),0),24),"""")"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...