如何在 Excel 中展开一行,以便更好地进行编辑?

如何在 Excel 中展开一行,以便更好地进行编辑?

假设我们有一个这样的 Excel 电子表格:

在此处输入图片描述

有没有一种简单的方法,最好是内置在 Excel 中,来“展开一行”有能力去:

  • 更好地查看此行的所有数据
  • 可以更轻松地编辑此行的所有列

例如:单击第 3 行(Jane Smith)左侧的蓝色按钮,将暂时显示如下内容:

在此处输入图片描述

提供更好的视图和更简单的编辑。单击按钮CLOSE将返回到正常的电子表格视图。

如果我没记错的话,我认为这在 MS Access 等数据库程序中是可以实现的,但是如何使用 Excel 来实现呢?

答案1

其他答案使用了 Excel 的内置数据表。这提供了一种强大的机制,无需 VBA 即可在数据列表中添加/编辑/删除数据行。数据表单具有以下功能

  • 从功能区/快速访问工具栏激活时,它默认为第一个数据行,但允许直观导航到后续行
  • 数据列表中的所有字段(列)都是可编辑的,并且提供了单独的一行文本框来更改每个字段

在某些情况下,这些功能可能不太理想 - 例如当数据项包含非常长的文本字符串时。

作为数据表单的替代方案,以下解决方案使用用户窗体。用户表单比数据表单提供了更大的灵活性,但缺点是需要 VBA 编码和一些设计技能。所示的用户表单基于对 OP 要求的以下假设

  1. 用户表单的主要要求是查看和更改列中的内容注1笔记2笔记2注4数据列表
  2. 姓名用户身份列仅用于标识数据行。这两列中的值是正确的,不需要更改
  3. 不需要用户窗体提供添加或删除数据列表行的功能
  4. 应该能够灵活地在数据列表的行之间移动
  5. 用户窗体应该能够被打开和关闭

用户窗体显示在下面的屏幕截图中。

显示用户表单叠加的数据列表

用户表单的行为

  1. 当工作表处于“表单模式”(见下文 4.)时,选择单身的任何列标题内的单元格注1笔记2注3或者注4显示相应内容笔记项目,以及姓名用户身份行首的值。笔记涉及 (注1笔记2注3或者注4) 由用户窗体中大文本框左侧的标签表示。用户窗体是模态的,因此用户必须与窗体交互才能继续。
  2. 大号文字笔记用户可以更改文本框。标有“保存更改”的按钮将文本框的当前内容写入相应的笔记工作表单元格并“关闭”用户窗体(将其从显示中删除)。标有“取消”的按钮也会“关闭”用户窗体,但不会更新相应的笔记细胞。
  3. 用户表单中不提供导航功能。相反,用户可以“关闭”表单(使用两个按钮之一)并可以使用标准 Excel 界面导航到其他单元格。只要工作表上当前选定的单元格满足上述 1. 中指定的条件,表单就会重新出现。
  4. 工作表将保持“表单模式”,直到使用“关闭”按钮(表单右上角的标准“X”)关闭用户表单。可以通过运行宏将工作表重新置于“表单模式” FormMode

结构和组织

  1. 数据(包括标题行和姓名用户身份列包含在名为MyData
  2. 用户窗体名为EditForm。该窗体包含 5 个标签、1 个文本框、2 个按钮和标题栏上的标准“关闭按钮”。EditForm具有一个布尔属性EditOn,用于确定“窗体模式”是打开还是关闭。
  3. 有一个 VBA 模块声明了几个Public变量intDataRowintDataColumn它们是包含单元格的行和列MyData,提供了笔记文本框显示在 中EditForm。该模块还包含一个宏FormMode,它只需通过分配即可打开“表单模式” EditForm.EditOn = True
  4. 工作表包含MyData一个Worksheet_SelectionChange程序。此程序测试
    • “表单模式”是否开启
    • 工作表上是否选择了单个单元格
    • 此单元格是否包含在笔记MyData(标题行之后)如果任何测试失败,该过程将不执行任何操作。否则,它将计算所选单元格的intDataRow和值,并通过其方法显示。intDataColumnEditFormShow
  5. EditForm 模块包含以下步骤:
    • Property Let以及用户窗体的Property Get属性EditOn
    • UserForm_Activate事件过程。该事件由 (见上文 4.)触发EditForm.Show,并根据intDataRow和的当前值从工作表中填充用户窗体intDataColumn
    • “保存更改”和“取消”按钮的按钮_Click程序。前者使用Range("MyData").Cell(intDataRow,intDataColumn)用户窗体的文本框的内容进行更新。这两个程序都通过窗体的方法从显示中删除用户窗体(“关闭”它)Hide

VBA 项目的屏幕截图如下所示。

VBA 项目

该表单虽然基础但功能齐全。显然可以进行调整和改进以满足需求。它提供的模型与 Excel 的数据表单不同。

使用的 VBA 代码如下所示。

包含 MyData 范围的工作表代码

Option Explicit

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    
    If Not EditForm.EditOn Then
        Exit Sub
    End If
  
    If Target.Rows.Count > 1 Or _
        Target.Columns.Count > 1 Then
        Exit Sub
    End If
  
  
    If Target.Row < Range("MyData").Row + 1 Or _
        Target.Row > Range("MyData").Row + Range("MyData").Rows.Count - 1 Or _
        Target.Column < Range("MyData").Column + 2 Or _
        Target.Column > Range("MyData").Column + Range("MyData").Columns.Count - 1 Then
        Exit Sub
    End If

    intDataRow = 1 + Target.Row - Range("MyData").Row
    intDataColumn = 1 + Target.Column - Range("MyData").Column
       
    EditForm.Show
        
End Sub

表单代码 EditForm

Option Explicit

Private pEditMode As Boolean

Public Property Let EditOn(bValue As Boolean)
    pEditMode = bValue
End Property

Public Property Get EditOn() As Boolean    
    EditOn = pEditMode
End Property

Private Sub UserForm_Activate()
    Name_Field.Caption = Range("MyData").Cells(intDataRow, 1)
    UserID_Field.Caption = Range("MyData").Cells(intDataRow, 2)
    NoteLabel.Caption = "Note" & (intDataColumn - 2) & ":"
    Note_Field.Value = Range("MyData").Cells(intDataRow, intDataColumn)
End Sub

Private Sub CancelButton_Click()
    Me.Hide
End Sub
    
Private Sub SaveButton_Click()
    Range("MyData").Cells(intDataRow, intDataColumn) = Note_Field.Value
    Me.Hide
End Sub

模块代码

Option Explicit

Public intDataRow As Integer
Public intDataColumn As Integer

Sub FormMode()
    EditForm.EditOn = True
End Sub

答案2

以下是如何添加 VBA 宏来显示 数据表 当前行。

  • 在 Excel 中 显示“开发工具”选项卡

  • 将工作簿另存为启用宏的.xlsm文件(不是.xlsx

  • 转到“开发人员”选项卡

  • 单击“Visual Basic”

  • 选择菜单项插入 > 模块

  • 在打开的文本编辑器中,复制以下文本:

      Option Explicit
      Sub CurrRowForm()
      SendKeys "{DOWN " & ActiveCell.Row - 2 & "}{TAB 3}"
      Application.DisplayAlerts = False
      ActiveSheet.ShowDataForm
      Application.DisplayAlerts = True
      End Sub
    
  • Ctrl+保存,然后按+S 退出 VBA 编辑器 AltQ

  • 测试新的宏:

    • 选择您的行

    • 在“开发人员”选项卡中单击“宏”

    • 确保CurrRowForm选择了宏

    • 单击运行按钮

    • 当第二行是当前行时,结果应如下所示:

      在此处输入图片描述

您可以通过以下方式为宏指定热键:

  • 进入开发人员 > 宏
  • CurrRowForm确保选择了宏
  • 单击“选项”
  • 选择您的快捷键
  • 单击“确定”

在此处输入图片描述

您也可以CurrRowForm 在功能区中添加宏按钮

答案3

我还没有读到任何提及Windows 中数据选项卡、Data Entry组、键上的内置 Excel 数据表单的评论。Alt A Y 2

公式是只读的,单元格保护得以维护;但是,无法更改字段的高度或宽度。

字段会自动加宽,但只能加宽到一定程度。您可以设置热键来避免使用功能区键序列。

相关内容