2016-05-13 91 views
1

我有一个非常漫长而笨重的代码,但通常会崩溃并给出无响应消息。我发现,解决此问题的一种方法是将变量声明为整数,而不是长整数,如果我知道它们不会超过32,767。根据工作表的大小更改如何声明变量?

为了确保我以后不会遇到问题,我希望在脚本的开头插入一行代码,根据工作表的大小将变量变暗为整型或长整型。我至今是:

If Library.Range("A1").SpecialCells(xlCellTypeLastCell).row > 30000 Then 
Dim i As Long 
Dim LastRow As Long 
ElseIf Library.Range("A1").SpecialCells(xlCellTypeLastCell).row <= 30000 Then 
Dim i As Integer 
Dim LastRow As Integer 

但是,这是给我的错误有重复的声明语句。有没有另一种方法呢?或者我做错了什么?

+3

什么是你的代码做什么!如果在一些变量上使用少量内存会导致它无响应,那么就会出现一些根本性的错误! –

+2

此外,[VBA无论如何将所有整数转换为长整数](https://msdn.microsoft.com/en-us/library/aa164754.aspx) - 所以您实际上不会看到任何性能优势。如果有的话,使用'Long'会更有效,因为这个值没有被转换。 –

+0

好的,好点。它可以复制和粘贴大量信息,并根据一系列IF THEN语句重新排列它。它适用于小数据集,但有时在较大的数据集上失效(尽管通常仍然有效)。 – user1996971

回答

0

为什么不使用变体来代替,

这将证明

Dim a As Variant 

a = 100 
Debug.Print TypeName(a) 

a = 10000000 
Debug.Print TypeName(a) 
+0

我对这是如何产生实质影响感到有点困惑在OP上。但是,如果您想尽可能少地使用内存,您肯定不会声明为Variant。 – CallumDA

+0

我并没有将他作为解决他的记忆问题的方法,而是向他展示了它,它是显示/格式化代码的最佳场所。我个人不会使用这种方法,如果造成混淆,我会道歉。 –