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
行有关,我知道这一点,因为我在这里遇到了几十个现有问题的答案,如果我以前不需要指出这一点,你认为我还能知道现有的帖子有多少?)太棒了!谢谢你的帮助和解决这个问题-我真的很感激。