Vba 环路及;在单独的WKBK中搜索匹配的工作表;如果未找到匹配项,则添加Wksht
我有一系列按地区、地区和时期划分的工作手册,其中包含地区、地区和时期组合的每月销售数据。每个地区都有一份主工作簿,其中包含每个地区的单独工作表。每月数据显示在列Vba 环路及;在单独的WKBK中搜索匹配的工作表;如果未找到匹配项,则添加Wksht,vba,excel,Vba,Excel,我有一系列按地区、地区和时期划分的工作手册,其中包含地区、地区和时期组合的每月销售数据。每个地区都有一份主工作簿,其中包含每个地区的单独工作表。每月数据显示在列B:M中 我需要打开每个月度地区、地区和期间文件,打开相应地区的主工作簿,搜索相应地区,并将该月的数据粘贴到与该月相关的列中(例如,2月数据粘贴到C列)。然后关闭月度文件并循环到下一个月度文件 然而,我需要有一个代码,以便在年中,在一个地区的主工作簿最初创建之后的某个时间,向该地区添加一个新的地区 编写的循环希望从打开的每月文件跳转到将创
B:M
中
我需要打开每个月度地区、地区和期间文件,打开相应地区的主工作簿,搜索相应地区,并将该月的数据粘贴到与该月相关的列中(例如,2月数据粘贴到C列)。然后关闭月度文件并循环到下一个月度文件
然而,我需要有一个代码,以便在年中,在一个地区的主工作簿最初创建之后的某个时间,向该地区添加一个新的地区
编写的循环希望从打开的每月文件跳转到将创建新工作表的循环代码的下一部分,但这不是所需要的
有没有解决这个问题的建议?以下是我到目前为止的情况:
Sub DSMReportsP02()
Application.ScreenUpdating = False
Application.EnableEvents = False
Dim DistrictDSM As Range, DistrictsDSMList As Range
Dim Period As String, Path As String, DistPeriodFile As String, Territory As String
Dim YYYY As Variant
Dim WBMaster As Workbook, DistMaster As Workbook, CurDstTerrFile As Workbook
Dim wsCount As Integer, x As Integer
Dim wsExists As Boolean
Set DistrictsDSMList = Range("E11:E" & Cells(Rows.Count, "E").End(xlUp).Row)
Set WBMaster = ActiveWorkbook
Period = Range("C6").Value
YYYY = Range("C8").Value
wsExists = False
For Each DistrictDSM In DistrictsDSMList.Cells
Workbooks.Open Filename:="H:\Accounting\Monthend " & YYYY & "\DSM Files\DSM Master Reports\" & DistrictDSM & ".xlsx"
Set DistMaster = ActiveWorkbook
wsCount = Application.Sheets.Count
Path = "H:\Accounting\Monthend " & YYYY & "\DSM Files\" & DistrictDSM & "\P02"
DistPeriodFile = Dir(Path & "\*.xlsx")
Do While DistPeriodFile <> ""
Workbooks.Open Filename:=Path & "\" & DistPeriodFile, UpdateLinks:=False
DistPeriodFile = Dir
Set CurDstTerrFile = ActiveWorkbook
Territory = CurDstTerrFile.Sheets("Index").Range("A3").Value
For x = 1 To wsCount
If DistMaster.Worksheets(x).name = Territory Then
CurDstTerrFile.Sheets("Index").Range("F20").Copy 'PM
DistMaster.Sheets(Territory).Activate
Range("C3").PasteSpecial Paste:=xlPasteValues
CurDstTerrFile.Sheets("Index").Range("J20").Copy 'XRA
DistMaster.Sheets(Territory).Activate
Range("C5").PasteSpecial Paste:=xlPasteValues
CurDstTerrFile.Sheets("Index").Range("N20").Copy 'CO-OP
DistMaster.Sheets(Territory).Activate
Range("C7").PasteSpecial Paste:=xlPasteValues
CurDstTerrFile.Sheets("Index").Range("S20").Copy 'VR
DistMaster.Sheets(Territory).Activate
Range("C9").PasteSpecial Paste:=xlPasteValues
CurDstTerrFile.Sheets("Index").Range("W20").Copy 'OVER & ABOVE
DistMaster.Sheets(Territory).Activate
Range("C11").PasteSpecial Paste:=xlPasteValues
CurDstTerrFile.Sheets("Index").Range("AA20").Copy 'SS
DistMaster.Sheets(Territory).Activate
Range("C13").PasteSpecial Paste:=xlPasteValues
CurDstTerrFile.Sheets("Index").Range("A3:D19").Copy 'COPY BTs by DISTRICT
WBMaster.Sheets("BTs by District").Activate
Range("A1000000").End(xlUp).Offset(1, 0).PasteSpecial Paste:=xlPasteValues
Exit For
End If
Next x
If wsExists = False Then '***********FIX THIS SECTION!!!*************************
Worksheets.Add after:=DistMaster.Worksheets(Worksheets.Count)
CurDstTerrFile.Sheets("Index").Range("A3").Copy 'COPY TERRITORY
ActiveSheet.name = "New Territory"
DistMaster.Sheets(Territory).Activate
Range("A1").PasteSpecial Paste:=xlPasteValues
End If
Dim WS As Worksheet, SheetXXX As Worksheet
Set WS = WBMaster.Sheets("ReptTemplate")
WS.Copy after:=Sheets(WBMaster.Sheets.Count)
Set SheetXXX = ActiveWorkbook.ActiveSheet
SheetXXX.name = Worksheets("ReptTemplate").Range("A1").Value
CurDstTerrFile.Close
Loop
Dim DistWS As Worksheet
Dim DistName As String
Dim wbNew As Workbook
DistName = Left(DistrictDSM, 6) & "*"
Set wbNew = Application.Workbooks.Add
For Each DistWS In WBMaster.Sheets
If DistWS.name Like DistName Then DistWS.Move after:=Sheets(wbNew.Sheets.Count)
Next DistWS
With wbNew
.SaveAs "H:\Accounting\Monthend " & YYYY & "\DSM Files\DSM Master Reports\" & DistrictDSM & ".xlsx"
.Close
End With
Next DistrictDSM
Application.EnableEvents = True
End Sub
子DSMReportsP02()
Application.ScreenUpdating=False
Application.EnableEvents=False
Dim DistrictDSM作为范围,DistrictsDSMList作为范围
Dim Period作为字符串,Path作为字符串,DistPeriodFile作为字符串,Territory作为字符串
Dim YYYY作为变量
Dim WBMaster作为工作簿,DistMaster作为工作簿,CurDstTerrFile作为工作簿
Dim wsCount为整数,x为整数
它以布尔形式存在
Set DistrictsDSMList=范围(“E11:E”和单元格(Rows.Count,“E”)。结束(xlUp).Row)
设置WBMaster=ActiveWorkbook
周期=范围(“C6”)。值
YYYY=范围(“C8”).值
wsExists=False
对于DistrictsDSMList.Cells中的每个DistrictDSM
工作簿。打开文件名:=“H:\Accounting\Monthend”&YYYY&“\DSM Files\DSM Master Reports\”&DistrictDSM&“.xlsx”
设置DistMaster=ActiveWorkbook
wsCount=Application.Sheets.Count
Path=“H:\Accounting\Monthend”&YYYY&“\DSM Files\”&DistrictDSM&“\P02”
DistPeriodFile=Dir(路径&“\*.xlsx”)
删除文件“”时执行此操作
工作簿。打开文件名:=Path&“\”&DistPeriodFile,UpdateLinks:=False
DistPeriodFile=Dir
设置curdsterrfile=ActiveWorkbook
Territory=curdsterrfile.Sheets(“索引”).范围(“A3”).值
对于x=1到wsCount
如果DistMaster.Worksheets(x).name=Territory,则
curdsterrfile.Sheets(“索引”).范围(“F20”).复制“PM”
DistMaster.Sheets(区域)。激活
范围(“C3”)。粘贴特殊粘贴:=XLPasteValue
curdsterrfile.Sheets(“Index”).Range(“J20”)。复制“XRA”
DistMaster.Sheets(区域)。激活
范围(“C5”)。粘贴特殊粘贴:=XLPaste值
curdsterrfile.Sheets(“索引”).Range(“N20”).Copy'CO-OP
DistMaster.Sheets(区域)。激活
范围(“C7”)。粘贴特殊粘贴:=XLPasteValue
curdsterrfile.Sheets(“索引”).范围(“S20”).复制“VR”
DistMaster.Sheets(区域)。激活
范围(“C9”)。粘贴特殊粘贴:=XLPasteValue
curdsterrfile.Sheets(“索引”).Range(“W20”)。复制以上内容
DistMaster.Sheets(区域)。激活
范围(“C11”)。粘贴特殊粘贴:=XLPasteValue
curdsterrfile.Sheets(“索引”).范围(“AA20”).副本“SS”
DistMaster.Sheets(区域)。激活
范围(“C13”)。粘贴特殊粘贴:=XLPasteValue
curdsterrfile.Sheets(“索引”).范围(“A3:D19”).复制“按地区复制基站”
WBMaster.Sheets(“按地区划分的基站”)。激活
范围(“A1000000”)。结束(xlUp)。偏移量(1,0)。粘贴特殊粘贴:=xlPasteValues
退出
如果结束
下一个x
如果wsExists=False,则'**********修复此部分*************************
Worksheets.Add after:=DistMaster.Worksheets(Worksheets.Count)
curdsterrfile.Sheets(“索引”).范围(“A3”).复制“复制区域”
ActiveSheet.name=“新领土”
DistMaster.Sheets(区域)。激活
范围(“A1”)。粘贴特殊粘贴:=XLPaste值
如果结束
图纸WS作为工作表,图纸XXX作为工作表
设置WS=WBMaster.Sheets(“ReptTemplate”)
WS.Copy after:=工作表(WBMaster.Sheets.Count)
设置SheetXXX=ActiveWorkbook.ActiveSheet
SheetXXX.name=工作表(“ReptTemplate”).范围(“A1”).值
curdsterrfile.Close
环
Dim DistWS作为工作表
Dim DistName作为字符串
以工作簿的形式新建
DistName=左侧(DistrictDSM,6)和“*”
设置wbNew=Application.Workbooks.Add
对于WBMaster.Sheets中的每个DistWS
如果DistWS.name类似于DistName,那么DistWS.Move after:=Sheets(wbNew.Sheets.Count)
下一步
用wbNew
.SaveAs“H:\Accounting\Monthend”&yyy&“\DSM Files\DSM Master Reports\”&DistrictDSM&“.xlsx”
.结束
以
下一区
Application.EnableEvents=True
端接头
很抱歉,我无法发表评论(声誉不够,无法对问题发表评论),否则我在发布本文之前会问一些问题
据我所知。您需要的是一种逻辑/算法,用于在开始向主文件复制过程之前检查是否需要向主文件添加新图纸(新区域)。如果需要添加图纸,则应将其添加到主文件的末尾
下面的代码是一个通用代码,但是您应该能够轻松地调整它以符合您的目的
Sub Comapre_Sheets()
Dim wb1 As Workbook
Dim wb2 As Workbook
Dim wks1 As Worksheet
Dim wks2 As Worksheet
Dim bWorkSheet_Found As Boolean
Set wb1 = Workbooks("Book1") ''' Change this to the master file
Set wb2 = Workbooks("Book2") ''' Change this to the file that might have the new sheet/territory
For Each wks2 In wb2.Worksheets
bWorkSheet_Found = False
For Each wks1 In wb1.Worksheets
If wks1.name = wks2.name Then
bWorkSheet_Found = True
End If
Next wks1
If Not bWorkSheet_Found Then
wb1.Worksheets.Add(After:=Worksheets(wb1.Sheets.Count)).name = wks2.name
End If
Next wks2
End Sub