2016-05-13 4 views
1

У меня очень длинный и неуклюжий код, который работает, но часто сбой и сообщение No Response. Один из способов обойти это, я нашел, - объявлять переменные как целые, а не длинные целые числа, если я знаю, что они не превысят 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' является _more_ эффективным, потому что значение не выполняется. –

+0

Ах, хорошо, хорошо. Он работает, чтобы копировать и вставлять много информации, переустанавливая ее на основе ряда инструкций IF THEN. Он отлично работает с небольшими наборами данных, но иногда останавливается на больших (хотя часто все еще работает). – user1996971

ответ

0

Почему бы не использовать вариант вместо

это продемонстрирует

Dim a As Variant 

a = 100 
Debug.Print TypeName(a) 

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

Я немного смущен относительно того, как это имеет материальный эффект на ОП. Однако, если вы хотите использовать как можно меньше памяти, вы наверняка не захотите объявить как вариант. – CallumDA

+0

Я не использовал в качестве решения своих проблем с памятью, я показывал, что это можно сделать для него, и это лучшее место для показа/форматирования кода. Я лично не буду использовать этот метод, извинения, если возникнет путаница. –

Смежные вопросы