【问题标题】:VBA trying to use range.offset with a cell address held in a named variableVBA 尝试将 range.offset 与命名变量中保存的单元格地址一起使用
【发布时间】:2018-02-28 09:45:46
【问题描述】:

我正在尝试从一个工作簿中获取一个小数据矩阵,并使用单元格引用的偏移量将其粘贴到 ThisWorkbook 中。但是,当我在一个范围内循环寻找值时,单元格引用会发生变化。我设置的名为“WhereCell”的变量保存了当前保存的值的地址,我想偏移 WhereCell 中保存的任何内容。如果我对单元格引用进行硬编码,例如 Range("A1"),但使用代码原样,我会得到 1004:对象 '_Global' 的方法 'range' 失败。

如何将其更改为从“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

【问题讨论】:

标签: vba excel range offset


【解决方案1】:

试试这样:

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

在声明之后。它将在即时窗口中向您显示其工作表、应用程序的名称及其地址。因此,它已经“知道”它们,如果您尝试“重新声明”它们,则会出现错误。

【讨论】:

  • 我似乎对 Debug.Print 语句一无所知。输出的格式是什么?
  • @RichPrag - 按Ctrl+G 输出将在即时窗口中。
猜你喜欢
  • 1970-01-01
  • 2017-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-06
  • 2013-07-07
相关资源
最近更新 更多