2015-12-11 18 views
0

我試圖通過一系列Excel選項卡(標記爲Wk 1到Wk 52)並提取存儲在第1周(K40)中的餘額值,並將此值轉換爲Week 2(D10)。 (第3周將與第2周等進行比較)請參閱附件圖像。做excel標籤有索引你可以參考?這樣做的原因是我下面的僞代碼:問:在帶有索引的Excel選項卡之間移動

For ws in Worksheets 'Cycle through all worksheets 
     IF RIGHT(ws.name, 2) < RIGHT(ws.name + 1,2) THEN 
'As the worksheets are labelled Wk 1 Wk 2 etc. RIGHT 2 will only take the number values, not Wk 
     Select ws.name 
     tmpVar = Range("K40") 
     Select ws.name + 1 
     D10.Value = tmpVar 
     END IF 
    Next ws 

如果有人可以讓我知道如果Excel有標籤索引我可以參考,這將是巨大的。我瀏覽了微軟網站(https://msdn.microsoft.com/en-us/library/office/aa221564(v=office.11).aspx),但我需要的是能夠移動到下一個選項卡(ws.name + 1),因爲這是我不知道如何得到的。對新手問題抱歉 - 我仍然熟悉VBA。

Balance Sheet Sample

回答

2

是的,你可以通過它的索引號是指一個工作表。

dim w as long 
for w = 1 to worksheets.count - 1 
    with worksheets(w) 
     If IsNumeric(Right(.Name, 2)) And IsNumeric(Right(Worksheets(w + 1).Name, 2)) Then 
      if CLng(right(.name, 2)) = CLng(right(worksheets(w + 1).name, 2)) - 1 then 
       worksheets(w + 1).cells(10, 4) = .cells(40, 11).value2 
      end if 
     end if 
    end with 
next w 
+0

請問worksheets.count - 1還拿考慮到我隱藏的兩張牀單?它們是隱藏的,因爲它們只是用作命名範圍和默認模板。 – azurekirby

+0

奇怪 - 我嘗試使用的代碼,它提到了類型不匹配。任何想法爲什麼? – azurekirby

+0

隱藏的工作表不應該是一個問題,但數學運算不能在非數字值上執行。我已經添加了一些代碼,以確保工作表名稱的正確兩個字符可以轉換爲數字實體。工作表名稱的完整列表(注意你不想處理的名單)將會很有幫助。 – Jeeped

0

Worksheets收集確實有一個索引屬性,並且可以通過這個索引來引用的工作表(如Jeeped示出)

然而,片材的索引是在Excel中顯示其當前位置(統計左邊的選項卡,包括計算隱藏的表格)。這個位置可以由用戶改變,所以在這種情況下使用是有風險的。

更好地使你的ws.name + 1實際工作

Dim ThisWeekNum as long 
Dim wsThisWeek as Worksheet 
Dim wsNextWeek as Worksheet 

ThisWeekNum = 1 
Set wsThisWeek = Worksheets("Wk " & ThisWeekNum) 
Set wsNextWeek = Worksheets("Wk " & Val(Right$(wsThisWeek.Name, 2)) + 1) 

注意,用戶還可以重命名工作表,所以這是有風險的過於

+0

謝謝你這個克里斯 - 我會給它一個鏡頭,讓你知道我怎麼走! – azurekirby

+0

@azurekirby我認爲你已經做出了一個糟糕的選擇(基於你的接受) - 代碼取決於用戶不重新排列表單_並且不重新命名錶單,並且沒有隱藏表單。 –

+0

嗨克里斯 - 感謝這些觀點。我想過了,這張開支表格根本不會被編輯 - 一旦我創建了52張(我這樣做),就不會再添加其他任何張。我已經把它包含在一個註釋中。不過,我也認爲你的方法很好,我將考慮未來變化的選擇。 – azurekirby

相關問題