【问题标题】:Auto fit column width automatically in Excel based on the user input根据用户输入在 Excel 中自动调整列宽
【发布时间】:2016-03-29 19:40:09
【问题描述】:

在我的电子表格中,我需要在 Excel 中自动调整列宽。如果用户正在输入最长的单词,则该列应根据单词/整数自动增加。我不希望我的用户增加列的宽度。为此,我从Internet 获得了一个公式,这是一种使活动工作簿中所有工作表中的所有列在输入的数据超过当前列宽时自动调整的方法。

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) 

Dim actCol, curCol 

actCol = Target.Column 

If actCol > 52 Then 
    curCol = Chr(Int((actCol - 1) / 52) + 64) & _ 
    Chr(Int((actCol - 27) / 26) + 64) & _ 
    Chr(Int((actCol - 27) Mod 26) + 65) 
ElseIf actCol > 26 Then 
    curCol = Chr(Int((actCol - 1) / 26) + 64) & _ 
    Chr(Int((actCol - 1) Mod 26) + 65) 
Else 
    curCol = Chr(actCol + 64) 
End If 

Columns(curCol & ":" & curCol).AutoFit 

End Sub

打开工作簿后,按 ALT + F11(功能键 F11)

在左上象限的 Microsoft Excel VBA 项目对象中双击“本工作簿”。

将事件处理程序粘贴到右侧的白色编辑区域(在该区域内单击鼠标右键并“粘贴”)。

关闭 VBE(带白色“x”的红色按钮 --- 右上角)。

保存工作簿。

我使用了这个公式,它部分正确。但是,如果整数超过 4 个字符,当给定的输入显示为 #### 时,我仍然面临问题。如何解决这个问题?

截图:

注意:由于该文件包含一些机密信息,因此我无法在此处共享该文件。

【问题讨论】:

    标签: excel excel-formula vba


    【解决方案1】:

    在尝试理解您在互联网上找到的一段代码后,我认为这是一种非常复杂的方法:

    Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
        Target.EntireColumn.AutoFit
    End Sub
    

    这对我有用。也许您的代码在尝试确定列字母时出现错误,您可以试试这个吗?

    【讨论】:

    • 好的。我会试试这个代码,让你知道。感谢您的回答。
    • 您能否尝试提供有关该行为的更多信息。它是否适用于不超过 4 位的所有情况?它会缩小和增长吗?字母会发生什么?您可以将 VBA 代码放入新创建的 Excel 文件中,如果它在该文件中也不起作用,则将其发布。
    猜你喜欢
    • 2016-01-21
    • 2011-01-04
    • 2018-02-02
    • 2023-04-03
    • 2019-10-25
    • 2014-08-12
    • 2014-07-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多