Excel中定义的行数和列数

Excel中定义的行数和列数,excel,vba,Excel,Vba,我可以用Excel制作工作簿并指定行数和列数吗?例如20行5列?我正在制作一个始终具有相同行数和列数的电子表格,我想禁用“滚动到无穷大”选项。如果工作表有固定大小(1048576行乘以16384列),您需要执行以下操作之一: 通过禁用Excel中的滚动来限制行数和列数 限制隐藏行和列的行和列数 在这里,你可以看到一张图片,清楚地解释这两种方法和所有需要的步骤 下面的代码隐藏额外的行和列,并限制单元格的选择/移动 (只需更新模块1中的MAX_COL和MAX_ROW常量) 此工作簿中的代码模块

我可以用Excel制作工作簿并指定行数和列数吗?例如20行5列?我正在制作一个始终具有相同行数和列数的电子表格,我想禁用“滚动到无穷大”选项。

如果工作表有固定大小(1048576行乘以16384列),您需要执行以下操作之一:

  • 通过禁用Excel中的滚动来限制行数和列数
  • 限制隐藏行和列的行和列数

在这里,你可以看到一张图片,清楚地解释这两种方法和所有需要的步骤

下面的代码隐藏额外的行和列,并限制单元格的选择/移动

(只需更新模块1中的MAX_COL和MAX_ROW常量)


此工作簿中的代码模块:



模块1中的代码(通用模块):



选择整行或整列,单击鼠标右键,隐藏。选择所有未使用的行或列,单击鼠标右键,隐藏它们
Option Explicit

Public Sub MinimizeAllSheets()
    Dim ws As Worksheet

    Application.ScreenUpdating = False
    For Each ws In ThisWorkbook.Worksheets
        MinimizeSheet ws
    Next
    Application.ScreenUpdating = True
End Sub

Private Sub Workbook_Open()
    MinimizeAllSheets
End Sub

'If ScrollArea is not set
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
    RestrictMovement Target
End Sub
Option Explicit

Private Const MAX_COL = 5   'Update default limits (all sheets)
Private Const MAX_ROW = 20

Public Sub MinimizeSheet(Optional ByRef ws As Worksheet, _
                         Optional ByVal maxCol As Long = MAX_COL, _
                         Optional ByVal maxRow As Long = MAX_ROW)

    If maxCol > 0 And maxRow > 0 Then
        Dim actWs As Worksheet
        If ws Is Nothing Then
            Set ws = ActiveSheet
        Else
            If ws.Name <> ActiveSheet.Name Then
                Set actWs = ActiveSheet
                ws.Activate
            End If
        End If
        ActiveWindow.ScrollColumn = 1
        ActiveWindow.ScrollRow = 1
        With ws.Range(ws.Cells(1, maxCol + 1), ws.Cells(1, Columns.Count))
            .EntireColumn.Hidden = True
        End With
        ws.Rows(maxRow + 1 & ":" & Rows.Count).EntireRow.Hidden = True
        'ScrollArea also limits the selection
        ws.ScrollArea = ws.Range(ws.Cells(1), ws.Cells(maxRow, maxCol)).Address
        If Not actWs Is Nothing Then actWs.Activate
    End If
End Sub
Public Sub RestrictMovement(ByVal Target As Range)  'If ScrollArea is not set
    With Target
        If .CountLarge = 1 Then
            If .Column > MAX_COL Then .Parent.Cells(.Row, MAX_COL).Activate
            If .Row > MAX_ROW Then .Parent.Cells(MAX_ROW, .Column).Activate
        Else
            If (.Column - 1) + .Columns.Count > MAX_COL Then
                Set Target = .Resize(.Rows.Count, MAX_COL)
            End If
            If (.Row - 1) + .Rows.Count > MAX_ROW Then
                Set Target = .Resize(MAX_ROW, .Columns.Count)
            End If
        End If
    End With
End Sub