我有以下问题:我正在尝试自动将数据复制到标题指示的某个列,但它出错:“对象变量或未设置块”。我想要做的是将行标题添加到一维数组,找到与搜索到的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
答案 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