我有两张Lkups
和dataResponseTimes
张。我正在读取数据
最初都是阵列。
然后我使用函数GetAmbStpMappingsDict
从数组AmbSTPLkupArr
创建排序列表的字典。
工作表dataResponseTimes
的示例数据:
| Category | Code | Amb | Incidents | Total (hours) | Mean (min:sec) | 90th centile (min:sec) | HCP incidents | Date | Processed Date |
|------------|---------|-----------------|-----------|---------------|----------------|------------------------|---------------|------------|------------------|
| Category 1 | England | England | 27703 | 18:36:00 | 00:07:55 | 00:13:44 | | 01/10/2017 | 02/02/2018 07:45 |
| Category 1 | RX9 | East Midlands | 4588 | 14:47:36 | 00:08:25 | 00:14:52 | | 01/10/2017 | 02/02/2018 07:45 |
| Category 1 | RYC | East of England | 0 | 00:00:00 | 00:00:00 | 00:00:00 | | 01/10/2017 | 02/02/2018 07:45 |
工作表Lkups
的示例数据:
| Amb Code | STP |
|----------|---------------------------------|
| RYC | CAMBRIDGESHIRE AND PETERBOROUGH |
| RYC | HERTFORDSHIRE AND WEST ESSEX |
| RYC | MID AND SOUTH ESSEX |
| RX9 | DERBYSHIRE |
| RX9 | HUMBER, COAST AND VALE |
| ENGLAND | ENGLAND |
我的想法是创建一个结构,使得有一个字典键,例如' RYC'和相关列表,例如剑桥郡等:
| RYC | CAMBRIDGESHIRE AND PETERBOROUGH |
| | HERTFORDSHIRE AND WEST ESSEX |
| | MID AND SOUTH ESSEX |
我编写的代码创建了结构,但在子test
中我得到了
类型不匹配(错误13)
在线:Set sList = dict(key)
根据@Thomas Inzina的回答改编的子PrintItems
可以打印出字典dict,
的内容,但试图在没有For Each
循环的情况下使用它上述错误。
我假设这是因为,在没有循环键的情况下,我试图以某种方式快捷访问列表。调试显示dict(key)
正在返回empty
。
如果可能,我不想部署另一个循环(即密钥)。我尝试更改sList
的数据类型,其中,tbh,我没有预料到会有效。
我希望能够循环testArr
并使用来自testArr(rowIndex, 2)
的代码字段dataResponseTimes
的值来返回字典中的列表,用于该Code
testArr(rowIndex, 2)
1}};例如如果RYC
为Cambridgeshire....
,我想要如前所述的三个项目dataResponseTimes
。
最终目标是,我会在Code
中为相同的RYC
复制匹配次数的每一行,例如列表中的Lkups
。对于| Category 1 | RYC | East of England | 0 | 00:00:00 | 00:00:00 | 00:00:00 | | 01/10/2017 | 02/02/2018 07:45 |
,我将复制以下行3次(对于查找映射中的每个区域一次(Code
)。
sList.Count
因此,较短的路线可能只是通过CAMBRIDGESHIRE AND PETERBOROUGH
作为关键字Option Explicit
Public Sub test()
'Tools > references > ms scripting runtime
Dim sht As Worksheet
Set sht = ThisWorkbook.Worksheets("dataResponseTimes")
Dim dict As Dictionary
Set dict = GetAmbStpMappingsDict
Dim testArr()
testArr = sht.Range("A2:J4").Value
Dim rowIndex As Long
For rowIndex = LBound(testArr, 2) To UBound(testArr, 2)
Dim sList As Variant, stpName As String
Dim x As Long
Dim key As Variant
key = testArr(rowIndex, 2) 'testArr(rowIndex, 2) is a Variant/string
Set sList = dict(key) 'Error
For x = 0 To sList.Count - 1
stpName = sList.GetKey(x)
Debug.Print stpName
Next
Next rowIndex
End Sub
Public Function GetAmbStpMappingsDict() As Dictionary
Dim dict As New Scripting.Dictionary
Dim AmbSTPLkupArr As Variant
AmbSTPLkupArr = ThisWorkbook.Worksheets("Lkups").Range("A2:B7").Value
Dim rowIndex As Long
For rowIndex = LBound(AmbSTPLkupArr, 1) To UBound(AmbSTPLkupArr, 1)
If Not dict.Exists(AmbSTPLkupArr(rowIndex, 1)) Then
dict.Add AmbSTPLkupArr(rowIndex, 1), CreateObject("System.Collections.SortedList")
dict(AmbSTPLkupArr(rowIndex, 1)).Add AmbSTPLkupArr(rowIndex, 2), AmbSTPLkupArr(rowIndex, 1)
Else
dict(AmbSTPLkupArr(rowIndex, 1)).Add AmbSTPLkupArr(rowIndex, 2), AmbSTPLkupArr(rowIndex, 1)
End If
Next rowIndex
Set GetAmbStpMappingsDict = dict
End Function
Sub PrintItems(dict As Object) 'Modified from code by @Thomas Inzina
Dim sList As Variant, ambTrust As Variant, stpName As String
Dim x As Long
For Each ambTrust In dict
Set sList = dict(ambTrust)
Debug.Print "Parent Dictionary ambTrust: "; ambTrust
For x = 0 To sList.Count - 1
stpName = sList.GetKey(x) 'sList.GetByIndex(x)
Debug.Print stpName
Next
Next
End Sub
进行访问。尝试访问实际列表值的最初原因是我要附加列表值,例如string my_path = @"C:\Windows\System32";
DirectoryInfo dir_info = new DirectoryInfo(my_path);
string directory = dir_info.Name; // System32
到该行。
有人可以帮我解决这个问题吗?
代码:
#dialog-box-foot {
background-color: #ee6e73; // Background color
border-radius: 4px; // Round
font-size: 16px; // Font size
}
答案 0 :(得分:1)
为了正确识别问题,将信用转到@Rory。
1)我没有发现查找表/表(<android.support.design.widget.AppBarLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<android.support.v7.widget.Toolbar
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:theme="@style/SkoolarActionBar"
app:layout_scrollFlags="scroll|enterAlways" />
)中的一个项目与数据表Lkups
的区别。正如@Rory所述,这里的密钥区分大小写。将英格兰改为英格兰;和,
2)纠正循环的转录错误,即
dataResponseTimes
没有For rowIndex = LBound(testArr, 1) To UBound(testArr, 1)
解决了这个问题。