我知道这已经讨论过,我从Stackoverflow上的几个不同帖子中得到了以下代码。我的问题是,如果列" A"行的行数不等于硬编码的数字(rowsPerSheet = 10),它会将额外的行添加回原始页面。如果我有35行,我将获得3个带有工作表2和工作表的工作表。 3是正确的,但工作表1将有1-10行+ 31-35行。我应该改变什么?请原谅多余的代码,我只想确保在此过程中将答案放在正确的位置。
Sub SaveSheets()
Application.EnableEvents = False
Dim nUserInput As String
Dim wsMasterSheet As Excel.Worksheet
Dim wb As Excel.Workbook
Dim sheetCount As Integer
Dim rowCount As Integer
Dim rowsPerSheet As Integer
nUserInput = InputBox("Enter Job Number:", "Collect User Input")
Set wsMasterSheet = ActiveSheet
Set wb = ActiveWorkbook
rowsPerSheet = 10
rowCount = Application.CountA(Sheets(1).Range("A:A"))
sheetCount = Round(rowCount / rowsPerSheet, 0)
Dim i As Integer
For i = 1 To sheetCount - 1 Step 1
With wb
'Add new sheet
.Sheets.Add after:=.Sheets(.Sheets.Count)
wsMasterSheet.Range("A1:M1").EntireRow.Copy Destination:=Sheets(.Sheets.Count).Range("A1").End(xlUp)
wsMasterSheet.Range("A2" & ":M" & (rowsPerSheet + 1)).EntireRow.Cut Destination:=Sheets(.Sheets.Count).Range("A" & Rows.Count).End(xlUp).Offset(1)
wsMasterSheet.Range("A2" & ":M" & (rowsPerSheet + 1)).EntireRow.Delete
ActiveSheet.Name = "Valves " + CStr(((.Sheets.Count - 1) * rowsPerSheet + 1))
End With
Next
wsMasterSheet.Name = "Valves End"
Application.EnableEvents = True
Dim strPath As String
Dim ws As Worksheet
Application.ScreenUpdating = False
strPath = "\\Server Name\Engineering\iPortal Valves\"
For Each ws In ThisWorkbook.Sheets
ws.Copy
Workbooks(Workbooks.Count).Close True, strPath & nUserInput & "_" & ws.Name & ".xlsx"
Next
Application.Quit
ActiveWorkbook.Close SaveChanges:=True
Application.ScreenUpdating = True
End Sub
试着想一想,我想知道是否可以使用
添加某些内容lastRow = Sheet1.UsedRange.Row + Sheet1.UsedRange.Rows.Count - 1
在非编码术语中:
如果lastRow大于RowsPerSheet且小于(2 * RowsPerSheet - 1) 然后RowsPerSheet =(lastRow - RowsPerSheet)。
RowsPerSheet需要" Dim"允许代码覆盖硬值?如果我正确理解代码处理,如果重置RowsPerSheet的编码落在" For / Next"当再次运行宏时,硬编码的数字将保留。
这里的其他问题是1)如何编写代码,2)代码应该在哪里?
我已将上述代码修改为我能够完成的工作。原始工作表基于rowPerSheet拆分为单独的工作表,并创建单个文件并保存到指定位置。
感谢所有在Stackoverflow上发帖的人,所有编码都来自各个帖子。