Перебирая список кодов стран, ошибка с диапазоном - PullRequest
0 голосов
/ 30 октября 2018

Я пытаюсь написать макрос, который позволит мне проверить платежеспособность человека в зависимости от его / ее страны проживания.

У меня есть список кодов стран (строки "S73: S128"), например, "SE" для Швеции, "UK" для Великобритании и т. Д. У меня также есть список среднего дохода для всех стран (строки "T73: T128")

.

Макрос должен редактировать лист («Калькулятор»), который рассчитывает платежную способность, а затем копировать результаты в другой лист («Результаты»). Для каждой страны существует три сценария: человек живет один (O38 = 1, O39 = 0 в приведенном ниже коде), человек делит свое домашнее хозяйство с другим взрослым (O38 = 2, O39 = 0 в приведенном ниже коде) или лицом живет с другим взрослым и ребенком (O38 = 2 и O39 = 1).

Я думал, что самый простой способ сделать это - цикл for.

Это должно пройти через эти шаги:

  1. Активировать калькулятор
  2. Установить для взрослых в семье (O38) значение 1.
  3. Установить детей в семье (O39) на 0.
  4. Изменить значение ячейки кода страны (O9) на код страны текущей итерации (то есть выполнить итерацию в диапазоне S73: S128)
  5. Скопировать код страны из O9
  6. Активировать лист результатов
  7. Вставьте скопированный код страны в первую пустую ячейку в столбце A

... затем вводим доход текущей итерации в ячейку O23, копируем вывод платежной способности (N52) в первую пустую ячейку в столбце B таблицы результатов и т. Д. *

Вот мой нерабочий код:

Sub LoopThroughCountries()

Dim CountryCode As Range
Dim CountryIncome As Range
Dim i As Long

Set CountryCode = Range("S73:S128")
Set CountryIncome = Range("T73:T128")

For i = 1 To CountryCode.Rows.Count
Worksheets("Calculator").Activate
Range("O38").Value = 1
Range("O39").Value = 0
Range("O9").Value = Range("CountryCode" & i)
Range("O9").Copy
Worksheets("Results").Activate
Range("A1").End(xlDown).Offset(1, 0).PasteSpecial xlPasteValues
Worksheets("Calculator").Activate
Range("O23").Value = Range("CountryIncome" & i)
Range("N52").Copy 'N52 is the payment ability output cell
Worksheets("Results").Activate
Range("B1").End(xlDown).Offset(1, 0).PasteSpecial xlPasteValues 'Pastes payment ability of scenario 1
Worksheets("Calculator").Activate
Range("O38").Value = 2
Range("N52").Copy
Worksheets("Results").Activate
Range("C1").End(xlDown).Offset(1, 0).PasteSpecial xlPasteValues 'Pastes payment ability of scenario 2
Worksheets("Calculator").Activate
Range("O39").Value = 1
Range("N52").Copy
Worksheets("Results").Activate
Range("D1").End(xlDown).Offset(1, 0).PasteSpecial xlPasteValues 'Pastes payment ability of scenario 3

Next i
End sub

Первая строка с ошибкой такая:

Range("O9").Value = Range("CountryCode" & i)

выдает ошибку: «Метод« Range »объекта« _Global »не выполнен»

Что мне здесь не хватает? Я пытался найти, как использовать Range в VBA. Я думал, что «Range (« CountryCode »& i)» в основном даст мне значение i-й итерации CountryCode-range. Линия неполная?

Ответы [ 2 ]

0 голосов
/ 30 октября 2018

CountryCode уже является диапазоном, поэтому, если вы не определили именованные диапазоны CountryCode1, CountryCode2, Range("CountryCode" & i) не будет работать.

CountryCode.Cells(i, 1) будет ссылаться на строку i = 1-й, 2-й и т. Д. В столбце, определенном как CountryCode.

0 голосов
/ 30 октября 2018

Это может быть началом для вас.

Вы можете построить диапазон как:

Range("S73:S128") -> Range(Cells(S73), Cells(S128)) -> 
Range(Cells(row number, column number), Cells(row number, column number)) -> 
Range(Cells(73, 19), Cells(128, 19))

Поскольку вы хотите перебрать столбцы с переменной "i", вы обозначаете строки как i вместо

Итак, ваш код нуждается в некоторых модификациях: For i = 1 To CountryCode.Rows.Count -> For i = 73 To CountryCode.Rows.Count вы можете перейти от строки 73 к последней строке, если хотите

Range("O9").Value = Range(Cells(i, 19), Cells(i, 19)).value
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...