我正在尝试编写一个宏,使我可以根据一个人的居住国家/地区来测试该人的支付能力。
我有一个国家代码列表(行“ S73:S128”),例如瑞典的“ SE”,英国的“ UK”等。我还列出了所有国家/地区的平均收入(行) “ T73:T128”)。
该宏应编辑一个计算支付能力的工作表(“计算器”),然后将结果复制到另一个工作表(“结果”)中。对于每个国家/地区,有以下三种情况:一个人一个人住(以下代码中的O38 = 1,O39 = 0),该人与另一位成年人共享住所(以下代码中的O38 = 2,O39 = 0)或该人与另一个成年人和一个孩子生活在一起(O38 = 2和O39 = 1)。
我认为最简单的方法是for循环。
应该执行以下步骤:
...然后继续将当前迭代的收入输入到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)
给我错误:“对象'_Global'的方法'范围'失败”
我在这里想念什么?我试图搜索如何在VBA中使用Range。我认为“ Range(“ CountryCode”&i)“基本上可以给我CountryCode范围的第i个迭代值。该行不完整吗?
答案 0 :(得分:4)
CountryCode
已经是一个范围,因此,除非您已定义命名范围CountryCode1,CountryCode2,否则Range("CountryCode" & i)
将不起作用。
CountryCode.Cells(i, 1)
将引用定义为CountryCode的列中的i = 1st,2nd等。
答案 1 :(得分:1)
这可能是您的起点。
您可以将范围构建为:
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