查找要复制到的单元格标题

时间:2017-09-13 07:33:32

标签: excel excel-vba vba

我有以下问题:我正在尝试自动将数据复制到标题指示的某个列,但它出错:“对象变量或未设置块”。我想要做的是将行标题添加到一维数组,找到与搜索到的mth_exp_PM匹配的范围并将其存储在另一个变量中,最好是设置范围(单元格?)以进一步复制。

我做错了什么?如果此解决方案不正常,根据行标题复制到列的最佳/更简单的解决方案是什么?

谢谢!

dim i as long
dim cell, cell_adr as range
dim arr() as string
dim mth_exp_PM as string 'this value is taken from a different workbook and it matches one row header value

i = 0
For Each cell In Range(Range("D1"), Range("D1").End(xlToRight).Offset(0, -1)).Cells
    ReDim Preserve arr(i)
    arr(i) = cell
    If arr(i) = mth_exp_PM Then
        cell_adr = arr(i)
        Debug.Print cell_adr
    End If
    i = i + 1
Next cell

Image

2 个答案:

答案 0 :(得分:1)

IF条件而不是

cell_adr = arr(i)

使用

Set cell_adr = cell

cell是一个范围,将分配给cell_adr,这又是一个范围。要获取单元格的地址,请使用Debug.Print cell_adr.Address的{​​{1}}。

如果您未在代码中的任何其他位置使用Debug.Print cell_adr,则可以将其删除。在下面的代码中,如果您不必使用数组,我会注释掉不需要的行。

arr

答案 1 :(得分:0)

需要进行一次修正,如下所示,主要是(arr(i) = cell.value

波罗提出了你的代码修订版。

dim i as long
dim cell, cell_adr as range
dim arr() as string
dim mth_exp_PM as string 'this value is taken from a different workbook and it matches one row header value

i = 0
For Each cell In Range(Range("D1"), Range("D1").End(xlToRight).Offset(0, -1)).Cells
    ReDim Preserve arr(i)
    arr(i) = cell.value 'Do correct here!
    If arr(i) = mth_exp_PM Then
        Set cell_adr = cell 'Correct here!
        Debug.Print cell_adr.Address 'and Correct here
    End If
    i = i + 1
Next cell