Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.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 尝试删除每个excel文件中的第一张工作表,然后使用相同的选项卡名称从每个选项卡复制到主工作簿_Vba_Excel - Fatal编程技术网

Vba 尝试删除每个excel文件中的第一张工作表,然后使用相同的选项卡名称从每个选项卡复制到主工作簿

Vba 尝试删除每个excel文件中的第一张工作表,然后使用相同的选项卡名称从每个选项卡复制到主工作簿,vba,excel,Vba,Excel,基本上,“我的宏”现在所做的是遍历文件夹,拾取每个excel文件,删除名为“某些帐户”的第一个选项卡,然后将粘贴数据复制到工作表名称匹配的主工作簿中 我的电脑出了一个错误 “如果wsDst.Name=wsSrc.Name,则” 未设置或定义对象变量。有人能告诉我们哪里出了问题吗 这是我的密码 Sub ProjectMacro() Dim wbDst As Workbook Dim wsDst As Worksheet Dim wbSrc As Workbook D

基本上,“我的宏”现在所做的是遍历文件夹,拾取每个excel文件,删除名为“某些帐户”的第一个选项卡,然后将粘贴数据复制到工作表名称匹配的主工作簿中

我的电脑出了一个错误 “如果wsDst.Name=wsSrc.Name,则”

未设置或定义对象变量。有人能告诉我们哪里出了问题吗

这是我的密码

Sub ProjectMacro()
    Dim wbDst As Workbook
    Dim wsDst As Worksheet
    Dim wbSrc As Workbook
    Dim wsSrc As Worksheet
    Dim MyPath As String
    Dim strFilename As String
    Dim lLastRow As Long
    Dim LC As Long
    Dim s As Worksheet, t As String
    Dim i As Long, K As Long
    K = Sheets.Count

    Application.DisplayAlerts = False
    Application.EnableEvents = False
    Application.ScreenUpdating = False

    Set wbDst = ThisWorkbook
    MyPath = "C:\Users\Adam\Desktop\some files\"
    strFilename = Dir(MyPath & "*.xls*", vbNormal)

    Do While strFilename <> ""

        Set wbSrc = Workbooks.Open(MyPath & strFilename)

        'loop through each worksheet in the source file
        For Each wsSrc In wbSrc.Worksheets
            'Find the corresponding worksheet in the destination with the same 
            name as the source

            For i = K To 1 Step -1
                t = Sheets(i).Name
                If t = "some_Accounts" Then
                    Application.DisplayAlerts = False
                    Sheets(i).Delete
                    Application.DisplayAlerts = True
                End If
            Next i

            On Error Resume Next

            Set wsDst = wbDst.Worksheets(wsSrc.Name)

            On Error GoTo 0

            If wsDst.Name = wsSrc.Name Then
                lLastRow = wsDst.UsedRange.Rows(wsDst.UsedRange.Rows.Count).Row + 1
                wsSrc.UsedRange.Copy
                wsDst.Range("A" & lLastRow).PasteSpecial xlPasteValues
            End If
        Next wsSrc

        wbSrc.Close False
        strFilename = Dir()
    Loop

    Application.DisplayAlerts = True
    Application.EnableEvents = True
    Application.ScreenUpdating = True
End Sub
子项目宏()
将wbDst设置为工作簿
将wsDst设置为工作表
将wbSrc设置为工作簿
将wsSrc设置为工作表
将MyPath设置为字符串
将strFilename设置为字符串
昏暗的灯塔一样长
如长
将s标注为工作表,t标注为字符串
暗淡的i一样长,K一样长
K=床单数
Application.DisplayAlerts=False
Application.EnableEvents=False
Application.ScreenUpdating=False
设置wbDst=ThisWorkbook
MyPath=“C:\Users\Adam\Desktop\some files\”
strFilename=Dir(MyPath&“*.xls*”,vbNormal)
当strFilename“”时执行此操作
Set wbSrc=Workbooks.Open(MyPath&strFilename)
'循环浏览源文件中的每个工作表
对于wbSrc.工作表中的每个wsSrc
'在目标中找到具有相同
名称作为源
对于i=K到1步骤-1
t=图纸(i).名称
如果t=“某些账户”,则
Application.DisplayAlerts=False
第(i)页。删除
Application.DisplayAlerts=True
如果结束
接下来我
出错时继续下一步
设置wsDst=wbDst.Worksheets(wsSrc.Name)
错误转到0
如果wsDst.Name=wsSrc.Name,则
lLastRow=wsDst.UsedRange.Rows(wsDst.UsedRange.Rows.Count)。Row+1
wsSrc.UsedRange.Copy
wsDst.Range(“A”&lLastRow).paste特殊XLPaste值
如果结束
下一个wsSrc
wbSrc.Close错误
strFilename=Dir()
环
Application.DisplayAlerts=True
Application.EnableEvents=True
Application.ScreenUpdating=True
端接头
您有这一行:

 Set wsDst = wbDst.Worksheets(wsSrc.Name)
就在用关闭所有错误之后

 On Error Resume Next
删除错误时的
“继续下一步”
,因为设置
wsDST
的下一行100%失败,因此您的
wsDST
未设置,因此您无法为您的
If
语句获取
wsDST.Name


为什么
Set-wsDst
行失败是另一个问题

“为什么
Set-wsDst
行失败…”-这意味着源工作簿和目标工作簿之间不匹配-我建议测试
wbDst.Worksheets(wsSrc.Name)
是否存在。@BigBen完全同意。我觉得这可能会在故障排除部分详细说明,因此我认为OP的第二个问题可能适合通过删除错误处理来找出他们引入/发现的新错误。谢谢JNevill。对不起,宏自动化有点新。然后我得到的错误是对象“\u工作表”的方法“Name”失败。这就需要一个新的问题吗?是的。我认为这应该是一个新问题,因为它是不相关的。理论上,
wsSrc.Name
不应该抛出该错误,因为您正在迭代工作簿中的所有工作表。我的猜测是,为K移动
。。。。下一个
块,在每个wsSrc…行的
之前执行。因为您可能正在将wsSrc设置为
some_Accounts
,然后将其删除,使其不再存在。如果这还不能解决问题,那么就弹出一个新问题,这样大家就可以集中注意力了。@jnevil首先删除工作表(
For K……Next