我是VBA的新手。我正在读取制表符分隔文件并解析它。 文件中的每一行都包含行索引,col索引和标签:例如:
0 0 "John"
1 1 "Lena"
9 14 "John"
我想为每个标签分配一个颜色,并用指定的颜色填充匹配的[row,col]。 标签可能出现在多个文件行中。 另外,我应该创建一个图例(在工作表的不同位置),它描述了为每种颜色分配的标签。
在c#中我会使用一个字典:当我看到一个新标签时,我会检查字典中是否存在这个标签,如果是,我会使用它现有的颜色,如果没有,我会在字典中添加一个新条目。 在VB中执行此操作的最佳方法是什么?我应该使用什么数据结构来检查当前标签是否存在,如果存在,使用它的颜色?
谢谢, 李
答案 0 :(得分:0)
这个怎么样:我使用ColorIndex
属性通过从1
开始递增来设置单元格的颜色:
Dim dict As New Scripting.Dictionary
Sub ReadTextFile()
Dim fso As FileSystemObject, filePath As String, data As Variant, colorIndex As Integer
filePath = "C:\Users\Alex\Desktop\input.txt" //Change this
Set fso = New FileSystemObject
Set txtStream = fso.OpenTextFile(filePath, ForReading, False)
colorIndex = 1
Do While Not txtStream.AtEndOfStream
inputLine = txtStream.ReadLine
data = Split(inputLine, vbTab)
With Worksheets("Sheet1")
.Cells(CInt(data(0)), CInt(data(1))) = data(2)
.Cells(CInt(data(0)), CInt(data(1))).Interior.colorIndex = GetColor(CStr(data(2)), colorIndex)
End With
colorIndex = colorIndex + 1
Loop
txtStream.Close
End Sub
Function GetColor(label As String, colorIndex As Integer)
If Not dict.Exists(label) Then
dict.Add label, colorIndex
GetColor = colorIndex
Exit Function
Else
GetColor = dict(label)
End If
End Function
我唯一没有做的就是添加图例,但我相信你可以迭代字典并在工作表上写到你想要的任何地方。