Excel 工作簿.Worksheets.Columns()是否使用数字而不是字符串?
目前我能做两件事中的一件 我可以使用显示要更改宽度的列的字符串,也可以一次使用列号1,如下所示:Excel 工作簿.Worksheets.Columns()是否使用数字而不是字符串?,excel,vba,Excel,Vba,目前我能做两件事中的一件 我可以使用显示要更改宽度的列的字符串,也可以一次使用列号1,如下所示: re_wb.Worksheets(1).Columns(last_col + 1, last_col + 2).ColumnWidth = 23 这就像一根弦一样好用 re_wb.Worksheets(1).Columns("K:J").ColumnWidth = 23 问题是我必须动态地找到最后一列,然后在工作表中再添加两列。这是通过查找最后一列,然后在最后一列编号上使用+1和+2向标题的第一
re_wb.Worksheets(1).Columns(last_col + 1, last_col + 2).ColumnWidth = 23
这就像一根弦一样好用
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, last_col + 2).ColumnWidth = 23
没有运气。鉴于我无法预测列的字母是什么,是否可以使用数字来定义列的范围,或者我只需要像上面一样一次定义一个列?如果您知道要更改宽度的第一列和最后一列,您可以将数字转换为字母(请参阅此网站:)然后转换整个范围 以下是此方法的一个示例:
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
Range和Entirecumn是您在这里的朋友:
re_wb.Worksheets(1).Range(Cells(1,last_col + 1),Cells(1,last_col + 10)).entirecolumn.ColumnWidth = 23
Excel对象模型中没有“列”这样的东西-
工作表。列(foo)
返回一个范围。只需构建适当的范围
,并使用该范围设置列宽:
With re_wb.Worksheets(1)
.Range(.Cells(1, last_col + 1), .Cells(1, last_col + 2)).ColumnWidth = 23
End With
显然,您希望限定所指的工作表,而不仅仅是范围或单元格这里有很多很好的示例-就个人而言,我更喜欢使用将数字转换为列字母的函数-这样我就不必太多地更改语法:
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
谢谢你的回答。这很有效。如果你能在你的答案中加入一个简单的例子,那就值得投票了。由于链接断开,只有链接的答案不会过时。这样做的缺点是在需要的代码中添加更多的行。我认为在这种情况下,这里接受的答案可能是最好的选择。感谢@Mike smtt的输入。如果ActiveSheet不是re\u wb.Worksheets(1)
,那么它可能会失败,并出现错误1004entireclumn
也是不必要的。@Comintern true但如果我简单地做了re_wb.Worksheets(1.Cells(1,last_col+1)
,它应该可以弥补这个问题。@Comintern true,你的答案在这方面更好。我想这是一个简单的问题,你在2分钟内得到了3次相同的答案。:)@vacip ya回想起来,我应该自己想到这个解决方案。“这一点现在已经很明显了。”迈克·SMT事后总是20/20;-)出于某种原因,我总是在这种情况下使用.entireclum。不知道为什么,我会研究这个…@vacip我不确定整个专栏或仅仅是专栏是否会在这里产生影响。两者都会导致整个柱的间距相同。不管怎样都可以。也许整列选项可能会花费更多的cpu时间。这里肯定有很多有用的例子。我在下面的一个答案中添加了一个这样的例子。它不使用函数思想。简单的在代码行中更改列宽。
re_wb.Worksheets(1).Columns(ColLetter(last_col + 1) & ":" & ColLetter(last_col + 2)).ColumnWidth = 23