2015-03-02 66 views
0

所以我試圖用這個子程序做幾件事情,但不能讓VBA執行.FormulaArray函數。在數組公式中部署VBA單元格參考

  1. 創建一個名爲範圍內使用偏移& LASTROW功能
  2. 使用單元格引用插入到數組公式

-

Sub namedrange() 
    Dim firstrow As Long 
    Dim LastRow As Long 
    Dim ColToLetter, absolute, Title, mc, mc1 

    ActiveCell.Offset(0, -1).Select 
    absolute = ActiveCell.Address 
    LastRow = ActiveSheet.Cells(Rows.Count, ActiveCell.Column).End(xlUp).Row 
    firstrow = ActiveCell.Row 
    ColLetter = Mid(ActiveCell.Address, 2, 1) 
    ActiveSheet.Range(ColLetter & firstrow & ":" & ColLetter & LastRow).Name = Range(ColLetter & "1").Value 
    Title = Range(ColLetter & "1").Value 
    ActiveCell.Offset(0, 1).Select 
    mc = ActiveCell.Offset(-1, 0).Address 
    mc = Mid(mc, 2, 3) 
    mc1 = Replace(mc, "$", "") 

    ActiveCell.FormulaArray= "=IF(ROWS(mc & "":"" & mc1)>SUM(IF(FREQUENCY(IF(Title<>"""",MATCH(Title,Title,0)),ROW(Title)-ROW(absolute)+1),1)),"""",INDEX(Title,SMALL(IF(FREQUENCY(IF(Title<>"""",MATCH(Title,Title,0)),ROW(Title)-ROW(absolute)+1),ROW(Title)-ROW(absolute)+1),ROWS(mc & "":"" & mc1))))" 
End Sub 

公式欄顯示什麼VBA函數正在輸出,這不是我想要的。我不知道爲什麼它不會輸出我創建的引用,如mc應該是「$ A $ 2」而不是「mc」。

而且當我嘗試執行FormulaArray代碼中,我得到一個運行時錯誤1004「無法設置範圍類的FormulaArray屬性」

+0

在你的語句中'行(mc&「」:「」&mc1)'你的雙引號計算爲兩個空字符串。真正使用CHR(34)來獲取字符串中的引號。 – Kyle 2015-03-02 19:43:23

回答

0

.FormulaArray內容有一定的錯別字。下面是它看起來應該像(假設所有上面的代碼是罰款):

ActiveCell.FormulaArray= "=IF(ROWS(" & mc & ":" & mc1 & ")>SUM(IF(FREQUENCY(IF(Title<>" & chr(34) & chr(34) & ",MATCH(Title,Title,0)),ROW(Title)-ROW(absolute)+1),1))," & chr(34) & chr(34) & ",INDEX(Title,SMALL(IF(FREQUENCY(IF(Title<>" & chr(34) & chr(34) & ",MATCH(Title,Title,0)),ROW(Title)-ROW(absolute)+1),ROW(Title)-ROW(absolute)+1),ROWS(" & mc & ":" & mc1 & "))))" 

在一般情況下,請記住,如果你要打印到一個字符串變量的值,你可以不寫"a=mc+3"而是a = " & mc & "+3"

+0

啊,這就是爲什麼它不起作用,我不得不嘗試,看看它是如何工作的。謝謝你們。 – Zebra 2015-03-02 20:19:01

+0

好吧,那麼如何打印字符串中其他引用的值? IF(標題&<> 我有「標題」和「絕對」作爲我不能打印 – Zebra 2015-03-02 20:38:25

+0

@Zebra邏輯總是相同的引用。如果你想在變量的值,你總是要嵌套它,就像我上面展示的那樣:'「IF(」&Title&「<>」' – 2015-03-02 20:45:23