- Используйте Long вместо Integer. Выйгрыша в скорости вы не получите
зато можете получить распространённую ошибку:
Dim
a As Integer
Dim b As Integer
Dim c As Integer
a = 2341
b = 65
c = a * b
Получите ошибку Overflow! Это происходит потому, что a - Integer, b-
Integer, и результат тоже должен быть Integer, следовательно должен
находиться в диапазоне -32768 - +32768, а он равен 152165. Поэтому и
происходит переполнение. Этого можно избежать с помощью функции преобразования
типа CLng. Т.е. c = a * CLng(b). Или задать тип Long при определении
переменной (это лучший вариант). Кстати это относится и другим типам,
т.е. c(integer) = a(byte) * b(byte) ...
- Немного магии с операторами Or:
If x = 0 And y = 0 Then ... можно записать так:
If (x Or y) = 0 Then ... - это чуть побыстрее
и Xor:
If (x = 0 And y = 0) Or (x <> 0 And y <> 0) Then ...
можно так:
If (x = 0) Xor (y <> 0) Then .. - это тоже чуть побыстрее
-
Если вы обращаетесь к одному и тому же элементу массива в цикле,
то лучше создайте переменную и присвойте ей значение этого элемента
вне цикла, а в цикле используйте эту переменную.
-
Очень мощный (как Format) оператор Like может упростить множество
операций со строками, например, вам необходимо проверить строку по
маске (aka Perl Regular Expressions), например вам необходимо проверить
переменную myString:
myString = "312T-87GD-8922"
If myString Like "###[A-Z]-##[A-Z][A-Z]-####" Then ...
Подробнее здесь.
-
Если у вас в цикле идёт проверка некоторых условий, например:
If
a > 1 And b = Cos(alpha) And
Len(myStr) < 12 Then ...
Вы можете применить метод сокращённой оценки:
If
a > 1 Then
If b = Cos(alpha) Then
If Len(myStr) < 12 Then
' Здесь код для выполнения когда все условия
истинны
End If
End If
End If
Здесь вычисление Cos будет происходить только тогда, когда a >
1, а в первом варианте он вычисляется всегда. Также здесь важна последовательность
условий - сверху помещайте условие, которое может быть верным реже
чем нижние и т.д. Если цикл большой, то сразу заметите выйгрыш в скорости.
-
Функция DoEvents ОЧЕНЬ сильно замедляет работу. Если вам необходимо
вычислить большой цикл и в нём вы используете DoEvents - скорость
обработки цикла упадёт в десятки раз! Поэтому лучше прибегнуть к использованию
API функции GetInputState (она возвращает True если форме было послано
сообщение от клавиатуры или мыши):
Declare
Function
GetInputState Lib "user32"
_
Alias "GetInputState" () As
Long
For c = 1 To
100000
temp = 2 * 2 * 2
If GetInputState() Then
DoEvents ' здесь 312 мс.
DoEvents ' а здесь время выполнения цикла 6543
мс. !!!
Next c
-
Если вам необходимо прочитать содержимое файла в TextBox - воспользуётесь
нижеследующим кодом:
Text1.Text
= Input$(#1, LOF(1))
-
Если вам необходимо получить адрес переменной в памяти, используйте
функцию VarPtr:
MsgBox VarPtr (myVariable)
-
Если вам необходимо проверить существует ли какой-либо файл, можете
использовать следующую функцию:
Function
FileExist(fileName As String) As
Boolean
On Error Resume Next
FileExist = Dir$(fileName) <> ""
If Err.Number <> 0 Then
FileExist = False
On Error GoTo 0
End Function
-
Если вам необходимо обменять 2 переменных целого типа, вы можете
использовать такой вот код:
Dim
a As Long, b As
Long
a = 4
b = 7
a = a Xor b
b = a Xor b
a = a Xor b
Этот магический код действительно работает. Давайте посмотрим как:
Для тех, кто забыл как работает оператор Xor напоминаю: Xor - это
логическое исключающее сложение. Таблица для Xor выглядит таким образом:
Операнд1
0 0 1 1
Операнд2 0 1 0 1
----------------
Результ.
0 1 1 0
Итак проверим как же работает этот код:
a = 4 = 0100
xor
b = 7 = 0111
------------
a = 3 = 0011
Теперь a содержит значение 3. Далее:
a
= 3 = 0011
xor
b = 7 = 0111
------------
b = 4 = 0100
И накоцен:
a
= 3 = 0011
xor
b = 4 = 0100
------------
a = 7 = 0111
Итог: a = 7, b = 4. ч.т.д.