Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 应用程序定义或对象定义错误-取决于打开的工作表_Vba_Excel - Fatal编程技术网

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上发布一个评论问题