#vba #excel
#vba #excel
Вопрос:
Мне нужно добавить функцию на мой рабочий лист с помощью макросов. Мне нужно передать переменную в функцию Excel, поскольку myWorkbook
и sheetName
, на которые она будет ссылаться, являются переменными.
MyRange = Workbooks(myWorkbook).Sheets(sheetName).Range("H11:H32")
theFormula = "=SUM(" amp; MyRange amp; ")"
Range("B2").Select
ActiveCell.FormulaR1C1 = theFormula
Я получаю ошибку 13: Type Mismatch
.
Я не заядлый программист на VBA, и это доставляет мне большую головную боль. Я пытался определить theFormula
как строку, но без надежды.
Ответ №1:
Вам необходимо преобразовать объект Range в строковое представление диапазона, например, чтобы задать формуле значение =SUM($H$11:$H$32)
, которое вы бы;
Dim MyRange As Range
set MyRange = Workbooks(myWorkbook).Sheets(sheetName).Range("H11:H32")
theFormula = "=SUM(" amp; MyRange.Address(ReferenceStyle:=xlR1C1) amp; ")"
Range("B2").Select
ActiveCell.FormulaR1C1 = theFormula
Или, если вам не нужна нотация R1C1, вы можете;
ActiveCell.Formula = "=SUM(H11:H32)"
Комментарии:
1. Это похоже на работу, но даже если я ссылаюсь на другую книгу, у меня есть желаемый диапазон из той же книги .. вы знаете, что может быть не так?
2. Не уверен, что я правильно понимаю, вы имеете в виду, что B2 находится в другой книге / листе? Если это так, измените на
ThisWorkbook.ActiveSheet.Range("B2").Formula = "=SUM(" amp; MyRange.Address(External:=True) amp; ")"
Ответ №2:
Sub MakeSum(sBookName As String, sSheetName As String)
Dim rMyRange As Range
Set rMyRange = Workbooks(sBookName).Sheets(sSheetName).Range("H11:H32")
If rMyRange.Parent.Parent.Name = ActiveWorkbook.Name Then
With ActiveSheet
'same sheet, so just use address
If rMyRange.Parent.Name = .Name Then
.Range("B2").Formula = "=SUM(" amp; rMyRange.Address amp; ")"
Else
'same workbook, different sheet, so prepend sheet name
'single quotes prevent error when there's a space in the sheet name
.Range("B2").Formula = "=SUM('" amp; rMyRange.Parent.Name amp; "'!" amp; rMyRange.Address amp; ")"
End If
End With
Else
'not the same workbook, use external address
ActiveSheet.Range("B2").Formula = "=SUM(" amp; rMyRange.Address(, , , True) amp; ")"
End If
End Sub
Ответ №3:
Программно это не сработает — вы говорите, что формула ячейки должна быть равна «=SUM (» amp; MyRange amp; «)» — однако, когда это фактически оценивается?
является ли формула =SUM(» amp; MyRange amp; «)
работает?
Комментарии:
1. Нет, я уже пробовал с этим .. на самом деле я хочу отредактировать ячейку, вставив это в виде строки… все, что мне нужно… если я делаю «=» amp; Range1, это работает.. что странно.. поэтому, когда я добавляю функцию Excel, она перестает работать…
2. Это неправильно.
MyRange
это переменная, и эта строка будет оцениваться=SUM([value of MyRange])
правильно. В других ответах объясняется, как решить эту проблему.