获取每行的特定列的值

时间:2017-06-06 20:31:12

标签: excel-vba vba excel

我需要编写脚本,允许我以xml格式导入数据。它为除变量之外的每个订单生成我需要的代码块。我需要遍历范围内的所有行并从列“G”获取值。问题是它只获得范围内第一行的值。

Dim rng As Range, row As Range
Set rng = Range(Range("G11"), Range("G11").End(xlDown))
For Each row In rng.Rows
Dim partner_id As String
partner_id = Cells(rng.row, 7).Value
line9 = "<typ:id>" & partner_id & "</typ:id>" & vbNewLine

...

我不是一个程序员,你可以看到,但我真的需要得到那个partner_id。我很感激任何建议。

1 个答案:

答案 0 :(得分:1)

您确实应该避免使用与Excel对象使用的常用方法相同的变量名称,例如,将row更改为myRow。然后,这将突出显示我认为导致您的问题 - 使用rng.row,使用重命名的变量,您可能会写为rng.myRow - 这将导致编译错误。

rng.row只是返回rng中第一个单元格的行号,而与名为row的变量无关。

Dim rng As Range, myRow As Range
Set rng = Range(Range("G11"), Range("G11").End(xlDown))
'There's no need to use "rng.Rows" when each row is a single cell anyway
For Each myRow In rng
    Dim partner_id As String
    'because myRow is a single cell, we can just use its Value
    partner_id = myRow.Value
    line9 = "<typ:id>" & partner_id & "</typ:id>" & vbNewLine

    ...

FWIW - 保持变量名称和编码样式不变,您可以使用row.Row代替rng.Row来修复代码,即

Dim rng As Range, row As Range
Set rng = Range(Range("G11"), Range("G11").End(xlDown))
For Each row In rng.Rows
Dim partner_id As String
partner_id = Cells(row.Row, 7).Value
line9 = "<typ:id>" & partner_id & "</typ:id>" & vbNewLine

...