AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / computer / 问题 / 1695332
Accepted
Basj
Basj
Asked: 2021-12-23 02:06:07 +0800 CST2021-12-23 02:06:07 +0800 CST 2021-12-23 02:06:07 +0800 CST

如何在 Excel 中展开一行,以获得更好的编辑视图?

  • 772

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

在此处输入图像描述

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

  • 更好地查看该行中的所有数据
  • 更轻松地编辑该行的所有列

?

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

在此处输入图像描述

允许更好的视图和更容易的编辑。单击该CLOSE按钮将返回到正常的电子表格视图。

如果我没记错的话,我认为这在 MS Access 等数据库程序中是可能的,但是如何用 Excel 做到这一点?

microsoft-excel microsoft-excel-2007
  • 3 3 个回答
  • 280 Views

3 个回答

  • Voted
  1. harrymc
    2021-12-26T10:07:00+08:002021-12-26T10:07:00+08:00

    以下是如何添加一个 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
  2. bugdrown
    2021-12-25T13:37:22+08:002021-12-25T13:37:22+08:00

    Data Entry我还没有阅读任何关于“数据”选项卡组上的内置 Excel 数据表单的评论。Alt A Y 2Windows 中的键。

    公式为只读,保持细胞保护;但是,无法更改字段的高度或宽度。

    字段将自动扩大,但仅限于一个点。您可以设置一个热键来避免功能区键序列。

    • 2
  3. Best Answer
    DMM
    2021-12-30T12:05:06+08:002021-12-30T12:05:06+08:00

    其他答案使用了 Excel 的内置数据表单。这提供了一种强大的机制来添加/编辑/删除数据列表中的数据行,而无需任何 VBA。数据表单具有以下特点

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

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

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

    1. 用户表单的主要要求是查看和更改数据列表的Note1、Note2、Note2和Note4列中的内容
    2. Name和UserId列仅用于标识数据行。这两列中的值是正确的,不需要更改
    3. 用户表单不需要提供添加或删除数据列表行的能力
    4. 应该可以灵活地在数据列表的行之间移动
    5. 用户表单应该能够打开和关闭

    用户表单如下面的屏幕截图所示。

    显示覆盖用户表单的数据列表

    用户表单的行为

    1. 当工作表处于“表单模式”时(参见下面的 4.),在标题为Note1、Note2、Note3或Note4的任何列中选择单个单元格会显示相应Note项目的内容,以及Name和UserId值从行的开头。涉及的注释(Note1、Note2、Note3或Note4)由用户表单中大文本框左侧的标签指示。用户表单是模态的,因此用户必须与表单交互才能进行。
    2. 大注释文本框中的文本可以由用户更改。标记为“保存更改”的按钮将文本框的当前内容写入工作表的相应注释单元格并“关闭”用户窗体(将其从显示中删除)。标记为“取消”的按钮也会“关闭”用户窗体,但不会更新相应的Note单元格。
    3. 用户表单中不提供导航功能。相反,用户“关闭”表单(使用两个按钮中的任何一个)并可以使用标准 Excel 界面导航到其他单元格。只要工作表上当前选定的单元格满足上面 1. 中指定的条件,表格就会重新出现。
    4. 工作表保持在“表单模式”,直到使用“关闭”按钮(表单右上角的标准“X”)关闭用户表单。可以通过运行宏将工作表放回“表单模式” FormMode。

    结构和组织

    1. 数据(包括标题行以及Name和UserId列)包含在名为MyData
    2. 用户窗体称为EditForm. 该表单包含 5 个标签、1 个文本框、2 个按钮和标题栏上的标准“关闭按钮”。EditForm有一个布尔属性EditOn,它决定“表单模式”是打开还是关闭。
    3. 有一个 VBA 模块,它声明了几个Public变量intDataRow,intDataColumn它们是包含单元格的行和列,其中MyData提供了显示在中的NoteEditForm文本框的内容。该模块还包含FormMode通过赋值简单地打开“表单模式”的宏EditForm.EditOn = True。
    4. 包含的工作表MyData包含一个Worksheet_SelectionChange过程。此程序测试
      • “表单模式”是否开启
      • 是否在工作表上选择了单个单元格
      • 此单元格是否包含在注释列中MyData(在标题行之后) 如果任何测试失败,则该过程不执行任何操作。否则,它会计算所选单元格的intDataRow和值,并通过其方法显示。intDataColumnEditFormShow
    5. EditForm 的模块包含以下过程:
      • Property Let以及用户表单Property Get的EditOn属性
      • UserForm_Activate事件程序。该事件由(在上面的 4. 中)触发,并根据和EditForm.Show的当前值从工作表填充用户表单。intDataRowintDataColumn
      • “保存更改”和“取消”按钮的按钮_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
    
    • 1

相关问题

  • 带有“和”运算符的 Excel 数据透视表

  • 如何对整列使用 Excel 的 LENGTH 函数?

  • Excel 数组(2 个变量)

  • 如何从 WSL 打开 office 文件

  • VBA根据文件名重命名工作表

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何减少“vmmem”进程的消耗?

    • 11 个回答
  • Marko Smith

    从 Microsoft Stream 下载视频

    • 4 个回答
  • Marko Smith

    Google Chrome DevTools 无法解析 SourceMap:chrome-extension

    • 6 个回答
  • Marko Smith

    Windows 照片查看器因为内存不足而无法运行?

    • 5 个回答
  • Marko Smith

    支持结束后如何激活 WindowsXP?

    • 6 个回答
  • Marko Smith

    远程桌面间歇性冻结

    • 7 个回答
  • Marko Smith

    子网掩码 /32 是什么意思?

    • 6 个回答
  • Marko Smith

    鼠标指针在 Windows 中按下的箭头键上移动?

    • 1 个回答
  • Marko Smith

    VirtualBox 无法以 VERR_NEM_VM_CREATE_FAILED 启动

    • 8 个回答
  • Marko Smith

    应用程序不会出现在 MacBook 的摄像头和麦克风隐私设置中

    • 5 个回答
  • Martin Hope
    Saaru Lindestøkke 为什么使用 Python 的 tar 库时 tar.xz 文件比 macOS tar 小 15 倍? 2021-03-14 09:37:48 +0800 CST
  • Martin Hope
    CiaranWelsh 如何减少“vmmem”进程的消耗? 2020-06-10 02:06:58 +0800 CST
  • Martin Hope
    Jim Windows 10 搜索未加载,显示空白窗口 2020-02-06 03:28:26 +0800 CST
  • Martin Hope
    v15 为什么通过电缆(同轴电缆)的千兆位/秒 Internet 连接不能像光纤一样提供对称速度? 2020-01-25 08:53:31 +0800 CST
  • Martin Hope
    andre_ss6 远程桌面间歇性冻结 2019-09-11 12:56:40 +0800 CST
  • Martin Hope
    Riley Carney 为什么在 URL 后面加一个点会删除登录信息? 2019-08-06 10:59:24 +0800 CST
  • Martin Hope
    zdimension 鼠标指针在 Windows 中按下的箭头键上移动? 2019-08-04 06:39:57 +0800 CST
  • Martin Hope
    jonsca 我所有的 Firefox 附加组件突然被禁用了,我该如何重新启用它们? 2019-05-04 17:58:52 +0800 CST
  • Martin Hope
    MCK 是否可以使用文本创建二维码? 2019-04-02 06:32:14 +0800 CST
  • Martin Hope
    SoniEx2 更改 git init 默认分支名称 2019-04-01 06:16:56 +0800 CST

热门标签

windows-10 linux windows microsoft-excel networking ubuntu worksheet-function bash command-line hard-drive

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve