【问题标题】:vba function to copy certain value from one workbook to anothervba函数将某些值从一个工作簿复制到另一个工作簿
【发布时间】:2013-07-01 18:07:24
【问题描述】:

我有 2 个工作簿。只有当它包含来自另一个工作簿的某个值时,我才需要复制一个工作簿中的行。这是我的代码,它适用于第一个 i=21 和 i=22,但告诉我 Cells.Find 出现错误,当我到达 i=23 时。

For i = 21 To 35
    Windows("Run Report.xlsm").Activate
    Dim strL3 As String
    strL3 = Sheets("Summary").Range("A" & i).Value
    Workbooks("Ace Survey - Level 1 and level 3 Trending (w Resolution) v3").Activate
    Range("A1").Activate
    Cells.Find(What:=strL3, After:=ActiveCell, LookIn:=xlFormulas, _
        LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False, SearchFormat:=False).Activate
    If strL3 = "Call Disconnected" Or strL3 = "Caller Not Present" Then
        ActiveCell.Offset(2, 2).Select
    Else
        ActiveCell.Offset(1, 2).Select
    End If
    Application.CutCopyMode = False
    ActiveCell.Copy
    Windows("Run Report.xlsm").Activate
    Sheets("Summary").Select
    Range("G" & i).Select
    ActiveSheet.Paste
Next i

【问题讨论】:

  • “对前 2 个 i 有效,但之后中断”是什么意思?您忘了告诉我们它是如何“中断”的,也忘了实际提出问题。请edit您的问题来解决这两个问题,以便有人可以尝试帮助您。谢谢。
  • 它循环通过 i=21 和 i=22 但在 23 上,它告诉我 Cells.Find 中有错误
  • 再一次,请edit 您的问题(单击我现在发布两次的链接)在此处而不是在 cmets 中添加该信息。此外,“它告诉我有错误”不是对错误的描述 - 它究竟告诉你什么?

标签: vba loops for-loop


【解决方案1】:

Find 返回一个 Range 对象,如果找到,则返回 Nothing 否则。您正在尝试激活使用 Find 的结果,即使它是 Nothing - 这会产生错误。

您需要将Find 尝试的结果存储在Range 变量中,并检查Nothing

Dim rngFound As Range

Set rngFound = Range("A1").Find(...)
If Not rngFound Is Nothing Then
    ' we found something!
Else
    ' Nothing
End If

但是,按照建议,您应该为您的问题提供更多详细信息。

【讨论】:

    猜你喜欢
    • 2014-12-09
    • 2023-02-02
    • 2017-09-08
    • 1970-01-01
    • 2017-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多