Proper Programming
Something you pointed out that has not yet been explained.. (Probably other things too that could help, but I'm going to cover this one item.)
You said you didn't know what it all means.
As everyone else has said,
Dim thisThing
Provides memory for the variable thisThing as a Variant, by default. However, if you wish to declare your variables as a type, you should use the following as a guide for your variable selection. Remember, that in programming, you should always preplan your job, so that you can try to solve any problems as soon as possible, and not have to redo all the thousands of lines of code you may end up writing. (not hard to get to thousands of lines, if you try to deal with the multitude of potential problems that you identify, and all the things to keep/guide the user to correct and controled data entry.)
For example, if you know that you are only going to be using yes/no, true/false, on/off, etc. type data, then declaring the variable as a boolean by the following line, will give you a variable that is just that, either true or false.
Dim IsTrue as Boolean
So you could write something like.
if IsTrue then
msgbox("The result is true.")
else
msgbox("The result is false.")
end if
Something that helps you, and aids in Excel not crashing, is to use the Option Explicit command at the top of your code, outside of a sub routine or function.
Like
Option Explicit
Public Sub TrueText()
Dim IsTrue as Boolean
IsTrue = True
If IsTrue then
MsgBox("Is True")
Else
MsgBox("Is False")
End If
End Sub
By using the Option Explicit, the debugger will require that each variable that you try to use, must first be declared. Now you don't ***have*** to declare it as a particular type, but as has been discussed, in the long run if you know what type of data it will be then, it realllllllllllly can help.
What I have found, is that if you have extensive code, and you do not declare each variable, VBA will take care of the "assignments" as necessary, but at some point it runs out of memory, or runs into an error, and the code crashes. Obviously if you haven't saved your work, then everything changed since your last save is blasted away.
Anyways, here is the list of data types available, and their restrictions (Range). For an example, if you declare a variable as an Integer, and say you increment the variable by one until you get to 32,767, the next increment will flip the variable back to it's lower limit. So in this case (for an Integer) 32,767 + 1 = -32,768. It can be discouraging, but that's how the variables work. It's all based on the binary representation of the numbers.
I don't remember the command, but it's possible to set the range of Integer instead from -32,768 to 32,767, it can be set to 0 to 65535.
The following information was taken from the help for 'Data Type Summary'
Data type Storage size Range
Byte 1 byte 0 to 255
Boolean 2 bytes True or False
Integer 2 bytes -32,768 to 32,767
Long
(long integer) 4 bytes -2,147,483,648 to 2,147,483,647
Single
(single-precision floating-point) 4 bytes -3.402823E38 to -1.401298E-45 for negative values; 1.401298E-45
to 3.402823E38 for positive values
Double
(double-precision floating-point) 8 bytes -1.79769313486232E308 to
-4.94065645841247E-324 for negative values;
4.94065645841247E-324 to
1.79769313486232E308 for positive values
Currency
(scaled integer) 8 bytes -922,337,203,685,477.5808 to 922,337,203,685,477.5807
Decimal 14 bytes +/-79,228,162,514,264,337,593,543,950,335 with no decimal point;
+/-7.9228162514264337593543950335 with 28 places to the right of
the decimal;
smallest non-zero number is +/-0.0000000000000000000000000001
Date 8 bytes January 1, 100 to December 31, 9999
Object 4 bytes Any Object reference
String
(variable-length) 10 bytes + string length 0 to approximately 2 billion
String
(fixed-length) Length of string 1 to approximately 65,400
Variant
(with numbers) 16 bytes Any numeric value up to the range of a Double
Variant
(with characters) 22 bytes + string length Same range as for variable-length String
User-defined
(using Type) Number required by elements The range of each element is the same as the range of
its data type.
|