首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >VBA在特定工作表之后拆分多个工作表(发行)

VBA在特定工作表之后拆分多个工作表(发行)
EN

Stack Overflow用户
提问于 2022-11-21 05:05:47
回答 2查看 31关注 0票数 0

我在网上发现了大量的代码

1:过滤"Mst“中的数据2:将数据拆分成不同的多张,3:在"All_total”之前应添加工作表

步骤1和2工作正常,但是步骤3工作表在最后一个工作表后添加到工作簿中。

增加屏幕截图,表1,2,3后插入,这是不想发生的,应该在"All_Total“之前插入,请告诉我哪里出错了

代码语言:javascript
运行
复制
Sub Splitdatabycol()


Dim Data_Sheet, allsku_Data_Sheet As Worksheet
Dim Pivot_Sheet As Worksheet
Dim StartPoint, DataRange As Range
Dim PivotName, NewRange, Asin, typ As String
Dim LastCol, lastRow, LastcolA, lastRowA, qtySum As Single
Dim priceSum As Single
Dim answer, j, k, l, Downcell, DowncellA, col1, col2, col3, col4, col5, col6, col7 As Integer
Dim saleExists, stockExists, errorExists, aListing As Boolean

Dim lr As Long
Dim ws As Worksheet
Dim vcol, i As Integer
Dim icol As Long
Dim myarr As Variant
Dim title As String
Dim titlerow As Integer
Dim xTRg As Range
Dim xVRg As Range
Dim xWSTRg As Worksheet
Dim xWS As Worksheet
Dim XwsNAme As Worksheet
Dim all_sku As Worksheet
On Error Resume Next
Set xTRg = Application.InputBox("Please select the header rows:", "Please Select Header", "'Mst SKU'!$AK$1", Type:=8)

If TypeName(xTRg) = "Nothing" Then Exit Sub
Set xVRg = Application.InputBox("Please select the column you want to split data based on:", "Please Select Column", "'Mst SKU'!$AK$1", Type:=8)

If TypeName(xVRg) = "Nothing" Then Exit Sub
vcol = xVRg.Column
Set ws = xTRg.Worksheet
lr = ws.Cells(ws.Rows.Count, vcol).End(xlUp).Row
title = xTRg.AddressLocal
titlerow = xTRg.Cells(0).Row
icol = ws.Columns.Count
ws.Cells(0, icol) = "Unique"
Application.DisplayAlerts = False
If Not Evaluate("=ISREF('xTRgWs_Sheet!A1')") Then
'Sheets.Add(Before:=Worksheets(Worksheets.Count)).Name = "All Total"

Else
'Sheets("All Total").Delete
'Sheets.Add(Before:=Worksheets(Worksheets.Count)).Name = "xTRgWs_Sheet!A1"
'Sheets.Add(Before:=ActiveSheet).Name = "xTRgWs_Sheet!A1"
End If
Set xWSTRg = Sheets("xTRgWs_Sheet!A1")
xTRg.Copy
xWSTRg.Paste Destination:=xWSTRg.Range("A1")
ws.Activate
For i = (titlerow + xTRg.Rows.Count) To lr
On Error Resume Next
If ws.Cells(i, vcol) <> "" And Application.WorksheetFunction.Match(ws.Cells(i, vcol), ws.Columns(icol), 0) = 0 Then
ws.Cells(ws.Rows.Count, icol).End(xlUp).Offset(1) = ws.Cells(i, vcol)
End If
Next
myarr = Application.WorksheetFunction.Transpose(ws.Columns(icol).SpecialCells(xlCellTypeConstants))
ws.Columns(icol).Clear
For i = 2 To UBound(myarr)
ws.Range(title).AutoFilter field:=vcol, Criteria1:=myarr(i) & ""
If Not Evaluate("=ISREF('" & myarr(i) & "'!A1)") Then
Set xWS = Sheets.Add(Before:=Worksheets(Worksheets.Count))
xWS.Name = myarr(i) & ""
Else
'xWS.Move Before:=Worksheets(Worksheets.Count)
xWS.Move Before:=Worksheets(ActiveSheet)
End If
xWSTRg.Range(title).Copy
xWS.Paste Destination:=xWS.Range("A")
ws.Range("A" & (titlerow + xTRg.Rows.Count) & ":A" & lr).EntireRow.Copy xWS.Range("A" & (titlerow + xTRg.Rows.Count))
Sheets(myarr(i) & "").Columns.AutoFit
Next
xWSTRg.Delete
ws.AutoFilterMode = False
ws.Activate


        Application.DisplayAlerts = False
        Application.ScreenUpdating = False
        'Call split_data
        'Set Pivot Table & Source Worksheet
        Set Data_Sheet = ThisWorkbook.Worksheets("Mst SKU")
        Set Pivot_Sheet = ThisWorkbook.Worksheets("All Total")
        
        'Enter in Pivot Table Name
        PivotName = "PivotTable1"
        
        'Defining Staring Point & Dynamic Range
        Data_Sheet.Activate
        Set StartPoint = Data_Sheet.Range("A1")
        LastCol = StartPoint.End(xlToRight).Column
        Downcell = StartPoint.End(xlDown).Row
        Set DataRange = Data_Sheet.Range(StartPoint, Cells(Downcell, LastCol))
        NewRange = Data_Sheet.Name & "!" & DataRange.Address(ReferenceStyle:=xlR1C1)
        
        'Change Pivot Table Data Source Range Address
        Pivot_Sheet.PivotTables(PivotName). _
        ChangePivotCache ActiveWorkbook. _
        PivotCaches.Create(SourceType:=xlDatabase, SourceData:=NewRange)
        
        'Ensure Pivot Table is Refreshed
        Pivot_Sheet.PivotTables(PivotName).RefreshTable
        
        'Complete Message
        Pivot_Sheet.Activate
        MsgBox "Your Pivot Table is now updated."
        
        Dim TitleNAme As Range
        Application.ScreenUpdating = True
        Application.CutCopyMode = False
        Application.DisplayAlerts = True
        TitleNAme = Application.GetOpenFilename(Filefilter = "Excel Files,*.xlsx,*.xlsm")
        MsgBox TitleNAme

End Sub
EN

回答 2

Stack Overflow用户

发布于 2022-11-21 07:37:54

以下代码将在“最后一页”之前添加新工作表:

代码语言:javascript
运行
复制
Sheets.Add(Before:=Sheets(Worksheets(Worksheets.Count).Name)).Name = "NewName"
票数 0
EN

Stack Overflow用户

发布于 2022-11-21 17:04:46

如下所示:

代码语言:javascript
运行
复制
Dim wb as Workbook, ws As Worksheet

Set wb = ActiveWorkbook 'or ThisWorkbook or some other open workbook
Set ws = wb.Worksheets.add(before:=wb.worksheets("All_Total"))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74514458

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档