我有一個城市名稱的文本列表,我需要檢查並查看這些名稱是否爲工作表的名稱,以及是否不使用所述名稱創建新的工作表。VBA匹配工作表名稱到文本列表
另一方面,如果在列表中沒有任何名稱的工作表,那麼我需要刪除這些工作表。
我一直在嘗試這個問題幾個小時,我很失落,它可能是簡單的東西,所以如果有人可以幫助,將非常感激!
我有一個城市名稱的文本列表,我需要檢查並查看這些名稱是否爲工作表的名稱,以及是否不使用所述名稱創建新的工作表。VBA匹配工作表名稱到文本列表
另一方面,如果在列表中沒有任何名稱的工作表,那麼我需要刪除這些工作表。
我一直在嘗試這個問題幾個小時,我很失落,它可能是簡單的東西,所以如果有人可以幫助,將非常感激!
下面是關於這個代碼的代碼。這是我的文本文件的樣子,所以沒有混淆。
Sub Macro1()
Dim sFileName, tmp As String
Dim dict As New Dictionary
Dim dictCopy As New Dictionary
Dim ws As Worksheet
sFileName = "C:\Users\Mango\Desktop\names.txt"
'^ Specify the location of the txt file that you want read
With New Scripting.FileSystemObject
With .OpenTextFile(sFileName, ForReading)
Do Until .AtEndOfStream
tmp = .ReadLine
'^ This step should be noted. Calling .Readline more than once
' even in loop cause it to move to the next one.
dict.Add tmp, tmp
dictCopy.Add tmp, tmp
'^ add to our dictionary objects
Loop
End With
End With
這是我在這裏拿起形式的文本閱讀代碼:Read lines from a text file but skip the first two lines。我發現它比其他vba文本閱讀代碼更優雅。但是,您需要選擇一個「Microsoft腳本運行時」作爲參考(從工具菜單中)才能使用它。此代碼還使用Dictionary
對象,該對象還需要該引用才能使用它。我使用這個對象而不是數組或其他集合,原因我將在下面解釋。
For Each ws In ActiveWorkbook.Worksheets
If dict.Exists(ws.Name) = True Then
dict.Remove (ws.Name)
End If
Next
For Each j In dict.Items
Set ws = Worksheets.Add(after:=Worksheets(Worksheets.Count))
ws.Name = j
Next
根據您的名單有多長,你可能會發現Dictionary
對象利於雙循環等。這是因爲它有.Exists
方法來查看它是否包含其中的特定值。我不知道它裏面的機制,但它比雙循環技術更快,尤其是當你有很多條目要比較時。你應該注意到很多這些字典方法都使用了關鍵字info(而不是值)。
最後一部分:
Application.DisplayAlerts = False 'removes annoying save notification
For Each ws In ActiveWorkbook.Worksheets
If dictCopy.Exists(ws.Name) = False Then
ws.Delete
End If
Next
Application.DisplayAlerts = True
End Sub
我選擇了做它喜歡這樣,因爲Excel將不允許您刪除最後一個表中的工作簿。因此,如果您選擇刪除錯誤命名的工作表或者至少合併該方法,那麼如果沒有任何工作表名稱集合在集合中,則必須刪除所有這些工作表。
哇,這對未來是非常有用的,但它不是我正在尋找的東西,我應該更清楚,文本列表在excel中的單元格中,而不是在.txt函數中,但是這是非常有用的,我將保留以備將來參考。上面的 – user2255219 2013-04-07 23:11:33
仍然可以應用。如果列表位於任何列或連續的單元格中,則可以輕鬆地循環以填充集合。你沒有發佈任何代碼也沒有幫助我們。 – mango 2013-04-07 23:38:38
剛剛看了一遍,完全有道理,我可以如何轉換它,我想只是看到字典條款正在使用我間隔,並沒有認爲它可以與Excel的功能。謝謝芒果! – user2255219 2013-04-08 01:36:19
你能展示你試過的嗎?如果您將該文本列表導入可循環使用的集合類型,我會想象它很容易。 – mango 2013-04-07 18:38:05
我沒有任何代碼,我已經嘗試過,因爲我所嘗試過的所有東西都已經壞掉了。我一直試圖在對方內部做兩個循環,一個在單元格中查看城市名稱,另一個在表單中翻轉,但我無法找到有效的方式來完成。 – user2255219 2013-04-07 21:10:40