2017-05-31 88 views
1

我試圖一個SUMIFS式添加到細胞中,由此我需要有可變是指另一片在另一個工作簿。但是,這在我的代碼中不起作用。僅供參考,我已經打開了msoFileDialogFilePicker的工作簿。參考變量工作表SUMIFS使用VBA

這裏是我必須添加配方的一部分,WS是工作表的對象:

Set fd = Application.FileDialog(msoFileDialogFilePicker) 

    With fd 
    .Title = "..." 
    .AllowMultiSelect = False 

    If .Show = True Then 
     If .SelectedItems(1) <> vbNullString Then 
      Filename = .SelectedItems(1) 
     End If 
    Else 
     Exit Sub 
    End If 
    Set wb = GetObject(Filename) 
    Set ws = wb.Sheets("ASEAN (EUR)") 

    With ws 
     YTDws.Range("$A$1:$D$" & usedRow).AutoFilter Field:=1, Criteria1:="Singapore" 
     If .Range("Q20").Value = "SINGAPORE" Then 
     usedRow2 = YTDws.Cells(Rows.Count, 1).End(xlUp).Row 
     Set rng = Range("C2:C" & usedRow2) 
     For Each cl In rng.SpecialCells(xlCellTypeVisible) 
      cl.Select 
      cl.FormulaR1C1 = "=SUMIFS('&ws.name&'!R[32]C[3]:R[243]C[3],'&ws.name&'!C[2], C[-1])" 
     Next cl 
     End If 
    End With 

End With 

我認爲問題在於這行代碼:

cl.FormulaR1C1 = "=SUMIFS('&ws.name&'!R[32]C[3]:R[243]C[3],'&ws.name&'!C[2], C[-1])" 

我已搜查在線的許多例子和這一個我從 this post得到它,我發現它與我的情況類似。但是,它似乎仍然無法正常工作,程序會提示我從工作簿中選擇工作表並表示找不到工作表ws.name。選擇工作表後,公式在單元格中看起來像這樣:=SUMIFS('[&ws.name&]ASEAN (EUR)'!R[32]C[3]:R[243]C[3],'[&ws.name&]ASEAN (EUR)'!C[2], C[-1])

請幫我查找問題,在此先感謝!

+1

只是這個'cl.Formula = 「= SUMIFS('」 &ws.Name&「'解決了這個問題 - [R [32] C [3]:[R [243] C [3],'」&ws.Name& 「'! - [R [33] C [2],C [-1]」',關鍵是要有空間和報價。 –

回答

3

幾件事情

  1. 你指的是在這裏Set rng = Range("C2:C" & usedRow2)
  2. 這片的SUMIFS()語法是=SUMIFS(Sum_range,Criteria_range1,Criteria1 ....)
  3. 使用SUMIFS()與外部工作簿時,公式如下

"=SUMIFS('[" & wb.Name & "]" & ws.Name & "'!" & YOUR_SUM_RANGE & ",'[" & wb.Name & "]" & ws.Name & "'!" & YOUR_CRITERIA_RANGE & "," & YOUR_CRITERIA & ")"

您只使用工作表名稱,而不是工作簿的名稱。

我的建議:手動打開工作簿並輸入公式(再次手動)。檢查公式的作品,然後使用該公式在你的代碼

+0

謝謝您的幫助!'Set ws = wb.Sheets(「ASEAN(EUR)」)'我的工作表變量包含我參考的工作簿,所以我認爲我不必在公式中再次添加工作簿,是嗎? –

+0

You必須但如果您將公式放在具有工作表的同一工作簿中,那麼您不需要工作簿名稱。 –

0

可能是你有錯誤的加入/ Concat的字符串...

如果你加入/ Concat的字符串,你需要使用&。例如:

sheetname = "mysheet" 
Range("D5").FormulaR1C1 = "=SUM(" & sheetname & "!C[-2])"