Vba 应用程序定义或对象定义错误-取决于打开的工作表
我有一个问题,我正在努力解决,因为它有点具体。我有代码可以从一张纸复制粘贴到另一张纸上。代码的每一部分基本上都是从母版页“当前”复制到指定页 当我运行代码时,我收到一个错误“应用程序定义的或对象定义的错误”,代码在工作表“股息收益率”下一行后停止Vba 应用程序定义或对象定义错误-取决于打开的工作表,vba,excel,Vba,Excel,我有一个问题,我正在努力解决,因为它有点具体。我有代码可以从一张纸复制粘贴到另一张纸上。代码的每一部分基本上都是从母版页“当前”复制到指定页 当我运行代码时,我收到一个错误“应用程序定义的或对象定义的错误”,代码在工作表“股息收益率”下一行后停止 工作表(“部门收益率”).范围(“B7”).选择 但是,如果我打开“股息收益率”表并从那里运行代码,它将正常工作,直到最后一张“反向PE”表,在该表中,它将再次抛出并在行后出错“应用程序定义的或对象定义的错误” 工作表(“反向”)范围(“B9”)。选
工作表(“部门收益率”).范围(“B7”).选择
但是,如果我打开“股息收益率”表并从那里运行代码,它将正常工作,直到最后一张“反向PE”表,在该表中,它将再次抛出并在行后出错“应用程序定义的或对象定义的错误”
工作表(“反向”)范围(“B9”)。选择
我猜这个错误与自动填充方法的下一行有关,但我还没有找到任何有用的解决方案。有人能告诉我如何解决这个错误吗
下面是完整的宏代码
函数getYield()为双精度
作为对象的模糊应用程序
设置appIE=CreateObject(“internetexplorer.application”)
和阿皮
.导航“http://uk.investing.com/rates-bonds/world-government-bonds"
.Visible=False
以
忙的时候做
多芬特
环
设置allRowOfData=appIE.document.getElementById(“pair_23705”)
将myValue设置为Double:myValue=allRowOfData.Cells(2).innerHTML
阿皮,退出
设置appIE=Nothing
工作表(“反向”)范围(“B7”)。值=myValue
工作表(“反向打印”).范围(“B7”).值=工作表(“反向打印”).范围(“B7”).值/100
端函数
次级调整()
暗拷贝地址作为范围
暗拷贝范围作为范围
最后一排一样长
作为范围的中位数
“PE”
设置CopyAddress=工作表(“当前”)。范围(“A1:CJ10000”)。查找(“PE_比率”,注视:=xlPart)
lastRow=单元格(65536,CopyAddress.Column)。结束(xlUp)。行
设置copyRange=工作表(“当前”)。范围(单元格(CopyAddress.Row+1,CopyAddress.Column),单元格(lastRow,CopyAddress.Column))
工作表(“PE”).范围(“B1”).整个表格插入
复印范围。复印目的地:=纸张(“PE”)。范围(“B7”、“B”和最后一行)
工作表(“PE”).范围(“B2”).值=工作表(“当前”).范围(“A1”).值
工作表(“PE”).Range(“B3”).FormulaArray=“=中值(B7:B”和lastRow+2&”)
工作表(“PE”).Range(“B5”).Font.Bold=True
工作表(“PE”).Range(“B5”).FormulaArray=“=IF(ISNUMBER(VLOOKUP($5,$7:$HI$1750,第(B4)列,假)),VLOOKUP($5,$7:$HI$1750,第(B4)列,假),”&Chr(34)和NA&Chr(34)和“
设置copyRange=工作表(“当前”)。范围(“A5”、“A”和lastRow)
copyRange.Copy Destination:=纸张(“PE”)。范围(“A7”、“A”和lastRow+2)
“股息率”
设置copyRange=工作表(“当前”)。范围(“A5”、“A”和lastRow)
copyRange.Copy Destination:=纸张(“分割收益率”).Range(“A7”、“A”和lastRow+2)
工作表(“部门收益率”).Range(“B7”).FormulaArray=“=IF(当前!X5,当前!X5,”&Chr(34)和Chr(34)和“)
工作表(“部门收益率”).范围(“B7”).选择
Selection.AutoFill目的地:=板材(“分割收益率”)。范围(“B7:B”和lastRow+2),类型:=xlFillDefault
“PE前进”
设置CopyAddress=工作表(“当前”)。范围(“A1:CJ10000”)。查找(“市盈率03E”,注视:=xlPart)
lastRow=单元格(65536,CopyAddress.Column)。结束(xlUp)。行
设置copyRange=工作表(“当前”)。范围(单元格(CopyAddress.Row+3,CopyAddress.Column),单元格(lastRow,CopyAddress.Column))
工作表(“PE_前进”).范围(“B1”).整个表格插入
copyRange.Copy Destination:=工作表(“PE_forward”)。范围(“B7”、“B”和lastRow+2)
工作表(“PE_前进”).范围(“B2”).值=工作表(“当前”).范围(“A1”).值
工作表(“PE_向前”).范围(“B3”).公式数组=“=中间值(B7:B”&最后一行+2&”)
工作表(“PE_forward”).Range(“B5”).Font.Bold=True
工作表(“PE_forward”).Range(“B5”).FormulaArray=“=IF(ISNUMBER(VLOOKUP($A$5,$A$7:$HI$1750,列(B751),FALSE)),VLOOKUP($A$5,$A$7:$HI$1750,列(B751),FALSE),“&Chr(34)和NA&Chr(34)&”)
工作表(“PE#U前进”)。列(“B”)。替换内容:=“#值!”,替换:=”
工作表(“PE_forward”).Range(“B3”).NumberFormat=“”
设置copyRange=工作表(“当前”)。范围(“A5”、“A”和lastRow)
copyRange.Copy Destination:=工作表(“PE_forward”)。范围(“A7”、“A”和lastRow+2)
“反向PE”
设置copyRange=工作表(“当前”)。范围(“A5”、“A”和lastRow)
copyRange.Copy Destination:=纸张(“反向打印”)。范围(“A9”、“A”和lastRow+4)
工作表(“反向”)范围(“B1”).整体插入
工作表(“反向”)范围(“B2”).值=工作表(“当前”)范围(“A1”).值
工作表(“Reverse_PE”).Range(“B5”).FormulaArray=“=IF(ISNUMBER(VLOOKUP($A$5,$A$9:$HI$1750,列(B751),FALSE)),VLOOKUP($A$5,$A$9:$HI$1750,列(B751),FALSE),“&Chr(34)和NA&Chr(34)&”)
获得收益
工作表(“反向”.范围(“B3”).公式数组=“=中间值(B9:B”&最后一行+4&”)
工作表(“反向”)范围(“B9”).FormulaArray=“=IF(ISNUMBER(PE!B7)、1/PE!B7,”&Chr(34)和Chr(34)&
工作表(“反向”)范围(“B9”)。选择
Selection.AutoFill Destination:=图纸(“反向填充”)。范围(“B9:B”和lastRow+4),类型:=xlFillDefault
工作表(“反向打印”)。范围(“B3:B”和lastRow+4)。选择
Selection.Style=“百分比”
Selection.NumberFormat=“0.00%”
除非工作表首先处于活动状态,否则无法使用选择方法,因此请添加此行:
Worksheets("div. yield").Activate
Worksheets("div. yield").Range("B7").FormulaArray = "=IF(ISNUMBER(current!X5),current!X5," & Chr(34) & Chr(34) & ")"
稍后:
Worksheets("Reverse_PE").Activate
Worksheets("Reverse_PE").Range("B9").Select
有很多更快、更易于维护的方法来完成您想要做的事情,但是上面的工作表激活将解决您眼前的问题
在尝试选择每张工作表上的一个单元格之前,不要忘记激活每张工作表。谢谢,它可以工作。也许你可以告诉我一些优化代码的方法?一旦你想让代码正常工作,我建议你在whe上发布一个评论问题