DIM statement in VBA

phantom1975

MrExcel MVP
Joined
Jun 3, 2002
Messages
3,962
I have tried reading the help files on this and I really can't figure it out. Will someone please either write me a DIM script that I can use so that I can see how it works OR will you break down it's meaning in the easier means possible? I have only been working with scripts for 2 days now, and I seem to see a lot of DIM commands. I figure they MUST be sorta handy! Thanks.
 

Excel Facts

Fastest way to copy a worksheet?
Hold down the Ctrl key while dragging tab for Sheet1 to the right. Excel will make a copy of the worksheet.
Hi Phantom


The word Dim is short for dimmension and is used to declare variables. Now, while Excel can still work quite happily if we omit the Dim (as long as we do not have Option Explicit), it comes at a price. Excel MUST store all undeclared variables as a Variant, meaning it can accept any data type (String, Iteger, Range etc). This forces Excel to reserve much more memory than really needed. So this is why 'good' code has all variables dimmensioned correctly.

There are 3 basic levels of Dim Statements.

1. Procedure Level
2. Module Level
3. Project Level

1. Procedure Level
Must be used inside of a Procedure between

Sub MacroName()
Dim iInt as Integer

End Sub

This will ONLY retain the value passed to it while the Procedure is running, it is then destoyed.


2. Module Level
Must be placed at the very top of a Module and will then be available to ALL Procedures within that module.


3.Project Level
Must be placed at the very top of a Standard Module using the Public Key word, eg


Public iInt as Integer

This is then available to ALL Procedures in all modules at ALL times. Until we either:

1.Destroy the variable (set it back to it's default), eg iInt=0

2. Use the End statement in any Procedure.

3. Close the Workbook.

See "Understanding the Lifetime of Variables" in the VBE help and it's ascociated links for deeper insight.
 
Upvote 0
WOW! It sounds like the DIM function is a lot like the Validation function within the worksheet. Only valid data is allowed, otherwise it is discarded. Would I do a search on VARIANT to see what the different variants are? What are the common occasions you would use this (i.e. would you use this if data were to be imported into the script?)
 
Upvote 0
Hi Phantom

Hmmm, no it's not really like th Validation in Excel. Variables are used to store Data Types. See below from Excel help

data type
The characteristic of a variable that determines what kind of data it can hold. Data types include Byte, Boolean, Integer, Long, Currency, Decimal, Single, Double, Date, String, Object, Variant (default), and user-defined types, as well as specific types of objects.

Code:
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.79769313486231E308 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.



Note Arrays of any data type require 20 bytes of memory plus 4 bytes for each array dimension plus the number of bytes occupied by the data itself. The memory occupied by the data can be calculated by multiplying the number of data elements by the size of each element. For example, the data in a single-dimension array consisting of 4 Integer data elements of 2 bytes each occupies 8 bytes. The 8 bytes required for the data plus the 24 bytes of overhead brings the total memory requirement for the array to 32 bytes.

A Variant containing an array requires 12 bytes more than the array alone.

Note Use the StrConv function to convert one type of string data to another.




Using Data Types Efficiently


Unless otherwise specified, undeclared variables are assigned the Variant data type. This data type makes it easy to write programs, but it is not always the most efficient data type to use.

You should consider using other data types if:

Your program is very large and uses many variables.


Your program must run as quickly as possible.


You write data directly to random-access files.
In addition to Variant, supported data types include Byte, Boolean, Integer, Long, Single, Double, Currency, Decimal, Date, Object, and String. Use the Dim statement to declare a variable of a specific type, for example:

Dim X As Integer

This statement declares that a variable X is an integer — a whole number between –32,768 and 32,767. If you try to set X to a number outside that range, an error occurs. If you try to set X to a fraction, the number is rounded. For example:

X = 32768 ' Causes error.
X = 5.9 ' Sets x to 6.



_________________
Kind Regards
Dave Hawley
8 Add-ins in one
Forty+ more here
OzGrid.com
This message was edited by Dave Hawley on 2002-07-13 03:14
 
Upvote 0
I'm too tired to try that now. I have it saved to look at later. As always, thanks for your help.
 
Upvote 0
2. Module Level
Must be placed at the very top of a Module and will then be available to ALL Procedures within that module.


3.Project Level
Must be placed at the very top of a Standard Module using the Public Key word, eg


Public iInt as Integer

.


Hi Dave - does the Public key word need to be used in the case of point 2 (module level) too? I've tried using Dim but the value is lost outside of the procedure

Cheers
 
Upvote 0
Hi Dave - does the Public key word need to be used in the case of point 2 (module level) too? I've tried using Dim but the value is lost outside of the procedure

Cheers

Please start a new thread - this one is ancient.
 
Upvote 0

Forum statistics

Threads
1,216,101
Messages
6,128,840
Members
449,471
Latest member
lachbee

We've detected that you are using an adblocker.

We have a great community of people providing Excel help here, but the hosting costs are enormous. You can help keep this site running by allowing ads on MrExcel.com.
Allow Ads at MrExcel

Which adblocker are you using?

Disable AdBlock

Follow these easy steps to disable AdBlock

1)Click on the icon in the browser’s toolbar.
2)Click on the icon in the browser’s toolbar.
2)Click on the "Pause on this site" option.
Go back

Disable AdBlock Plus

Follow these easy steps to disable AdBlock Plus

1)Click on the icon in the browser’s toolbar.
2)Click on the toggle to disable it for "mrexcel.com".
Go back

Disable uBlock Origin

Follow these easy steps to disable uBlock Origin

1)Click on the icon in the browser’s toolbar.
2)Click on the "Power" button.
3)Click on the "Refresh" button.
Go back

Disable uBlock

Follow these easy steps to disable uBlock

1)Click on the icon in the browser’s toolbar.
2)Click on the "Power" button.
3)Click on the "Refresh" button.
Go back
Back
Top