当前,我能够执行以下两项操作之一。
我可以使用一个字符串显示要更改宽度的列,也可以一次使用一个列号:
这可以很好地用作字符串。
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
没有运气。看到我无法预测该列将是哪个字母,是否可以使用数字来定义一列范围,还是只需要一次像我已经在上面那样一次做一次?
答案 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