如何使用VBA在单元格宽度内容纳很多标头?

时间:2019-05-29 16:08:07

标签: excel vba

我已经从另一个电子表格复制了大约88列内容。问题是标题太大,无法正确显示在列单元格中。因此,我必须转到每个单元格,然后每次按Alt + Enter。我想使用一个可以自动执行的宏。

我正在使用Microsoft Excel 2016版本。

Sub Fit_Headers()

   'Fit_Headers Macro

    Range("BI13").Select
    ActiveCell.FormulaR1C1 = "ACTUAL SAMPLE " & Chr(10) & "FABRIC INHOUSE DATE"
    Range("BJ13").Select
End Sub

我使用“记录宏”来记录我在一个单元格中所做的事情。如何修改它以便可以将其用于剩余的单元格?

3 个答案:

答案 0 :(得分:1)

Chr(10)vbLf ...,它与Range.AutoFit的搭配效果不是很好。 vbNewLinevbCrLf,即Chr(10)Chr(13)的工作原理很不错;您根本不需要Select或完全解决ActiveCell -只是清理宏记录器的垃圾请求(记录器只是模仿[大多数]用户操作,包括选择单元格) :它不需要冗余或高效的代码):

Public Sub FitHeaders()
    With ActiveSheet.Range("BI13")
        .Value = "ACTUAL SAMPLE" & vbNewLine & "FABRIC INHOUSE DATE"
        .EntireColumn.AutoFit
    End With
End Sub

答案 1 :(得分:0)

我不太了解您的要求。 是否要对其他单元格应用公式"ACTUAL SAMPLE " & Chr(10) & "FABRIC INHOUSE DATE"

喜欢这个:

Sub test()
    For Each c In Range("A1:B20").Cells
        c.FormulaR1C1 = "ACTUAL SAMPLE " & Chr(10) & "FABRIC INHOUSE DATE"
    Next c
End Sub

答案 2 :(得分:0)

在试用了示例之后,设置单元格的内容后,在下面添加以下代码行,我相信会做您想做的事情:

function Point(x, y)
{
    this.x = x;
    this.y = y;
}

// New toString() method for the Point class.

Point.prototype.toString = function()
{
    return `(${this.x},${this.y})`;
}

var arr;

function assign(iSize, jSize)
{
    arr = {};

    for (var i = 0; i < iSize; i++)
    {
        for (var j = 0; j < jSize; j++)
        {
            var pt = new Point(i, j);
            arr[pt] = [1, 2, 3];
        }
    }
}

function iterate()
{
    for (const key in arr)
    {
        console.log("key => ", key, " val => ", JSON.stringify(arr[key]));
    }
}

assign(2, 2);
iterate();

我在玩游戏时发现了一些限制。在您提供的示例代码中,您在那里具有Chr(10)位,当存在该位时,Excel似乎不想扩大单元格以在一行上显示您设置为一行的所有内容。它将整个字符串分解成单个单词,每个单词在单元格中的一行上。此外,如果需要,可以将EntireRow与EntireColumn交换。