在 Excel 2007 及更高版本中可以控制数据验证列表的宽度吗?

在 Excel 2007 及更高版本中可以控制数据验证列表的宽度吗?

在 Excel 2007 中,我可以向单元格添加数据验证,并提供允许值的列表。

然而,实验表明,数据验证下拉列表的显示宽度永远不会小于其单元格的原始宽度(在工作簿打开时)。

因此,如果单元格的列太大并且用户调整了它的大小,最终就会出现这种情况:

下拉菜单比列宽

有什么方法可以改善这种情况吗?是否可以在不关闭并重新打开工作簿的情况下使下拉列表宽度与列宽匹配?编写一些 VBA 是一种选择。

答案1

您说得对,创建下拉列表后更改宽度时可能会发生这种情况,但有时当存在合并单元格时也会出现这种情况。VBA 是唯一的选择。将其放在工作表对象中,并将列号更改为列表所在的列:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  If Target.Count > 1 Then Exit Sub
   If Target.Column = 4 Then
       Target.Columns.ColumnWidth = 20
   End If
End Sub

它会查找列表中的变化并调整到指定的宽度。

答案2

我不能说这是否适用于 Excel 2007,但我刚刚在 Excel 2013 中遇到了同样的问题,并确定了这种情况的一个可能原因,这自然导致了解决方案。

TL;DR:单击下拉菜单过宽的单元格一次,保存工作簿,然后再次打开下拉菜单。


背景:我为自己制作了一个时间表工作簿,因为我的部门会按项目和任务跟踪工时,所以我的时间表上有十几行需要填写。我过去只是在记事本中记录开始和停止某项特定任务的工作,但由于某些任务会在一天中有多个短暂的时间跨度,我创建了这个工作簿,我将相同的信息放入一个表格中,每一天都有一个单独的工作表,然后使用数据透视表将这五个工作表合并为一个与我必须提交的时间表布局相同的工作表。在每个每日工作表上,表格都对结束时间(开始时间刚好等于前一行的结束时间)和任务名称进行了验证,每个验证都针对另一张工作表上的单元格范围,以获取有效条目的列表。显然,时间列比任务列窄得多。


通常,验证下拉框的宽度与所在列的宽度一致,但有一次我注意到仅在星期二的工作表上,下拉框就宽得离谱。我最初感到很困惑,因为我创建星期二到星期五的工作表时,只是复制了星期一的工作表;星期二和星期三之间不应该有任何差异。

我花了几个星期才终于弄清楚了是什么原因造成的(第一个线索是哪张表给了我太宽的下拉菜单在某一时刻发生了变化),但最终我意识到:
在每个工作表中,较宽的任务列中的单元格是活动单元格当我上次保存工作簿时,较窄的结束时间列会给我一个非常宽的下拉菜单 - 具体来说,与任务列的下拉菜单的宽度相同!

由此,很容易找到解决方案:
使用下拉验证激活最窄列中的单元格(在每个具有它们的工作表上),然后保存工作簿。

(经过进一步的实验,我发现使用未经任何验证的活动单元格进行保存效果同样好。)

相关内容