相关疑难解决方法(0)

这些新颖的方式[可能是最好的方式吗?]在VBA中引用动态单元?

我们通常使用表达式:Cells(i, 1),, Cells(i, "A")Range("A" & i)在VBA中引用动态单元格,但我发现以下奇怪的代码也有效:

Sub Test1()
For i = 1 To 10000
    Range("A1")(i) = i   
Next
End Sub
Run Code Online (Sandbox Code Playgroud)

我还发现使用方括号[]来表示单元格的快捷符号(是的,我知道表达EVALUATE命令的简写方法)也可以在这里使用,如下面的代码

Sub Test2()
For i = 1 To 10000
    [A1].Resize(1000, 1)(i) = i   
Next
End Sub
Run Code Online (Sandbox Code Playgroud)

要么

Sub Test3()
For i = 1 To 10000
    [A1].Offset(i - 1) = i   
Next
End Sub
Run Code Online (Sandbox Code Playgroud)

与流行的看法相反,方括号只能用快捷符号表示固定范围.我测试了所有这些,他们返回了相同的输出.

老实说,我从来没有想过这三个表达式都存在过,所以我猜它们可能是新的.这是真的吗?


我不仅找到了它们,还测试了它们以确定哪一个是最好的.最好的我的意思是他们使用计时测试的表现.我测试了这些陈述:

  1. Cells(i, 1) = Rnd
  2. Range("A" & i) = Rnd
  3. Cells(i, "A") = Rnd …

excel vba reference excel-vba

8
推荐指数
1
解决办法
154
查看次数

在单元格中写入缓慢的VBA宏

我有一个VBA宏,它将数据写入清除的工作表,但它真的很慢!

我正在从Project Professional中实例化Excel.

Set xlApp = New Excel.Application
xlApp.ScreenUpdating = False
Dim NewBook As Excel.WorkBook
Dim ws As Excel.Worksheet
Set NewBook = xlApp.Workbooks.Add()
With NewBook
     .Title = "SomeData"
     Set ws = NewBook.Worksheets.Add()
     ws.Name = "SomeData"
End With

xlApp.Calculation = xlCalculationManual 'I am setting this to manual here

RowNumber=2
Some random foreach cycle
    ws.Cells(RowNumber, 1).Value = some value
    ws.Cells(RowNumber, 2).Value = some value
    ws.Cells(RowNumber, 3).Value = some value
             ...............
    ws.Cells(RowNumber, 12).Value = some value
    RowNumber=RowNumber+1
Next
Run Code Online (Sandbox Code Playgroud)

我的问题是,foreach周期有点大.最后,我将获得大约29000行.在漂亮的OK计算机上完成此操作需要超过25分钟.

是否有任何技巧可以加快写入细胞的速度?我做了以下事情:

xlApp.ScreenUpdating = False …
Run Code Online (Sandbox Code Playgroud)

excel vba excel-vba ms-project

5
推荐指数
1
解决办法
1万
查看次数

标签 统计

excel ×2

excel-vba ×2

vba ×2

ms-project ×1

reference ×1