簡體   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