Я не могу понять это. Я пытаюсь сделать свой формуляр более динамичным. Но всегда говорит, что prev не найдено, но я установил prev как рабочий лист. PrevSheetName возвращает имя предыдущего листа (что работает). Пожалуйста, помогите мне, в моем другом коде я всегда пытался использовать «ActiveSheet.Previous», но, похоже, он не работает с формулами.vba - ссылки на рабочие листы в формуле
Set prev = Worksheets(PrevSheetName)
Set rng = ActiveSheet.Range("D3")
rng.FormulaR1C1 = "=SUMIF(prev!C[1],RC[-2],prev!C[5])"
Range("D3").Copy Range("D4:D" & lRow)
Это мой первый код и работает
Set rng = ActiveSheet.Range("D3")
rng.FormulaR1C1 = "=SUMIF('Projekt 1'!C[1],RC[-2],'Projekt 1'!C[5])"
Range("D3").Copy Range("D4:D" & lRow)
и это мой PrevSheetName, уже ставит имя в " "
Function PrevSheetName(Optional ByVal WS As Worksheet = Nothing) As String
Application.Volatile True
Dim S As String
Dim Q As String
If IsObject(Application.Caller) = True Then
Set WS = Application.Caller.Worksheet
If WS.Index = 1 Then
With Application.Caller.Worksheet.Parent.Worksheets
Set WS = .Item(.Count)
End With
Else
Set WS = WS.Previous
End If
If InStr(1, WS.Name, " ", vbBinaryCompare) > 0 Then
Q = "'"
Else
Q = vbNullString
End If
Else
If WS Is Nothing Then
Set WS = ActiveSheet
End If
If WS.Index = 1 Then
With WS.Parent.Worksheets
Set WS = .Item(.Count)
End With
Else
Set WS = WS.Previous
End If
Q = vbNullString
End If
PrevSheetName = Q & WS.Name & Q
End Function
Я просто хочу, чтобы обменять «Projekt 1 'с предыдущим листом
Как я вижу, вы используете« prev »как часть формуляра, как вы бы набирали его на листе excel и а не как переменная VBA. попробуйте следующее: заменить '' = SUMIF (prev! C [1], RC [-2], prev! C [5]) "' с '" = SUMIF ("& prev.name &"! C [1 ], RC [-2], "& prev.name &"! C [5]) "' Процесс, который вы делаете в vba, аналогичен тому, как вводить формуляр в ячейку excel вручную. Это означает, что имя рабочего листа должно быть частью значения вашей ячейки, а не именем переменной. – psychicebola
спасибо, но как я его исправить? – ANNEH
Я отправил свой комментарий на ранний ;-) Теперь исправлено – psychicebola