Excel 我可以通过在一个代码模块中生成多表工作表的代码来减少文件大小吗?

Excel 我可以通过在一个代码模块中生成多表工作表的代码来减少文件大小吗?,excel,vba,activex,filesize,Excel,Vba,Activex,Filesize,我一直在用excel文件简化从不同非洲农场的采购 订单快要完成了,但我偶然发现了一个恼人的问题。我剩下一个19MB的文件 每个工作表有两个活动的X按钮(“+”和“-”)。共8张工作表。一周中的每一天一个+一个在“计划”工作表中收集和汇总数量的工作表 按钮“+”添加指定的行(参见下面的代码) 按钮“-”删除一行(并添加一行以保持与下面相同的布局:) 此外,还有一个宏是myworksheet模块,它可以保持布局整洁 Public Sub HideAllButPrintArea() Dim xPrin

我一直在用excel文件简化从不同非洲农场的采购

订单快要完成了,但我偶然发现了一个恼人的问题。我剩下一个19MB的文件

每个工作表有两个活动的X按钮(“+”和“-”)。共8张工作表。一周中的每一天一个+一个在“计划”工作表中收集和汇总数量的工作表

按钮“+”添加指定的行(参见下面的代码)

按钮“-”删除一行(并添加一行以保持与下面相同的布局:)

此外,还有一个宏是myworksheet模块,它可以保持布局整洁

Public Sub HideAllButPrintArea()
Dim xPrintRng As Range
Dim xFirstRng As Range
Dim xLastRng As Range
Application.ScreenUpdating = False

With Application.ActiveSheet
    .Cells.EntireColumn.Hidden = False
    .Cells.EntireRow.Hidden = False

    If .PageSetup.PrintArea <> "" Then
        Set xPrintRng = .Range(.PageSetup.PrintArea)
    Else
        Set xPrintRng = .UsedRange
    End If

    Set xFirstRng = xPrintRng.Cells(1)
    Set xLastRng = xPrintRng.Cells(xPrintRng.Count)

    If xFirstRng.Row > 1 Then
        .Range(.Cells(1, 1), xFirstRng(-0, 1)).EntireRow.Hidden = True
    End If

    If xFirstRng.Column > 1 Then
        .Range(.Cells(1, 1), xFirstRng(1, 0)).EntireColumn.Hidden = True
    End If

    If xLastRng.Row < .Rows.Count Then
        .Range(xLastRng(2, 1), .Cells(.Rows.Count, 1)).EntireRow.Hidden = True
    End If

    If xLastRng.Column < .Columns.Count Then
        .Range(xLastRng(1, 2), .Cells(1, .Columns.Count)).EntireColumn.Hidden = 
True
    End If
End With

Application.ScreenUpdating = True

End Sub
公共子HIDEALBUTTPRINTAREA()
Dim xPrintRng As范围
Dim xFirstRng As范围
调暗范围
Application.ScreenUpdating=False
使用Application.ActiveSheet
.Cells.EntireColumn.Hidden=假
.Cells.EntireRow.Hidden=False
如果.PageSetup.PrintArea为“”,则
设置xPrintRng=.Range(.PageSetup.PrintArea)
其他的
设置xPrintRng=.UsedRange
如果结束
设置xFirstRng=xPrintRng.Cells(1)
设置xLastRng=xPrintRng.Cells(xPrintRng.Count)
如果xFirstRng.Row>1,则
.Range(.Cells(1,1),xFirstRng(-0,1)).EntireRow.Hidden=True
如果结束
如果xFirstRng.Column>1,则
.Range(.Cells(1,1),xFirstRng(1,0)).entireclumn.Hidden=True
如果结束
如果xLastRng.Row<.Rows.Count,则
.Range(xLastRng(2,1),.Cells(.Rows.Count,1)).EntireRow.Hidden=True
如果结束
如果xLastRng.Column<.Columns.Count,则
.Range(xlastng(1,2),.Cells(1,.Columns.Count)).EntireClumn.Hidden=
真的
如果结束
以
Application.ScreenUpdating=True
端接头

如果这是工作簿中的所有代码,我如何在保持每个工作表上的按钮不变的同时将文件大小减小到最好的大小?这不是工作簿太大的原因。正如@VitaliyPrushak在上面所写的。但除此之外,您的代码是可怕的,因为使用宏记录器。应删除所有“滚动”行。然后在搜索窗口中键入“如何避免使用选择和激活”,并阅读“完全限定范围vba”(我不知道tu如何在此处放置链接)。这个代码总有一天会失败。
Private Sub CommandButton2_Click()

Sheets("FRIDAY").Select ActiveSheet.Unprotect Password:="ORDER"

Dim varUserInput As Variant  varUserInput = InputBox("Enter Row Number that you want to delete", _   "What Row?")  If varUserInput = "" Then Exit Sub

RowNum = varUserInput
Rows(RowNum & ":" & RowNum).Delete Shift:=x1Down
Rows("49:49").Select Selection.Insert Shift:=xlUp

Range("A48:K48").Select
Selection.Copy
Range("A49:K49").Select
ActiveSheet.Paste
ActiveWindow.SmallScroll Down:=-105
Range("B1:K1").Select
Sheets("FRIDAY").Select ActiveSheet.Protect Password:="ORDER"

End Sub
Public Sub HideAllButPrintArea()
Dim xPrintRng As Range
Dim xFirstRng As Range
Dim xLastRng As Range
Application.ScreenUpdating = False

With Application.ActiveSheet
    .Cells.EntireColumn.Hidden = False
    .Cells.EntireRow.Hidden = False

    If .PageSetup.PrintArea <> "" Then
        Set xPrintRng = .Range(.PageSetup.PrintArea)
    Else
        Set xPrintRng = .UsedRange
    End If

    Set xFirstRng = xPrintRng.Cells(1)
    Set xLastRng = xPrintRng.Cells(xPrintRng.Count)

    If xFirstRng.Row > 1 Then
        .Range(.Cells(1, 1), xFirstRng(-0, 1)).EntireRow.Hidden = True
    End If

    If xFirstRng.Column > 1 Then
        .Range(.Cells(1, 1), xFirstRng(1, 0)).EntireColumn.Hidden = True
    End If

    If xLastRng.Row < .Rows.Count Then
        .Range(xLastRng(2, 1), .Cells(.Rows.Count, 1)).EntireRow.Hidden = True
    End If

    If xLastRng.Column < .Columns.Count Then
        .Range(xLastRng(1, 2), .Cells(1, .Columns.Count)).EntireColumn.Hidden = 
True
    End If
End With

Application.ScreenUpdating = True

End Sub