VBA将工作表名称与文本列表匹配
我有一个城市名称的文本列表,我需要检查这些名称是否是工作表的名称,如果不是,则使用所述名称创建一个新的工作表 另一方面,如果列表中有没有名字的工作表,我需要删除这些工作表VBA将工作表名称与文本列表匹配,vba,Vba,我有一个城市名称的文本列表,我需要检查这些名称是否是工作表的名称,如果不是,则使用所述名称创建一个新的工作表 另一方面,如果列表中有没有名字的工作表,我需要删除这些工作表 我已经试了几个小时这个问题,我很迷茫,它可能很简单,所以如果有人可以帮助,将非常感谢 下面是关于这段代码的大致情况。这是我的文本文件的外观,所以没有混淆 Sub Macro1() Dim sFileName, tmp As String Dim dict As New Dictionary Dim dictCopy As Ne
我已经试了几个小时这个问题,我很迷茫,它可能很简单,所以如果有人可以帮助,将非常感谢 下面是关于这段代码的大致情况。这是我的文本文件的外观,所以没有混淆
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
这是我从这里获取的文本读取代码:。我发现它比其他vba文本读取代码更优雅。但要使用它,需要选择“Microsoft脚本运行时”作为参考(从“工具”菜单)。此代码还使用字典
对象,该对象也需要该引用才能使用它。我使用这个对象而不是数组或其他集合,原因我将在下面解释
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
根据列表的长度,您可能会发现字典
对象有利于双循环等。这是因为它有.Exists
方法来查看它本身是否包含特定的值。我不知道它里面的机制,但是它比双循环技术快得多,特别是当你有很多条目要比较的时候。您应该注意,这些字典中的许多方法都使用键信息(而不是值)
最后部分:
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不允许您删除工作簿中的最后一张工作表。因此,如果您选择删除错误命名的工作表或至少合并该方法,如果没有工作表名称,则可能会遇到问题。必须删除集合中的所有工作表名称。您能展示一下您的尝试吗?如果你将文本列表导入到一种可以循环浏览的集合中,我想这相当容易。我没有任何代码来描述我所尝试过的内容,因为我尝试过的所有东西都坏得很厉害。我一直在试着做两个for循环,一个是看单元格中的城市名称,另一个是翻表,但我找不到有效的方法。哇,这对未来非常有帮助,但这不是我想要的,我应该更清楚,文本列表在excel中的单元格中,而不是在.txt函数中,但是这非常有用,我将保存它以备将来参考。上述内容仍然适用。如果列表位于任何列或连续单元格中,则可以轻松地循环以填充集合。你没有发布任何代码对我们也没有帮助。只是再看一次,完全有道理我如何转换它,我猜只是看到字典中的术语被使用,我认为它不能与excel一起工作。谢谢芒果!