2012-05-08 59 views
1

我已經用下面的公式在我sheet.Ive一些動態命名的區域讓他們動態簡稱:動態命名的區域不工作時與間接

= $ A $ 1:rowend($ A $ 1)

「iec_air」 也有另一種命名的範圍:「iec_ground」

凡行「A」

命名範圍如下命名爲達到行一端返回一個空單元格前的最後一個單元格的自定義功能

現在問題是當我應用數據驗證的單元格,並選擇直接引用「iec_air」的列表,但它試圖使用間接(「iec_」&「空氣」)實現相同的事情時,它不起作用

當我命名的範圍是靜態它是工作,而不是它不是。任何想法如何解決它?

+0

你能創建引用'=間接一個新的名稱( 「IEC _」 和 「空氣」)'和使用新名稱作爲您的驗證列表? –

+0

要使用動態範圍請參閱此:) http://www.contextures.com/xldataval02.html –

+0

@SiddharthRout我使用相同的技術..事情是如果我的驗證列表是一個公式而不是靜態引用,然後間接不會工作 –

回答

1

你知道如何使用VBA嗎? 您可以做的其中一件事是在工作表模塊中創建一個事件,並根據空白單元格動態調整指定範圍的大小。

Sub setRangeDynamically() 

dim oRange  as range 

'Set range from cell(1,1) until the first blank cell downwards 
set oRange = thisworkbook.sheets("blabla").range(cells(1,1),cells(1,1).end(xldown)) 
thisworkbook.Names.Add Name:="MyRange", RefersTo:=oRange 
end sub 

要創建數據驗證:

With thisworkbook.sheets("BlaBla").range("B2").Validation 
    .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ 
    xlBetween, Formula1:="=MyRange" 
End With 
+0

這將是正確的做法。動態命名範圍和INDIRECT()公式不會很好,因此命名範圍需要是靜態的。通過這樣的VBA,您可以以不同的方式保留「動態」。 –

+0

我知道這種方法,但有大約100個命名範圍,我對於爲每個人編寫代碼都很猶豫。 –

+0

使用<> .Cells.SpecialCells(xlCellTypeLastCell).row(和column)來設置一個範圍,以確保不會錯過任何內容,設置數組大小並根據關鍵字動態操作數據?我不知道用戶將被複制粘貼或你實際上的意思是... –