我对VBA不太熟悉,因此下面的代码大部分只是复制,粘贴和研究,无法找到多次使用Dim的方法来将其用于不同的列。我可以在“ lastrow”前面添加一些内容以使其与众不同,而不会出现“编译错误:当前作用域中的重复声明”。
Dim lastrow As Long
lastrow = Worksheets("Sheet1").Range("A" & Rows.Count).End(xlUp).Row
Dim pointer As Integer
pointer = 1
Do Until pointer > lastrow - 1
Range("D1").Select
Sheet1.Range("D" & pointer).NumberFormat = "mm/dd/yyyy"
pointer = pointer + 1
Loop
答案 0 :(得分:2)
您可以删除其中不需要SELECT code,
SUM(CASE WHEN delivery = 'OK' THEN 1 ELSE 0 END ) AS delivered,
SUM(type) all_type
FROM sample_table
GROUP BY code
的行,也可以根据需要设置循环中多个单元格的.Select
。
但是有一种更简单的方法,您可以使用一行代码并且不使用循环来设置整个列的.NumberFormat
属性:
.NumberFormat
为此,您也可以一次完成多列...
WorkSheets("Sheet1").Range("D:D").NumberFormat = "mm/dd/yyyy"
答案 1 :(得分:0)
您不能在一个函数或子函数中多次变暗变量(因此会出现语法错误)。有一些编程语言(例如Java)具有块级范围的概念,在其中可以进行此类重新声明。 VBA不是这些语言之一。
也许这是一个XY problem,而您真正想做的是在每次通过外部循环的过程中重新初始化变量。没问题,只要您想重新声明,就lastrow = 0
。
也就是说,对于这个特定问题,请遵循braX的建议。在VBA中,通常可以将范围作为一个整体来处理,而不是逐个单元地循环。