繁体   English   中英

从字典中获取信息并将其设置在excel-vba中的单元格中

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM