我一直在嘗試創建代碼以將列表中的條目從一個工作簿比較爲另一個工作簿(主列表)上的兩個列表。最終目標是建立一個宏,該宏將運行並標記列表中的條目是否在兩個主列表之一中找到,稱爲「統計」和「非統計」(分別爲表1和2),然後相應標記。爲了做到這一點,我需要將主列表工作簿的兩個範圍定義爲在Range.Find方法中使用的變量或任何其他可行的方法。將多個外部工作簿範圍設置爲當前工作簿的變量Range.Find宏
的列表被設置爲這樣:
- 在其具有針對它的檢查運行(以及其中所述代碼駐留)原始列表中,通常約150條目的輸出,過濾(通過預先確定的標準),以便只有大約100個可見,並且數字在標有「變更」的工作表上每天的輸出變化
- 「主統計列表」工作簿由兩張表組成另一個宏填充和添加條目。 Sheet1被命名爲「統計」,幷包含所有被視爲「統計」的條目,Sheet2被命名爲「非統計」,幷包含所有被視爲非統計的條目。這些列表在成千上萬行中,所以我儘量避免使用.Select函數。
- 這兩個主列表都存儲在A列中,從A1開始,而正在檢查的「Changes」列表從A2開始(由於標題)。
這裏是我迄今爲止爲剛剛範圍內引用代碼:
'Establish the list references
Dim MSL As Workbook 'Master Statistical List
Dim SP As Worksheet 'Statistical Properties
Dim NSP As Worksheet 'Non-statistical Properties
Dim TWS As Workbook 'This Worksheet - the original one in which this code resides
Set MSL = Workbooks.Open(Filename:="Filepath\Master Statistical List.xlsm")
Set SP = MSL.Worksheets("Statistical") 'Alternatively .Worksheets(1)
Set NSP = MSL.Worksheets("Non-statistical") 'Alternatively .Worksheets(2)
Set TWS = ThisWorkbook
'Establish the Range references
'Statistical Properties List
SP.Activate
Dim rngStat As Range
Set rngStat = Range("A1", .Range("A1").End(xlDown))
'check if it actually worked
rngStat.Select 'it seems to work
Range("B1").Select 'select random cell so we know if selecting it again actually works (I run through this line-by-line to debug)
TWS.Activate 'Lets go back to the current workbook and then see if it still works!
rngStat.Select 'Here be errors
我將運行兩個「轉變」的範圍和類似點心一套連擊非統計一。
我試過幾個不同的解決方案,包括使用以如下參數,例如:
With SP
Set rngStat = Range("A1", SP.Range("A1").End(xlDown))
End With
或將SP在.Range功能的前如上圖所示,但一旦當前工作表被改變沒有什麼作品。
是否有一種方法可以將rngStat設置爲普遍引用從表格A1的條目列表到最終條目的條目列表,以便可以在後面的宏中使用任何循環或函數?重要的是,範圍不是設置單元格,而是列A中的最後一個條目,因爲條目的數量在源表單上始終發生變化,並且在主列表上增加。
不知道這裏是否有拼寫錯誤,但是在With With SP中,您應該將「anchor」添加到Range(),即'.Range(...)'另外在主代碼中,您錨定'.Range(「A1」)。End(xlDown)'到...什麼?沒有「With」語句顯示。 – BruceWayne
看起來你大多需要明確指出每個範圍,包括其工作表。無論哪個表單處在這個例子中,我還包含了對代碼工作簿的引用。如果不相關,你可以刪除它,但是如果工作簿也需要明確引用,請將其保留:Set rng = Workbooks(ThisWorkbook.Name).Sheets(「Sheet2」)。Range(「A1」,Workbooks (ThisWorkbook.Name).Sheets(「Sheet2」)。Range(「A1」)。End(xlDown))' – David
感謝您的幫助。 –