此代码为NotCopySheet变量的行设置值返回错误91。当我仅将代码保留在MsgBox行中时,VBA运行良好。 我在工作表中有一个名为“ NotCopy”的范围。 我没有太多VBA经验。这是我发现可以完成我所需要的代码。我将使用NotCopySheet变量停止复制/删除前几张纸。
Sub CopyWorkbookValue()
Dim Output As Workbook, Source As Workbook
Dim sh As Worksheet
Dim FileName As String
Dim OriginalName As String
Dim firstCell
Dim NotCopySheet As Integer
OriginalName = ActiveWorkbook.Name
NotCopySheet = ActiveSheet.Range("NotCopy").Cells(1, 1).Value
MsgBox "The number of sheet ignore is " & NotCopySheet
Application.ScreenUpdating = False
Set Source = ActiveWorkbook
Set Output = Workbooks.Add
Application.DisplayAlerts = False
Dim i As Integer
For Each sh In Source.Worksheets
Dim newSheet As Worksheet
' select all used cells in the source sheet:
sh.Activate
sh.UsedRange.Select
Application.CutCopyMode = False
Selection.Copy
' create new destination sheet:
Set newSheet = Output.Worksheets.Add(after:=Output.Worksheets(Output.Worksheets.Count))
newSheet.Name = sh.Name
' make sure the destination sheet is selected with the right cell:
newSheet.Activate
firstCell = sh.UsedRange.Cells(1, 1).Address
newSheet.Range(firstCell).Select
' paste the values:
Range(firstCell).PasteSpecial Paste:=xlPasteColumnWidths
Range(firstCell).PasteSpecial Paste:=xlPasteFormats
Range(firstCell).PasteSpecial Paste:=xlPasteValues, _
Operation:=xlNone, SkipBlanks:=True, Transpose:=False
Next
' delete the sheets that were originally there
While Output.Sheets.Count > Source.Worksheets.Count
Output.Sheets(1).Delete
Wend
FileName = "C:\Dropbox\0 EPAS Export\ValueOnly_" & OriginalName
Output.SaveAs FileName
'Output.Close
Application.ScreenUpdating = True
End Sub
答案 0 :(得分:0)
查看代码后,只需一行代码即可完成
。ActiveWorkbook.SaveCopyAs "C:\Dropbox\0 EPAS Export\ValueOnly_" & ThisWorkbook.Name & ".xlsx"
或更佳
ThisWorkbook.SaveCopyAs "C:\Dropbox\0 EPAS Export\ValueOnly_" & ThisWorkbook.Name & ".xlsx"
更新:ThisWorkbook.Name
引用具有宏的工作簿。据我从您的代码中了解到,您正在尝试从ActiveWorkbook
复制所有工作表。如果运行宏时另一个工作簿处于活动状态,则使用ActiveWorkbook
可能会产生不良结果。 ValueOne & workbook.name
是您将要使用的新工作簿命名约定。您之前也评论过要删除工作表,可以通过将代码添加到宏中或打开新工作簿并删除要使用的工作表来实现。
答案 1 :(得分:0)
该错误很可能是由NotCopySheet = ActiveSheet.Range(“ NotCopy”)。Cells(1、1).Value中的“ ActiveSheet”引起的。如果ActiveSheet不是具有命名范围“ NotCopy”的工作表,则将导致问题。话虽如此,您的代码比需要的复杂得多。您要做的就是将所有公式转换为值,然后以新名称保存文件。
Sub CopyWorkbookValue()
Dim NotCopySheet As Integer
On Error GoTo ErrorExit
NotCopySheet = Range("NotCopy").Cells(1, 1).Value
MsgBox "The number of sheet ignore is " & NotCopySheet
For Each sh In ThisWorkbook.Sheets
sh.UsedRange.Copy
sh.UsedRange.PasteSpecial Paste:=xlPasteValues
Next sh
ThisWorkbook.SaveCopyAs "C:\Dropbox\0 EPAS Export\ValueOnly_" & ThisWorkbook.Name & ".xlsx"
Exit Sub
ErrorExit:
MsgBox "Error text here."
End Sub
查看您的代码,看起来您过度依赖宏记录器来生成代码。虽然宏记录器很有用,但它也会生成许多不需要的代码。停下来,想一想到底要执行什么操作,然后使用宏记录器生成将执行所需操作的代码段。查看宏记录器生成的代码,并弄清楚每一行到底在做什么,以及是否真的需要在代码中包括它。