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