2016-02-20 188 views
0

所以我想在Excel中使用VBA来根据一些输入自动生成工作表。VBA将变量值赋给单元格

我的问题是,当我试图将一个变量分配给用VBA细胞,没有任何反应。

这个测试代码工作:

Worksheets(sheetName).Cells(1, 1).Value = 1 

此代码(我在乎的代码)不:

Const ROW_START As Integer = 3 

For row = ROW_START To (ROW_START + 10000) Step 1 
    Worksheets(sheetName).Cells(row, RAM_COL).Value = Rnd() 
Next 

这也工作了,虽然它仅用于赛第一轮()一次(这我应该预料到):

Worksheets(sheetName).Range("A1:A10000") = Rnd() 

我有很多这样的循环,其中没有一个工作。我也尝试在一段时间内将字符串赋值给单元格值,这也不起作用。

通过SHEETNAME引用的工作表没有任何问题产生。

感谢您的帮助,您可以提供

+1

什么线在你的代码产生一个错误? –

+1

我检查了循环,并添加到细胞对我来说很好,我猜会有'sheetName'或'RAM_COL'没有被定义的问题。正如亚历克斯提到的,将建议逐步通过代码(使用F8)来缩小问题的位置然后回来 –

+0

我的问题是在一个变量名称中的拼写错误(上述所有变量都已初始化, t正确的名字)。我也加入了代码,它从不破坏,它只是没有做任何事情。在VB的excel中也没有说明这个var没有被声明。 (RAM_COL应该是RAND_COL btw)。 – jgrad

回答

2

除了未申报或者未分配的变量,批量加载一个公式,并恢复到结果值将显著加快操作。

Dim rw As Long, row_start As Long, row_end As Long, ram_col As Long, sheet_name As String 
row_start = 3 
row_end = row_start + 10000 
ram_col = 1 
sheet_name = "Sheet2" 

With Worksheets(sheet_name) 
    'this should take less than ½ second 
    With .Range(.Cells(row_start, ram_col), .Cells(row_end, ram_col)) 
     .Clear 
     .Formula = "=rand()" 
     .Value = .Value2 
    End With 

    'this takes 3-4 seconds 
    For rw = row_start To row_end Step 1 
     .Cells(rw, ram_col).Value = Rnd() 
    Next 

End With