Vba 应用程序定义或对象定义错误3

Vba 应用程序定义或对象定义错误3,vba,excel,range,Vba,Excel,Range,我试图从“sheet1”中提取特定数据,并将其放在另一张特定位置的表格中(特别是财务数据) 在这段代码中,我试图创建一个范围,该范围将只包括从流动资产到总流动资产(或总资产,如果没有非流动资产)的财务数据部分的数据 它在的“Set range1”行上抛出错误 我试图创建一个范围,从当前资产出售到总资产单元,以便稍后在代码中使用 lastCol = Worksheets("Sheet1").Range("a1").End(xlToRight).Column lastRow = Worksheets

我试图从“sheet1”中提取特定数据,并将其放在另一张特定位置的表格中(特别是财务数据)

在这段代码中,我试图创建一个范围,该范围将只包括从流动资产到总流动资产(或总资产,如果没有非流动资产)的财务数据部分的数据

它在
的“Set range1”行上抛出错误

我试图创建一个范围,从当前资产出售到总资产单元,以便稍后在代码中使用

lastCol = Worksheets("Sheet1").Range("a1").End(xlToRight).Column
lastRow = Worksheets("Sheet1").Cells(65536, lastCol).End(xlUp).Row
Set crntassone = Worksheets("Sheet1").Range("a1", Worksheets("Sheet1").Cells(lastRow, lastCol)).Find("Current Assets:")

 If Worksheets("Sheet1").Range("a1", Worksheets("Sheet1").Cells(lastRow, lastCol)).Find("Total Current Assets") Is Nothing Then
     Set ttlass = Worksheets("Sheet1").Range("a1", Worksheets("Sheet1").Cells(lastRow, lastCol)).Find("Total Assets")
     Set range1 = Worksheets("Sheet1").Range(crntassone, ttlass)
 Else
     Set crntasstwo = Worksheets("Sheet1").Range("a1", ActiveSheet.Cells(lastRow, lastCol)).Find("Total Current Assets")
     Set range1 = Range(crntassone, crntasstwo)
 End If

图纸的范围对象不会采用您定义的参数。您应该这样编写参数

Sheets("Sheet1").Range(cells(1,2),cells(3,4))

注意:1,2,3,4仅用于例如。请计算出这些值,因为我看不到您的excel

图纸范围对象不会采用您定义的参数。您应该这样编写参数

Sheets("Sheet1").Range(cells(1,2),cells(3,4))

注:1,2,3,4仅用于例如。请计算此值,因为我看不到您的excel

结果是,我的“查找”范围实际上并没有覆盖整个工作表。由于我的图表在excel中的格式设置,“xlToRight”和“xlUp”并没有覆盖所使用的所有行和列(难以用文字解释)。除了为“Find”指定某些额外参数外,我还使用“SpecialCells(xlCellTypeLastCell)”来定位工作表中的最后一个单元格。这是我做的改动

Dim LastRow As Long
    LastRow = Worksheets("Sheet1").Range("A1").SpecialCells(xlCellTypeLastCell).Row

Dim LastColumn As Long
    LastColumn = Worksheets("Sheet1").Range("A1").SpecialCells(xlCellTypeLastCell).Column

Set crntassone = Worksheets("Sheet1").Range("A1", Cells(LastRow,  LastColumn)).Find(What:="Current assets:", After:=Worksheets("Sheet1").Range("A1"), LookIn:=xlValues, LookAt:=xlPart, SearchDirection:=xlNext, MatchCase:=False)
 If Worksheets("Sheet1").Range("A1", Cells(LastRow, LastColumn)).Find("Total Current Assets") Is Nothing Then
     Set ttlass = Worksheets("Sheet1").Range("A1", Cells(LastRow, LastColumn)).Find("Total Assets")
     Set range1 = Worksheets("Sheet1").Range(crntassone, ttlass)

事实证明,我的“查找”范围实际上并没有覆盖我的整个工作表。由于我的图表在excel中的格式设置,“xlToRight”和“xlUp”并没有覆盖所使用的所有行和列(难以用文字解释)。除了为“Find”指定某些额外参数外,我还使用“SpecialCells(xlCellTypeLastCell)”来定位工作表中的最后一个单元格。这是我做的改动

Dim LastRow As Long
    LastRow = Worksheets("Sheet1").Range("A1").SpecialCells(xlCellTypeLastCell).Row

Dim LastColumn As Long
    LastColumn = Worksheets("Sheet1").Range("A1").SpecialCells(xlCellTypeLastCell).Column

Set crntassone = Worksheets("Sheet1").Range("A1", Cells(LastRow,  LastColumn)).Find(What:="Current assets:", After:=Worksheets("Sheet1").Range("A1"), LookIn:=xlValues, LookAt:=xlPart, SearchDirection:=xlNext, MatchCase:=False)
 If Worksheets("Sheet1").Range("A1", Cells(LastRow, LastColumn)).Find("Total Current Assets") Is Nothing Then
     Set ttlass = Worksheets("Sheet1").Range("A1", Cells(LastRow, LastColumn)).Find("Total Assets")
     Set range1 = Worksheets("Sheet1").Range(crntassone, ttlass)

两个计数错误:如果
Sheet1
未激活,这将导致错误。而
Range
将使用其他范围作为参数。我的sheet2处于活动状态,我尝试设置Sheet1的范围,但未遇到任何错误。下面的代码工作正常..Sheets(2).Activate Set range1=Sheets(3).Range(“A:A”)@pranav012不幸的是,我不知道单元格的具体数值,因为这会随着文档的变化而变化。我正在为多个文档编写这篇文章,并试图尽可能地自动化它,因此我使用“查找”。此外,我还尝试在这两个页面上都使用“range.address”,并查看它是否是因为.range不接受其他范围,但它仍然抛出相同的错误,因此我相信它将接受范围作为参数。有两个错误:如果
Sheet1
未激活,则这将出错。而
Range
将使用其他范围作为参数。我的sheet2处于活动状态,我尝试设置Sheet1的范围,但未遇到任何错误。下面的代码工作正常..Sheets(2).Activate Set range1=Sheets(3).Range(“A:A”)@pranav012不幸的是,我不知道单元格的具体数值,因为这会随着文档的变化而变化。我正在为多个文档编写这篇文章,并试图尽可能地自动化它,因此我使用“查找”。我还尝试在这两个字段上都使用“range.address”,并查看它是否是因为.range不接受其他范围,但它仍然抛出相同的错误,因此我相信它会接受范围作为参数。您确定
crntassone
不是
Nothing
?如果是,则调用
范围(crntassone,
将失败另一个问题:调用
Find
,无论您未指定的参数将使用代码或用户上次使用的参数。几乎肯定不是您想要的。@chrisneilsen它可能是nothing…这意味着我应该为if'nothing'设置if语句。但我知道有一个c本表中包含“流动资产”的所有资产:字符串,所以它不应该是“Nothing”。除非我在“Find”中设置的参数不正确。你是说我应该在调用Find时指定可选参数,即after、lookin、lookat等?关于Find,是的,我是说你应该指定所有可选参数。与大多数其他函数不同,未指定的Find参数需要用户或代码上次使用Find时的eir值。如果不指定,您真的不知道会得到什么。关于
crntassone
Nothing
的可能性,请尝试在
Set range1=
行上加一个分隔符,并检查两个参数在监视窗口中指向的范围。是否确定e
crntassone
不是
Nothing
?如果是,则调用
范围(crntassone,
将失败另一个问题:调用
Find
,无论您未指定的参数将使用代码或用户上次使用的参数。几乎肯定不是您想要的。@chrisneilsen它可能是nothing…这意味着我应该为if'nothing'设置if语句。但我知道有一个c本表中包含“流动资产”的所有资产:字符串,所以它不应该是“Nothing”。除非我在“Find”中设置的参数不正确。你是说我应该在调用Find时指定可选参数,即after、lookin、lookat等?关于Find,是的,我是说你应该指定所有可选参数。与大多数其他函数不同,未指定的Find参数需要用户或代码上次使用Find时的eir值。如果不指定,您真的不知道会得到什么。关于
crntassone
Nothing
的可能性,请尝试在
Set range1=
行上加一个分隔符,并检查两个参数在监视窗口中指向的范围。