用数字而不是字符串的Workbook.Worksheets.Columns()?

时间:2018-10-10 18:08:04

标签: excel vba excel-vba

当前,我能够执行以下两项操作之一。

我可以使用一个字符串显示要更改宽度的列,也可以一次使用一个列号:

这可以很好地用作字符串。

re_wb.Worksheets(1).Columns("K:J").ColumnWidth = 23

问题是我必须动态查找最后一列,然后在工作表中再添加两列。这是通过找到最后一列,然后在最后一列编号上使用+1+2在标题的第一单元格中添加一个值来实现的。

last_col = re_wb.Worksheets(1).Cells(1, re_wb.Worksheets(1).Columns.Count).End(xlToLeft).Column
re_wb.Worksheets(1).Cells(1, last_col + 1).Value = "Correct Per CL"
re_wb.Worksheets(1).Cells(1, last_col + 2).Value = "Is reassignment needed?"

对于两列,写最后两行分别为+1和+2的两行以编辑其宽度并不是什么大不了的事情,但考虑到可以用一个字符串处理一定范围的列,是否可以使用两组数字? (或更多数字,这取决于我可能需要一次编辑多少列。)

re_wb.Worksheets(1).Columns(last_col + 1).ColumnWidth = 23
re_wb.Worksheets(1).Columns(last_col + 2).ColumnWidth = 23

我尝试过这样的事情:

re_wb.Worksheets(1).Columns(last_col + 1, last_col + 2).ColumnWidth = 23

没有运气。看到我无法预测该列将是哪个字母,是否可以使用数字来定义一列范围,还是只需要一次像我已经在上面那样一次做一次?

5 个答案:

答案 0 :(得分:4)

在Excel对象模型中没有“列”之类的东西-Worksheet.Columns(foo)返回Range。只需构建适当的Range并使用它来设置列宽:

With re_wb.Worksheets(1)
    .Range(.Cells(1, last_col + 1), .Cells(1, last_col + 2)).ColumnWidth = 23
End With

答案 1 :(得分:2)

Range(Cells(1, 1), Cells(1, 3)).EntireColumn.ColumnWidth = 15

很明显,您将需要限定要引用的工作表,而不只是范围或单元格

答案 2 :(得分:1)

如果您知道要更改宽度的第一列和最后一列,则可以将数字转换为字母(请参见本网站:Number to Letter),然后转换整个范围。

以下是此方法的示例:

Dim start_column As String, end_column As String
Dim last_col As Integer
last_col = re_wb.Worksheets(1).Cells(1, re_wb.Worksheets(1).Columns.Count).End(xlToLeft).Column

start_column = Split(Cells(1, last_col + 1).Address, "$")(1)
end_column = Split(Cells(1, last_col + 2).Address, "$")(1)
re_wb.Worksheets(1).Columns(start_column & ":" & end_column).ColumnWidth = 23

答案 3 :(得分:1)

Range和EntireColumn是您的朋友在这里:

re_wb.Worksheets(1).Range(Cells(1,last_col + 1),Cells(1,last_col + 10)).entirecolumn.ColumnWidth = 23

答案 4 :(得分:0)

这里有很多很棒的例子-就我个人而言,我更喜欢使用将数字转换为列字母的函数-这样,我不必过多更改语法:

Function ColLetter(colnum As Long)

    ColLetter = Split(Cells(1, colnum).Address, "$")(1)

End Function

在您的示例中使用:

re_wb.Worksheets(1).Columns(ColLetter(last_col + 1) & ":" & ColLetter(last_col + 2)).ColumnWidth = 23