【发布时间】:2014-03-21 21:28:25
【问题描述】:
第一篇文章 - 刚开始使用 VBA,最后一次编程是在 Fortran 中......几年前......我会尽我所能尽可能清楚地描述我的问题。如果需要更多信息,请询问。
我正在努力转换为许多设施提供的数据,每个设施都有自己的工作表。需要将数据(除其他事项外)传输到新工作表中,其格式使其适合数据透视表,设施名称位于第一列。由于工作表名称本身相对难以理解,我想使用字典将工作表名称映射到更有用的设施名称。
我的第一步是生成工作表名称列表:
Sub SheetNames()
Columns(1).Insert
For i = 1 To Sheets.Count - 1
Cells(i, 1) = Sheets(i).name
Next i
End Sub
获得工作表名称列表后,我在它们旁边的列中填写了我希望它们映射到的名称。
然后我用
填充字典Set sites = New Dictionary
more = True
rw = 4
While more
sites.Add Worksheets("SiteMapping").Cells(rw, 1), Worksheets("SiteMapping").Cells(rw, 2)
rw = rw + 1
If Len(Worksheets("SiteMapping").Cells(rw, 1)) = 0 Then more = False
Wend
For Each v In sites.Keys
Debug.Print "Sheet: " & v & " Site: "; sites.Item(v)
Next
最后检查以确保它确实有效(确实有效)。
然后,稍后在子例程中,我想使用站点字典来填充新工作表的第一列中的一系列 x 单元格(名称存储在变量“SheetName”中),使用以下内容:
i = 1
For n = 1 To Worksheets.Count - 2
v = Worksheets(n).Name
Worksheets(SheetName).Cells(i, 1).Value = sites.Item(v)
Debug.Print v & ", " & sites.Item(v)
i = i + 1
Next n
(故意忽略最后两张纸。) 分配什么也没做,所以我想也许我只是把东西弄乱了(仍然完全有可能!),所以我添加了调试语句,但我得到的只是:“工作表名称,” 所以我担心我的映射表(“SiteMapping”)单元格中的值实际上与站点字典的键中的值不匹配。所以,我做了一个手动检查:
k = Worksheets(2).Name
h = sites.Keys(42)
Debug.Print "Sites key is " & h
If Worksheets(2).Name = sites.Keys(42) Then
Debug.Print "Yay!"
Else
Debug.Print "Boo!"
End If
反应是肯定的(“耶!”),但是当我尝试时:
Debug.Print sites.Item(h) & " is the value"
我的输出仍然是“is the value”。
很明显,当涉及到从字典中调用值时,我在这里做错了。任何人都可以帮助我吗?提前致谢!
编辑 2014-03-21 - 感谢 Simoco!就是这样!作为一个新手,仍在研究为什么,但又让它运行起来了!
【问题讨论】: