Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ms access 访问:在自动调整大小后确定列宽?_Ms Access_Vba - Fatal编程技术网

Ms access 访问:在自动调整大小后确定列宽?

Ms access 访问:在自动调整大小后确定列宽?,ms-access,vba,Ms Access,Vba,我有一个MSAccess数据表,我使用它填充并自动调整大小,通过以下方式单步遍历每一列: ~field~.Properties("ColumnWidth") = -2 一切正常 有些列宽解析得太宽(自由格式文本等)。我想第二次通过这些列并测试这些非常长的列,然后重置为更窄的固定宽度。但是,当我测试列宽时,得到的结果是“-2”(duh)与实际结果宽度(即5760 twips)的比较 使用“自动调整大小”后如何确定结果列宽,有什么建议吗 修改于2014年3月10日(之前的代码是如何查找宽列和设置窄

我有一个MSAccess数据表,我使用它填充并自动调整大小,通过以下方式单步遍历每一列:

~field~.Properties("ColumnWidth") = -2
一切正常

有些列宽解析得太宽(自由格式文本等)。我想第二次通过这些列并测试这些非常长的列,然后重置为更窄的固定宽度。但是,当我测试列宽时,得到的结果是“-2”(duh)与实际结果宽度(即5760 twips)的比较

使用“自动调整大小”后如何确定结果列宽,有什么建议吗

修改于2014年3月10日(之前的代码是如何查找宽列和设置窄列的示例-具体为第7列)。使用Access 2010,我可以做你想做的事情——我想。在全部设置之后,我的第7列非常宽(25440)(debug.print显示了该值。然后我只是重置为我喜欢的数字(即2000)

在“设计”视图中打开受影响的查询,然后单击并拖动以手动调整报告为-2列大小的每个列的大小。不要双击以自动调整列的大小!!!这就是导致“断开”行为的原因


背景:

这种行为最近让我发疯。我有一个AutoFitDatasheet()例程,它完美地运行了多年,直到有一天它停止处理特定查询。我使用了以下代码的变体:

MyControl.ColumnWidth = -2
AutoFitColWidth = MyControl.ColumnWidth
当此代码运行时,第一行将告诉控件自动调整。第二行将保存列的新宽度(正数)

但是,如果在指定自动调整属性时不需要调整列的大小,ColumnWidth将保留刚刚指定的-2值,并在检索ColumnWidth属性时报告该值

使用未记录的
SaveAsText
例程将查询导出为文本显示没有特殊的“自动拟合”属性指定给受影响的列。相反,复制行为的关键似乎是自动拟合后起始列宽与结果列宽的接近程度。精确匹配有效,但即使距离调整大小的列宽+/-10点也足以触发该行为

我已经开始使用以下代码来解决这种情况,但我还没有对其进行充分的测试,目前还没有正式推荐:

Const ColumnAutoFit As Long = -2
Dim PrevWidth As Long
PrevWidth = MyControl.ColumnWidth
MyControl.ColumnWidth = ColumnAutoFit
If MyControl.ColumnWidth = ColumnAutoFit Then
    AutoFitColWidth = PrevWidth
Else
    AutoFitColWidth = MyControl.ColumnWidth
End If

我应该注意到,我确实尝试分配了一个临时的伪ColumnWidth(例如,
MyControl.ColumnWidth=1
)在分配-2 autofit值之前。这似乎不起作用。

你说的是数据表,这是一个表单,所以你可以检查控件,而不是字段。你是指表还是查询?如果是,你最好使用表单。数据表方法在我的DB应用程序中运行得很好,除了那些非常宽的列。我想我可以ict按名称显示哪些列通常太宽,并显式调整其大小。我更喜欢通用方法…我不够清楚。您是否使用数据表,即是否创建了表单?是的,SQL查询记录集是源。数据表嵌入在子表单中谢谢,但实际上是在加载事件中寻找更动态的方法我们上面的代码看起来很像我的代码,我单步遍历数据表中的控件,隐藏一些列,并将columnwidth设置为-2。当我再次检查列宽时,我得到的结果是“-2”,而不是实际结果twips1。你说的“更动态”是什么意思?我只是以该代码为例来说明它如何改变列大小。您可以使用任何VBA代码来测试任何数量的条件。您没有提到您正在运行的Access的版本,但正如我所说的-我是2010。2.您是否在表单副本中尝试过我的代码?您的代码看起来像什么?Wayne,更具动态性我的意思是,我想在onLoad事件期间自动将列与数据匹配。紧接着,我想检查列宽,将2000 twips设置为最大宽度。对<2000 twips的列没有影响。数据是动态的:我不知道哪些列将超出所需的宽度。所有这些都是在onLoad事件期间完成的-无inspection调试。打印类型结果和手动调整。
Const ColumnAutoFit As Long = -2
Dim PrevWidth As Long
PrevWidth = MyControl.ColumnWidth
MyControl.ColumnWidth = ColumnAutoFit
If MyControl.ColumnWidth = ColumnAutoFit Then
    AutoFitColWidth = PrevWidth
Else
    AutoFitColWidth = MyControl.ColumnWidth
End If