Subscribe to Windows IT Pro

 

Get Newsletters

  • Get the Latest News
  • Product Updates
  • Helpful Tricks
  • Productivity Tips

Subscribe Now!

September 11, 2006 12:00 AM

How the Subnets Macro Works

Windows IT Pro
InstantDoc ID #93173
Rating: (0)

Although the Subnets macro is written in Visual Basic for Applications (VBA), its logic and code are similar to the logic and code you’d see in VBScript scripts. As Listing 1 shows, the macro begins by declaring a few variables, defining their types, and assigning them some initial values. The macro then instructs Microsoft Excel to focus its attention on Sheet1. As callout A in Listing 1 shows, the Cells. Value property fetches the contents of the cell at “row, column”, which in this case, is the first IP address in the list. The property passes this IP address to the GetSubnet function, which is the heart of the macro.

In VBA, a Function procedure can be used on the right side of an expression and therefore can return a value. The function’s name is used as a variable within the function; the value that this variable contains when the function exits is assigned to the variable on the left side of the expression back in the main routine. In this case, the GetSubnet function’s name acts as a variable within the GetSubnet function, as callout C in Listing 1, in the main article shows. When the function completes, this variable contains the desired subnet string. The desired subnet string is assigned to the Subnet1 variable at callout A.

During the execution of the GetSubnet function, the IP variable contains the IP addresses. Using a never-ending Do While loop, the GetSubnet function parses each IP address to find the subnet portion. The extraction of the subnet is accomplished by using VBA’s handy Left and Right functions, which return a certain number of characters from the left and right side, respectively, of the text string you pass to them. You specify the text string as the first parameter and the number of characters to return as the second parameter. For example, the code

Right(192.168.1.25, 1)
Right(192.168.1.25, 2)
Right(192.168.1.25, 3) 

returns 5, 25, and .25, respectively. By combining the Right function with the Left function in the code

Left((Right(192.168.1.25, 3)), 1) 

you can find the period (.) that marks the end of the IP address’s third octet. After finding the rightmost period, you can subtract the offset value (i.e., the value that IPOffset contains, which is 3 at this point) from the length of the IP address as a whole (which is 12). The result will be the length of the subnet portion of the address. You can then use the Left function again to extract the subnet from the IP address.

The Subnets macro assumes that you’re dealing with a 24-bit (standard Class C) subnet. However, you can easily adapt the function to return a 16-bit subnet by setting the IPOffset variable in the function to an initial value of 4 rather than 2.

After getting the subnets of the first and second addresses, the macro compares the two. When the values of Subnet1 and Subnet2 are equal, the macro increments the Row variable by 1 and calls the GetSubnet function to extract the subnet from the next address in the list. When the values of Subnet1 and Subnet2 aren’t equal, the code at callout B in Listing 1, in the main article runs. This code first activates Sheet2 and writes to the appropriate cell (RowWrite, 1) Subnet1’s value appended with the string .0 to make it a proper subnet notation. The code then increments the RowWrite variable by 1. Afterward, the macro shifts its focus back to Sheet1, gets the next IP address, and repeats the process. When the end of the list is reached, Sheet2 contains a list of unique subnets.

For more information about VBA, go to http://msdn.microsoft.com/vba. This Web site includes links to download VBA language references and the VBA software development kit (SDK).

Related Content:

ARTICLE TOOLS

Comments
    There are no comments to display. Be the first one!
You must log on before posting a comment.

Are you a new visitor? Register Here

advertisement

advertisement

White Papers

Get your Windows 7 deployment off to the right start by implementing PC lockdown. A locked-down environment is easier and cheaper to support since users are less likely to make unnecessary changes to the core system configuration - read more here!

Essential Guides

Is your iSCSI "lossy"? The reality is that most off-the-shelf Ethernet hardware deployed for iSCSI can lose packets, resulting in slow performance or application downtime. Learn how to assess your current iSCSI infrastructure and engineer an advanced iSCSI SAN infrastructure.

Web Seminars

What's the best way to keep your network safe from malware? In this web seminar, security expert Greg Shields suggests an alternative method to the traditional blacklisting approach that is common with anti-virus and anti-malware solutions.

eLearning Series

We bring the experts direct to you to share their real-world perspective and expertise. During each event, three sessions stream in real time, so you can learn, ask questions, and get solutions.
Upcoming event: Getting the Most with Exchange 2010 with Paul Robichaux

Subscribe to Windows IT Pro!

Windows is a trademark of the Microsoft group of companies. Windows IT Pro is used by Penton Media Inc. under license from owner.