Vba 应用程序定义或对象定义错误[将范围对象传递给范围方法时]

Vba 应用程序定义或对象定义错误[将范围对象传递给范围方法时],vba,excel,Vba,Excel,我使用以下代码将一个范围从一个工作表复制到下一个工作表: Private Sub btn_Milestones_Click() Dim projectref As String Dim savelocation As String Dim projectSearchRange As Range Dim LastRow As Integer Dim NewWorkbook As Workbook Dim copy_range As Range 'set search value (porject

我使用以下代码将一个范围从一个工作表复制到下一个工作表:

Private Sub btn_Milestones_Click()
Dim projectref As String
Dim savelocation As String
Dim projectSearchRange As Range
Dim LastRow As Integer
Dim NewWorkbook As Workbook
Dim copy_range As Range

'set search value (porject key - unique)
projectref = cmb_Project.Value

Application.ScreenUpdating = False
Workbooks("Project tracker spreadsheet VBA").Activate
'find the project reference in the tracking spreadsheet
With Sheets("Project Tracking")
    Set projectSearchRange = .Range("A:A").Find(projectref, , xlValues, xlWhole)
    If Not projectSearchRange Is Nothing Then '<-- verify that find was successful
        LastRow = projectSearchRange.Row
        'file directory to save the new workbook in
        savelocation = .Cells(LastRow, 5).Value
    Else '<-- find was unsuccessful
        MsgBox "Unable to find " & projectref
        Exit Sub
    End If
End With
Set copy_range = Range(Cells(LastRow, 11), Cells(LastRow, 34))

Worksheets("Milestone_Template").Range(copy_range).Copy 'application defined or object defined error occurs here
Worksheets("Project Tracking").Range("A7:X7").PasteSpecial Paste:=xlPasteValues

Application.CutCopyMode = False
End Sub
专用子btn\u里程碑\u单击()
Dim projectref作为字符串
将存储位置设置为字符串
Dim projectSearchRange作为范围
将最后一行设置为整数
将新工作簿设置为工作簿
将复制范围变暗为范围
'设置搜索值(项目键-唯一)
projectref=cmb_项目价值
Application.ScreenUpdating=False
工作簿(“项目跟踪器电子表格VBA”)。激活
'在跟踪电子表格中查找项目引用
带图纸(“项目跟踪”)
设置projectSearchRange=.Range(“A:A”).Find(projectref,xlValues,xlWhole)

如果不是projectSearchRange什么都不是,那么“对不起,您被打败了,我已经编辑了问题标题,以便确定您的具体问题。这里有一个尝试性的答案

在没有数据的情况下进行调试非常困难,但看起来copy_range已经是
range
类型,您似乎在问题行中使用它,就像它是一个
字符串
范围表达式,如“A1:C3”。所以我已经重写了,你可以直接转到
copy\u range.copy

评论者认为完全限定有助于澄清问题是正确的,所以我做了一些完全限定,但不是全部

试试这个

Option Explicit

Private Sub btn_Milestones_Click()
    Dim projectref As String
    Dim savelocation As String
    Dim projectSearchRange As Range
    Dim LastRow As Integer
    Dim NewWorkbook As Workbook
    Dim copy_range As Range


    'set search value (porject key - unique)
    projectref = cmb_Project.Value

    Application.ScreenUpdating = False
    Workbooks("Project tracker spreadsheet VBA").Activate

    Dim wbSource As Excel.Workbook
    Set wbSource = Workbooks("Project tracker spreadsheet VBA")

    'find the project reference in the tracking spreadsheet
    With Sheets("Project Tracking")
        Set projectSearchRange = .Range("A:A").Find(projectref, , xlValues, xlWhole)
        If Not projectSearchRange Is Nothing Then '<-- verify that find was successful
            LastRow = projectSearchRange.Row
            'file directory to save the new workbook in
            savelocation = .Cells(LastRow, 5).Value
        Else '<-- find was unsuccessful
            MsgBox "Unable to find " & projectref
            Exit Sub
        End If
    End With

    Dim wsMilestoneTempate As Excel.Worksheet
    Set wsMilestoneTempate = wbSource.Worksheets("Milestone_Template")

    Set copy_range = wsMilestoneTempate.Range(wsMilestoneTempate.Cells(LastRow, 11), wsMilestoneTempate.Cells(LastRow, 34))
    copy_range.Copy
    ''''Worksheets("Milestone_Template").Range(copy_range).Copy 'application defined or object defined error occurs here
    Worksheets("Project Tracking").Range("A7:X7").PasteSpecial Paste:=xlPasteValues

    Application.CutCopyMode = False
End Sub
选项显式
专用子btn\u里程碑\u点击()
Dim projectref作为字符串
将存储位置设置为字符串
Dim projectSearchRange作为范围
将最后一行设置为整数
将新工作簿设置为工作簿
将复制范围变暗为范围
'设置搜索值(项目键-唯一)
projectref=cmb_项目价值
Application.ScreenUpdating=False
工作簿(“项目跟踪器电子表格VBA”)。激活
将wbSource设置为Excel.工作簿
设置wbSource=工作簿(“项目跟踪器电子表格VBA”)
'在跟踪电子表格中查找项目引用
带图纸(“项目跟踪”)
设置projectSearchRange=.Range(“A:A”).Find(projectref,xlValues,xlWhole)

如果不是projectSearchRange,则“
Set copy\u range=range(…
应该类似于
Set copy\u range=thiswook.Worksheets(“项目跟踪”).range(…
。老实说,你的代码可以在任何地方使用显式范围引用。这里有937个存在的问题带有相同的错误消息。你读过其中多少个问题,看看你的答案是否在那里?@KenWhite-我在过去几个小时一直在研究这个问题-在第一个100-120个问题之后,没有得到合适的答案对于我的特定场景,我假设我在做其他愚蠢的事情。并不是说这个特定的解决方案不在900多个其他问题的范围内,但当有最后期限时,你只能证明这么长时间的搜索毫无结果是合理的。@RobinMackenzie-做出了你建议的更改,仍然在e同一个地方。抱歉,但事实上你很匆忙或有一个截止日期,这并不能改变一个事实,即有一个(或多个)现有的帖子为你指出了正确的解决方向。我们不需要10000个问题在这里相同的确切问题。(你会发现它与
Set copy\u range
行有关,我知道这一点,因为我在这里遇到了几十个现有问题的答案,如果我以前不需要指出这一点,你认为我还能知道现有的帖子有多少?)太棒了!谢谢你的帮助和解决这个问题-我真的很感激。