【问题标题】:Method Select (run-time error 1004)方法选择(运行时错误 1004)
【发布时间】:2017-05-09 06:52:24
【问题描述】:

我想找到某个单元格,并在一个单元格偏移量中插入一个值(从另一本书复制)给定单元格。 我写了代码但是弹出错误

运行时错误 1004 选择方法范围类失败

在代码行中:r.Offset(6, 5).Select

Sub связатьцифирь3()

    Dim book1 As Workbook
    Dim book2 As Workbook
    Dim r As Range
    Dim firstAddress As String

    Set book1 = Workbooks.Open("E:\Super M\Проект ставки\Решение\цифирь.xlsx")
    Set book2 = Workbooks.Open("E:\Super M\Проект ставки\Поиск решения\Усов 4\БАЗА ДАННЫХ\прошлый сезон\Англия\1-ое место\54.xlsx")
    'переходим в активную страницу откуда надо скопировать данные'
     book2.Worksheets("54").Activate
     Range("AP100").Copy

    'ищемс
    With book1.Worksheets("Лист1").Range("A1:CV808")

        Set r = .Find(What:="54")
        If Not r Is Nothing Then
            firstAddress = r.Address
            Do
               'условие для страны
               If r.Offset(3, 0).Text = "Англия" Then
                   r.Offset(6, 5).Select
                   Selection.PasteSpecial Paste:=xlPasteValues
               End If            
               Set r = .FindNext(r)             
           Loop While Not r Is Nothing And r.Address <> firstAddress
        End If
    End With  

End Sub

【问题讨论】:

  • 不确定为什么会出现此错误,但为什么使用 Select ?为什么不直接使用r.Offset(6, 5).PasteSpecial xlPasteValues
  • @ShaiRado 错误是因为当时活动的WB是book2。当然,正如你所说,这里不需要Select
  • 谢谢。现在程序工作

标签: vba excel select runtime-error offset


【解决方案1】:

没有必要Activatebook2.Worksheets("54"),然后r.Offset(6, 5).Select再使用Selection,你应该尽量保持Copy>>Paste尽可能接近:

book2.Worksheets("54").Range("AP100").Copy
r.Offset(6, 5).PasteSpecial xlPasteValues

代码

Sub связатьцифирь3()

    Dim book1 As Workbook
    Dim book2 As Workbook
    Dim r As Range
    Dim firstAddress As String

    Set book1 = Workbooks.Open("E:\Super M\Проект ставки\Решение\цифирь.xlsx")
    Set book2 = Workbooks.Open("E:\Super M\Проект ставки\Поиск решения\Усов 4\БАЗА ДАННЫХ\прошлый сезон\Англия\1-ое место\54.xlsx")

    'ищемс
    With book1.Worksheets("Лист1").Range("A1:CV808")

        Set r = .Find(What:="54")
        If Not r Is Nothing Then
            firstAddress = r.Address
            Do
                'условие для страны
                If r.Offset(3, 0).Value2 = "Англия" Then
                    book2.Worksheets("54").Range("AP100").Copy
                    r.Offset(6, 5).PasteSpecial xlPasteValues
                End If
                Set r = .FindNext(r)
           Loop While Not r Is Nothing And r.Address <> firstAddress
        End If
    End With

End Sub

【讨论】:

    【解决方案2】:

    您正试图在非活动工作表中选择范围,这就是原因。
    尝试先激活它或按照 Shai 的建议进行操作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-07
      • 1970-01-01
      • 1970-01-01
      • 2016-03-25
      相关资源
      最近更新 更多