Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.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
Excel 如何修复';运行时错误';1004';巴斯特_Excel_Vba - Fatal编程技术网

Excel 如何修复';运行时错误';1004';巴斯特

Excel 如何修复';运行时错误';1004';巴斯特,excel,vba,Excel,Vba,我有一个文件(称为original),其中包含每行的部分信息。每行都有一个文件名列(从中获取信息) 对于每一行,我想在文件名列中打开文件,并从某些行获取信息 在文件中,它只有一列,行为“Supplier Number:____;”,这一行的位置是可变的,因此我想遍历文件中的每一行,复制此单元格值并将其粘贴到对应行中的原始文件中 这就是我到目前为止所做的: Const FOLDER\u PATH=“C:\Users\[user]\Downloads\” 子迭代器throughall() 屏幕更新=

我有一个文件(称为original),其中包含每行的部分信息。每行都有一个文件名列(从中获取信息)

对于每一行,我想在文件名列中打开文件,并从某些行获取信息

在文件中,它只有一列,行为“Supplier Number:____;”,这一行的位置是可变的,因此我想遍历文件中的每一行,复制此单元格值并将其粘贴到对应行中的原始文件中

这就是我到目前为止所做的:

Const FOLDER\u PATH=“C:\Users\[user]\Downloads\”
子迭代器throughall()
屏幕更新=错误
将工作作为工作表
设置wks=ActiveSheet
将源设置为字符串
将目标变暗为字符串
Dim更新为字符串
作为整数的Dim rowT
rowT=2
rowTT=1
变暗行范围作为范围
暗淡的颜色范围
暗行范围作为范围
暗淡如长
最后一排一样长
暗淡的最后一行一样长
LastRow=wks.Cells(wks.Rows.Count,“A”).End(xlUp).Row
设置rowRange=wks.Range(“A2:A”和LastRow)
'循环通过每一行
对于行范围中的每个箭头
source=FOLDER\u PATH&wks.Cells(i,18)。Value'此列中我们要从中获取信息的文件名,始终填充
'如果单元格为空,请在文件中搜索“供应商编号:”
如果为空(wks.Cells(rowT,19)),则
Set wb=Workbooks.Open(源代码)
wb.激活
LastRowT=单元格。查找(“*”,搜索顺序:=xlByRows,搜索方向:=xlPrevious)。行
设置rowRangeT=wks.Range(“A1:A”和LastRowT)
对于Rowlanget中的每个i
如果仪表(i.Cells.Offset(rowTT),“供应商”)大于0,则
范围(“A”和rowTT)。选择
选择,复制
Windows(“获取供应商编号.xlsm”)。激活
范围(“A”&行)。选择
浆糊
其他的
rowTT=rowTT+1
如果结束
接下来我
wb.关闭
下一个箭头
屏幕更新=真
端接头
我得到了特殊错误1004

预期的是,对于“Get Supplier Number.xlsm”中的每一行,该行的A列都会更新信息


谢谢你的帮助

首先,你应该摆脱
激活
选择
方法。你不必使用它们,它们也不会给你的代码任何东西。使用它们不是一个好方法

为了避免它们,您应该使用特定的引用。你这样做,直到一个特定的点。在for循环内,设置
wb
后,用以下内容替换所有内容:

With wb.Worksheets(1)
    LastRowT = .Cells.Find("*", searchorder:=xlByRows, searchdirection:=xlPrevious).Row
    Set rowRangeT = .Range("A1:A" & LastRowT)
    For Each i In rowRangeT
        If InStr(i.Cells.Offset(rowTT), "Supplier") > 0 Then
             .Range("A" & rowTT).Copy wks.Range("A" & rowT)
        Else
            rowTT = rowTT + 1
        End If
    Next i
    wb.Close
End With
我想这应该适合你

PS:如果您只需要打开工作簿中单元格的值,则可以用简单的等式替换
Copy
行:

wks.Range("A" & rowT) = .Range("A" & rowTT)

您没有提到哪一行给出了错误-这将非常有帮助。在模块顶部包含
Option Explicit
——您可能需要在过程中修复任何未声明的值。我发现很难遵循代码中的逻辑-但给我的最大提示是,我无法确定您将信息粘贴到哪里(信息在
wks
中的去向?)。哦,还有这行奇怪的
Windows(“获取供应商编号.xlsm”)。激活
,它似乎是无逻辑地随机塞进代码中的。摆脱
。激活
。选择
。你可能想看看。直接使用对象。在copy命令之后立即发出pastespecial命令,您就可以了……谢谢您的帮助,但是现在当我替换wb下面的所有内容时,我得到了一个无错误的下一个()。即使在my for Loop的末尾有下一个错误,您的第一个If也没有
end If
语句。我没有注意到这一点。