2015-11-18 63 views
1

我可能發現了一個新問題!我試圖選擇基於工作表名稱的工作表,使用變量作爲名稱,因爲這是循環的一部分。但是當工作表的名字是一個數字時,我遇到了麻煩,因爲如果我有,例如name = 5,那麼Worksheets(name)給我索引號5工作表和工作表(「name」)當然會查找一個名爲工作表「名稱」。工作表名稱爲數字時,索引號/工作表名稱與變量混淆

我可以做一個解決方法,爲每個工作表的名稱添加一個字母,以便它不被視爲數字,然後刪除這些字母,但有沒有更好的方法?

Sub RenameFiles() 
Dim source, old_filename, old_tab, new_filename As String 
Dim i As Integer 
source = Range("path").Value 
For i = 1 To Range("total_file_number").Value 
    old_filename = Worksheets("Import and combine").Cells(3 + i, 2).Value 
    old_tab = Worksheets("Import and combine").Cells(3 + i, 3).Value 
    new_filename = Worksheets(old_tab).Cells(1, 1).Value 'If old_tab is a number, VBA treats Worksheets(old_tab) as looking up a worksheet by index number rather than name 
    If Left(Worksheets(old_tab).Cells(1, 1).Value, 1) = "*" Then new_filename = Right(new_filename, Len(new_filename) - 2) 'removes asterisk from name 
    new_filename = Replace(new_filename, ">", "") 'removes > from name, since > can't be used in file names 
    Worksheets(old_tab).Name = new_filename 
    Worksheets("Import and combine").Cells(3 + i, 3).Value = new_filename 
    Name source & "\" & old_filename As source & "\" & new_filename 
Next i 
End Sub 
+1

使用'cstr(name)'。名稱是變量。它會將數字更改爲字符串。 –

回答

3

你的問題是由這一行造成的:

Dim source, old_filename, old_tab, new_filename As String 

...雖然它,直到你嘗試訪問工作表收集不表現出來。

這是一個非常常見的錯誤。上面一行中String類型的ONLY變量是最後一個變量。其他每個都是Variant類型。

當分配到變體old_tab時,任何數值將被存儲爲數字而不是字符串。問題在於Worksheets集合需要一個字符串值作爲返回正確工作表的鍵。

如果每個在上面一行的變量應該是String類型的,然後這樣做:

Dim source As String, old_filename As String, old_tab As String, new_filename As String 

...而現在old-tab是一個字符串,其值將正常工作作爲重點到工作表集合。

+0

在這裏,我想我已經找到了新的東西。謝謝,那正是問題所在! – Clay

+0

不客氣。 –

相關問題