2015-03-13 3 views
0

Я пытаюсь использовать формулу SUMIF в VBA на основе листа, который может иметь разные имена.
Когда я на этом ActiveSheet (может меняться), я хочу добавить еще один шаблон лист из другой книги Template_test и поставить SUMIF формулу, на который ссылается на ActiveSheet.
Когда я запускаю макрос, возникает ошибка (1004) и останавливается по формуле.
VBA - имя переменной в формуле sumif

Это то, что у меня есть:

Sub test() 
    Set CurBook = ThisWorkbook 
    Dim wksheet As Worksheet 
    Set wksheet = ActiveSheet 

    MsgBox CurBook.Name & "_" & wksheet.Name 

'Open template 
    Workbooks.Open filename:= _ 
     "D:\Template_test.xlsm" 

'Copy new sheet 
    Sheets("template").Select 
    Sheets("template").Copy After:=CurBook.ActiveSheet 

'Close Template file 
    Windows("Template_test.xlsm").Activate 
    ActiveWindow.Close 

'SUMIF Formula in Template regarding wksheet in CurBook 
    Range("E11").Select 
    ActiveCell.FormulaR1C1 = _ 
     "=SUMIF('& wksheet &!C2,""=P-SEC"",'& wksheet &!C16)" End Sub 

Есть ли способ решить эту проблему и заставить его работать?

ответ

1

Я вижу две проблемы здесь:

I) wksheet является объектом типа «WorkSheet», а не строки, так что вы не можете использовать его в виде строки.

ii) wksheet доступен в коде, но не на листе, поэтому, когда вы вставляете функцию в ячейку, вам нужно выйти из строки и добавить имя.

Попробуйте это:

ActiveCell.FormulaR1C1 = _ 
    "=SUMIF('" & wksheet.name & "'!C2,""=P-SEC""," & wksheet.name & "!C16)" 

End Sub 

Примечание: Если имя листа имеет место в нем, вы должны окружить его в апострофы в формуле в противном случае это приведет к ошибке.

+0

Привет, старался с этим изменением. Получена такая же ошибка. Пробовал менять место «и» и всегда получал ту же самую ошибку. – sekiumo

+0

Попробуйте установить формулу равной переменной, поэтому testvar = "" = SUMIF ("& wksheet.name &"! C2, = "" P- SEC "", "& wksheet.name &"! C16) ", а затем debug.print переменную и вручную поместите значение в ячейку, чтобы узнать, что произойдет. – OpiesDad

+0

Извините, но не знаю, как работает debug.print. – sekiumo

Смежные вопросы