2016-05-13 36 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

我並沒有將他作爲解決他的記憶問題的方法,而是向他展示了它,它是顯示/格式化代碼的最佳場所。我個人不會使用這種方法,如果造成混淆,我會道歉。 –