2017-09-19 58 views
1

我想从一个工作簿中获取一个小的数据矩阵,并使用单元格引用的偏移量将其粘贴到ThisWorkbook中。虽然我正在循环查找值的范围,但单元格引用更改。我设置的名为'WhereCell'的变量保存当前保存的值的地址,并且我想偏离WhereCell中的任何值。它工作,如果我硬编码单元格引用,如范围(“A1”),但代码,因为它是我得到一个1004:对象'_Global'的方法'范围'失败。VBA试图使用range.offset与一个命名变量中的单元格地址

我该如何改变它以抵消'WhereCell'?

Sub GetFlows() 

Dim rng As Range 
Dim row As Range 
Dim cell As Range 
Dim dem1 As String 
Dim WhereCell As Range 
Dim valueRng As Range 
Dim x As Long 
Dim y As Long 

Set rng = Range("A9:A200") 

For x = 1 To rng.Rows.Count 

dem1 = rng.Cells(x).Value 

If dem1 <> "" Then 
    Set WhereCell = ThisWorkbook.ActiveSheet.Range("A9:A200").Find(dem1, lookat:=xlPart) 
    Windows("GetFilenames v2.xlsm").Activate 
    Worksheets(dem1).Range("A1").CurrentRegion.Copy 
    ThisWorkbook.ActiveSheet.Range(Range(WhereCell), Range(WhereCell).Offset(, 2)).PasteSpecial Paste:=xlPasteValues 
    'MsgBox dem1 
    'If Not WhereCell Is Nothing Then 
    'MsgBox WhereCell.Address 
    'End If 
    Else 
    ThisWorkbook.Activate 
End If 

Next x 

End Sub 
+2

Wherecell是一个范围已经不包含它在'Range()'看到我的答案在这里更多的解释:https://stackoverflow.com/questions/46302871/relationship-between-cell-and-range -in-vba-with-activecell/46303014#46303014 –

回答

3

尝试这样的:

WhereCell.Offset(0, 2)).PasteSpecial Paste:=xlPasteValues 

,而不是这样的:

ThisWorkbook.ActiveSheet.Range(Range(WhereCell), Range(WhereCell).Offset(, 2)).PasteSpec... 

要了解更多关于WhereCell,考虑宣布之后写

Debug.Print WhereCell.Parent.Name 
Debug.Print WhereCell.Parent.Parent.Name 
Debug.Print WhereCell.Address 

。它会显示其工作表,即时窗口中的应用程序名称和地址。因此,它已经“知道”它们,如果你试图“重新声明”它们,你会得到一个错误。

+0

我似乎没有得到任何与Debug.Print语句。输出格式是什么? –

+0

@RichPrag - 按“Ctrl + G”输出将在直接窗口中。 – Vityata

+0

啊,是的,谢谢。 –

相关问题