2014-06-06 68 views
2

我正在處理一個項目,該項目要求我根據數組中某個位置的值選擇工作表。我用值填充了desArr()(String類型),desArr(0)包含了我想要引用的表的名稱。爲了避免用戶更改標籤名稱和弄亂代碼的問題,我試圖引用工作表的CodeName。使用數組引用名稱屬性

通常情況下,我能做到這一點:其中被列在VB編輯器的(Name)屬性指定Import

ThisWorkbook.Worksheets(Import.Name) 

。但是,現在我想要根據desArr(0)的值輸入輸入名稱。我試圖做以下但無濟於事:

ThisWorkbook.Worksheets(desArr(0).Name) 

ThisWorkbook.Worksheets(desArr(0) & ".Name") 

有沒有人有任何想法如何解決這個問題?

+0

ThisWorkbook.Worksheets(desArr(0))? – dee

+0

感謝您的回覆!但是,這隻會引用工作表的標籤名稱。因此,如果工作簿中的某個選項卡是「導出」並且desArr(0)包含「導出」,那麼它將起作用。我想要實現的是調用工作表的名稱屬性,該屬性可能與選項卡名稱相同也可能不同。有任何想法嗎? – user3715632

+1

也許收集工作表對象而不是他們的名字會更容易?如果在數組中有工作表對象而不是名稱,則可以調用desArr(0).Name請注意,如果您已適當設置工作表,則不需要「ThisWorkbook.WorkSheets」部分。 – CodeJockey

回答

2

只需使用:

Import 

這是引用一個表對象,而不需要知道它的Name財產的方式。只需使用其變量/對象名稱即可。以上是相當於,但遠低於錯綜複雜,

ThisWorkbook.Worksheets(Import.Name) 

你指的「代號」和(Name)「屬性」什麼不是屬性。這只是對象變量的名稱。從我的問題中可以推斷出,你的工作表對象被稱爲Import,所以就使用它。


編輯:

很難理解你的要求;澄清一點:

如果我理解正確的話,你有一個名爲「導入」表,並且希望能夠防止這種情況:

enter image description here

好,一些用戶決定了它重命名工作表是一個好主意。請注意,這將表單對象的Name屬性值更改爲"User-input crap"Name屬性和標籤上寫的東西都是總是一樣的;他們是同一件事;他們被鏈接到一對一。

但是,表單對象本身仍然被稱爲Import,或者其他任何東西。 (默認情況下它是Sheet1,但也許你在屬性窗口中改變了它。)請參閱:

enter image description here 不管用戶輸入的廢話,我仍然可以說,例如:

Import.Cells(1, 1).Value = "frog" 

我也可以這樣說,這是無用的複雜,但完全等同:

ThisWorkbook.Worksheets(Import.Name).Cells(1, 1).Value = "frog" 

可以也這樣說:

ThisWorkbook.Worksheets("User-input crap").Cells(1, 1).Value = "frog" 

但爲此,我不得不知道什麼用戶在工作表選項卡中鍵入,我不知道。

+0

感謝您的迴應!但我想引用Name屬性,因爲如果有人更改工作表選項卡名稱,我的代碼將失敗。使用Name屬性,用戶無需先通過VB編輯器對其進行更改即可輕鬆更改。另外,我知道每個工作表的名稱屬性,但我不知道名稱未輸入時的語法,但存儲在數組desArr(0)中。有什麼想法嗎? – user3715632

+0

上面應該明確回答你的問題。 –

+0

只是爲了澄清,這將是什麼張貼在標籤名稱,可以改變嗎?所以在這個例子中,導入將是該選項卡的名稱,但不一定是該表的名稱屬性? – user3715632