Несколько проблем с вашим кодом.
Cells(numeroFactura, numColumnaProva).Value = codiSeleccionat
назад. Вы хотите, чтобы codiSeleccionat
получало значение из ячейки, а не наоборот, как указано.
codiProva = keysDicc(codiSeleccionat)(0)
Я подозреваю, что вашим объектом должен быть словарь, а не массив ключей для словаря
Я подозреваю, что вы вводите числа в ячейки своих таблиц, но когда вы создаете свой словарь, вы используете строки. "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
, и вы должны добавить код для его обработки, иначе он будет некорректно остановлен.
