我正在阅读大型xml文件(600mb)并使用excel文件检查值。我在使用几个循环并花费时间执行。我想将条件语句中的一些循环替换为
这样:
此函数将工作表名称作为字符串,并尝试查找工作表(对于所有xml节点)
function searchValue( val, rng, worksheet )
set objWorksheet = nothing
For Iter = 1 To objWorkbook.Worksheets.Count
If objWorkbook.Worksheets(Iter).Name = worksheet then
Set objWorksheet = objWorkbook.Worksheets(Iter)
exit for
end if
next
如果我使用选择案例并传递下面的工作表名称的工作表编号
,该怎么办?sub getSheetNumber( worksheet)
select case worksheet
case "A"
getSheetNumber = 1
case "B"
getSheetNumber = 2
case "C"
getSheetNumber = 3
case "D"
getSheetNumber = 4
case "E"
getSheetNumber = 5
case "F"
getSheetNumber = 6
case else
getSheetNumber = worksheet
这是一个好主意还是有其他方法可以避免循环
答案 0 :(得分:2)
可以计算字母到数字的映射:
>> For Each c In Split("A B C D E F")
>> WScript.Echo c, Asc(c) - Asc("A") + 1
>> Next
>>
A 1
B 2
C 3
D 4
E 5
F 6
答案 1 :(得分:1)
除了计算值之外,另一个选择是使用字典:
Set getSheetNumber = CreateObject("Scripting.Dictionary")
getSheetNumber.Add "A", 1
getSheetNumber.Add "B", 2
getSheetNumber.Add "C", 3
getSheetNumber.Add "D", 4
getSheetNumber.Add "E", 5
getSheetNumber.Add "F", 6
...
WScript.Echo getSheetNumber(worksheet)
当您想要实现简单的键值映射时,使用Select..Case
是过度的。
答案 2 :(得分:0)
假设这是您的要求:
此函数将工作表名称作为字符串并尝试查找 sheet(适用于所有xml节点)
为什么不使用Excel本身查找工作表?
function searchValue(val, rng, worksheet)
set objWorksheet = nothing
On error resume next
Set objWorksheet = objWorkbook.Worksheets(worksheet)
On error goto 0
If objWorksheet Is Nothing then
' Error! worksheet not found
End if
<..>