Макрос Excel — настройка формулы ячейки с ошибкой

#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]) правильно. В других ответах объясняется, как решить эту проблему.