[英]Get information from a dictionary and set it in a cell in excel-vba
这是我第一次使用excel-vba,我遇到了一个小问题。 我创建了一个字典[键,值,值],我想将值设置为diferents单元格。 到现在为止我已经这样做了:
Sub CodisFactura()
Fulla1 = Sheets("Ac2 i Factura").Select
Fulla1.Activate
'''''''''
primeraFactura = 5
ultimaFactura = 30
numeroFactura = 5
numColumnaProva = 15
'''''''''
Dim diccCodis As Object
Set diccCodis = CreateObject("Scripting.Dictionary")
With diccCodis
.CompareMode = vbTextCompare
.Add "1", Array("RX004", "Resta d'ecografies convencionals")
.Add "2", Array("RA00414", "Ecografía de cuello")
.Add "3", Array("RA00415", "Ecografía de torax")
Do While numeroFactura >= primeraFactura And numeroFactura < ultimaFactura
Cells(numeroFactura, numColumnaProva).Value = codiSeleccionat
keysDicc = diccCodis.Keys
codiProva = keysDicc(codiSeleccionat)(0)
nomProva = diccCodis.Item(codiSeleccionat)(1)
Cells(numeroFactura, 7).Value = codiProva
Cells(numeroFactura, 12).Value = nomProva
numeroFactura = numeroFactura + 1
Loop
End With
我在这两行有“错误13”:
codiProva = keysDicc(codiSeleccionat)(0) nomProva = diccCodis.Item(codiSeleccionat)(1)
这是类型错配匹配错误: https ://docs.microsoft.com/es-es/office/vba/language/reference/user-interface-help/type-mismatch-error-13
我该怎么做? 我在整个代码中做错了吗?
你的代码有几个问题。
Cells(numeroFactura, numColumnaProva).Value = codiSeleccionat
是向后的。 你希望codiSeleccionat
从细胞中获取值,而不是相反的方式。
codiProva = keysDicc(codiSeleccionat)(0)
我怀疑你的对象应该是Dictionary,而不是字典的键数组
我怀疑你是在工作表单元格中输入数字,但是当你创建字典时,你正在使用字符串。 "1"
与1
键不同
下面的代码显示了解决这些问题的一种方法:
Dim diccCodis As Object
Set diccCodis = CreateObject("Scripting.Dictionary")
With diccCodis
.CompareMode = vbTextCompare
.Add 1, Array("RX004", "Resta d'ecografies convencionals")
.Add 2, Array("RA00414", "Ecograf?a de cuello")
.Add 3, Array("RA00415", "Ecograf?a de torax")
Do While numeroFactura >= primeraFactura And numeroFactura < ultimaFactura
codiSeleccionat = Cells(numeroFactura, numColumnaProva).Value
keysDicc = diccCodis.Keys
codiProva = diccCodis(codiSeleccionat)(0)
nomProva = diccCodis.Item(codiSeleccionat)(1)
Cells(numeroFactura, 7).Value = codiProva
Cells(numeroFactura, 12).Value = nomProva
numeroFactura = numeroFactura + 1
Loop
End With
总是声明所有变量你会更好。 它可以捕获错误并可能减少混乱。 我不明白为什么MS不要求变量声明为默认值。 选择Tools/Options/Editor
然后选中Require Variable Declaration
。 这将在任何新模块的开头放置Option Explicit
。 要更正此模块,请在开头手动输入。
鉴于您的代码,下面是结果的屏幕截图。 当然,您的代码不会对列O
空白或错误条目进行任何错误检查,您应该添加代码来处理它,否则它将无意义地停止。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.