<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Microsoft Access Team Blog : Access 2007</title><link>http://blogs.msdn.com/access/archive/tags/Access+2007/default.aspx</link><description>Tags: Access 2007</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>Access 2007 hotfix package now available</title><link>http://blogs.msdn.com/access/archive/2009/09/10/access-2007-hotfix-package.aspx</link><pubDate>Fri, 11 Sep 2009 01:08:36 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9893895</guid><dc:creator>Clint Covington</dc:creator><slash:comments>5</slash:comments><comments>http://blogs.msdn.com/access/comments/9893895.aspx</comments><wfw:commentRss>http://blogs.msdn.com/access/commentrss.aspx?PostID=9893895</wfw:commentRss><description>&lt;p&gt;Here are the list of issues fixed in this &lt;a href="http://support.microsoft.com/kb/973405"&gt;download package&lt;/a&gt;.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;In Microsoft Office Access 2007, you have a report that includes a form reference in the criteria of the record source. When you enter a letter at the first parameter prompt, a numeric value is displayed on the report. For example, if you enter the letter &amp;quot;a&amp;quot; at the first parameter prompt, the value &amp;quot;97&amp;quot; is displayed on the report.      &lt;br /&gt;&lt;/li&gt;    &lt;li&gt;In Access 2007, you have a form or a report that is bound to a SQL Server stored procedure. The stored procedure is executed multiple times when you perform one of the following actions: &lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;You open a form in &lt;strong&gt;Form View&lt;/strong&gt;. &lt;/li&gt;      &lt;li&gt;You open a form in &lt;strong&gt;Datasheet View&lt;/strong&gt;. &lt;/li&gt;      &lt;li&gt;You open a report in &lt;strong&gt;Report View&lt;/strong&gt;. &lt;/li&gt;      &lt;li&gt;You print or print preview a report. &lt;/li&gt;   &lt;/ul&gt; &lt;/ul&gt;  &lt;blockquote&gt;   &lt;p&gt;This problem does not occur in Access 2003.     &lt;br /&gt;&lt;b&gt;Note&lt;/b&gt; You also experience the problem when you open a form or a report in &lt;strong&gt;Design View&lt;/strong&gt; or in &lt;strong&gt;Layout View&lt;/strong&gt;. However, this is not fixed in the hotfix. &lt;/p&gt; &lt;/blockquote&gt;  &lt;ul&gt;   &lt;li&gt;After you apply 2007 Office system Service Pack 2, the &lt;strong&gt;Navigation Pane&lt;/strong&gt; in Access 2007 continues to scroll after you release the mouse. This problem occurs when the &lt;strong&gt;Navigation Pane&lt;/strong&gt; is viewed by &lt;strong&gt;Details&lt;/strong&gt; or by &lt;strong&gt;Icon&lt;/strong&gt;, but not by &lt;strong&gt;List&lt;/strong&gt;.      &lt;br /&gt;&lt;/li&gt;    &lt;li&gt;After you apply 2007 Office system Service Pack 2, the description of an object does not appear in the &lt;strong&gt;Navigation Pane&lt;/strong&gt; in Access 2007. This problem occurs when the &lt;strong&gt;Navigation Pane&lt;/strong&gt; is viewed by &lt;strong&gt;Details&lt;/strong&gt;.      &lt;br /&gt;      &lt;br /&gt;After you apply 2007 Office system Service Pack 2, when you open an object in Access 2007 the text on the status bar flickers.      &lt;br /&gt;&lt;/li&gt;    &lt;li&gt;In Access 2007, you open a view that contains a field which uses a sum function in &lt;strong&gt;Report View&lt;/strong&gt; or in &lt;strong&gt;Layout View&lt;/strong&gt;. If you move the scroll bar while the sum function is calculating, the value of the field changes.&lt;/li&gt; &lt;/ul&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9893895" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/access/archive/tags/Access+2007/default.aspx">Access 2007</category><category domain="http://blogs.msdn.com/access/archive/tags/Hotfix/default.aspx">Hotfix</category></item><item><title>Handling the SQL Server bigint data type in Access 2007 using ADO</title><link>http://blogs.msdn.com/access/archive/2009/06/10/handling-the-sql-server-bigint-data-type-in-access-2007-using-ado.aspx</link><pubDate>Thu, 11 Jun 2009 01:31:28 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9725173</guid><dc:creator>Mike Stowe</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/access/comments/9725173.aspx</comments><wfw:commentRss>http://blogs.msdn.com/access/commentrss.aspx?PostID=9725173</wfw:commentRss><description>&lt;p&gt;&lt;strong&gt;Today’s guest blogger is Vinny Malanga. Vinny is the CTO of &lt;a href="http://www.imisoftwareinc.com/"&gt;IMI Software, Inc.&lt;/a&gt;, which specializes in software development for the property management industry.&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;I recently received a call from a client asking for help on how to use the SQL Server &lt;strong&gt;bigint&lt;/strong&gt; data type in a disconnected Access .accdb file. Here’s the scenario:&lt;/p&gt;  &lt;p&gt;There’s a SQL Server table that is using the &lt;strong&gt;bigint&lt;/strong&gt; data type as an identity column. In this scenario, the Access database is completely disconnected from the SQL Server 2008 database. There is no use of ODBC or linked tables. All data access is handled using ADO.&lt;/p&gt;  &lt;p&gt;As explained in &lt;a href="http://msdn.microsoft.com/en-us/sqlserver/cc514207.aspx"&gt;SQL Server 2008 Books Online&lt;/a&gt; the range of the &lt;strong&gt;bigint&lt;/strong&gt; data type is -2^63 (-9,223,372,036,854,775,808) to 2^63-1 (9,223,372,036,854,775,807). The problem is that there is no equivalent Access data type to the SQL Server &lt;strong&gt;bigint&lt;/strong&gt; data type. But, you are not out of luck. There are a couple of ways that you can handle this. Both options are explained below.&lt;/p&gt;  &lt;p&gt;The first option is to have all stored procedures or views which return the &lt;strong&gt;bigint&lt;/strong&gt; value to Access explicitly cast the &lt;strong&gt;bigint&lt;/strong&gt; value to a &lt;strong&gt;varchar&lt;/strong&gt;. Access can then utilize the data as a string value. When sending the value back to SQL Server (such as when updating or deleting a record), the stored procedure simply casts the string back to a &lt;strong&gt;bigint&lt;/strong&gt; so it can be used appropriately in SQL Server.&lt;/p&gt;  &lt;p&gt;The second option is to utilize the &lt;strong&gt;Variant&lt;/strong&gt; data type in Access. I know what you may be thinking at this point. At first glance, many of you may not like the sound of this, and as a general rule, I tend to agree, but it is worth exploring this option. By taking this approach, there is no casting in SQL Server necessary. The &lt;strong&gt;Variant&lt;/strong&gt; data type can hold the &lt;strong&gt;bigint&lt;/strong&gt; value that SQL Server sends to Access because the &lt;strong&gt;Decimal&lt;/strong&gt; data type is a subtype of the &lt;strong&gt;Variant&lt;/strong&gt; data type. You can’t explicitly declare a &lt;strong&gt;Decimal&lt;/strong&gt; data type in Access but the &lt;strong&gt;Variant&lt;/strong&gt; data type does store the value as a decimal. You can see this by running the &lt;strong&gt;VarType(&lt;i&gt;VarName&lt;/i&gt;)&lt;/strong&gt; function. The result is 14 which is the VB constant for &lt;strong&gt;vbDecimal&lt;/strong&gt;. You could also run the &lt;strong&gt;TypeName(&lt;i&gt;VarName&lt;/i&gt;)&lt;/strong&gt; function which returns &lt;strong&gt;Decimal&lt;/strong&gt;. I’ve included these methods in the sample access database in the &lt;i&gt;cmdGetName_Click()&lt;/i&gt; event. Just uncomment them and the result will print in the debug window. &lt;/p&gt;  &lt;p&gt;Another small caveat to using a variant is if you are going to display the value in a textbox. The large &lt;strong&gt;bigint&lt;/strong&gt; values will display in scientific notation. For example, if you are displaying the &lt;strong&gt;bigint&lt;/strong&gt; value 9223372036854775807, an Access textbox will display this as 9.22337203685478E+18. However, the actual value is stored appropriately so this isn’t an issue if the field is hidden. For display purposes though, you could cast the value to a string using &lt;strong&gt;CStr(&lt;i&gt;Expression&lt;/i&gt;)&lt;/strong&gt; when binding to the textbox (&lt;i&gt;again, a little more overhead&lt;/i&gt;), or simply display the value in a label control.&lt;/p&gt;  &lt;p&gt;As a general rule, using variants can degrade performance. Since the data type isn’t explicitly declared, VBA has the additional overhead of maintaining which data type it is actually storing. Also, variants are large, 16 bytes so they have a higher memory footprint. However, variants are there for a reason and sometimes they do have their purpose. This could be one of them. I’m not totally opposed to this method, but personally I try to avoid using the &lt;strong&gt;Variant&lt;/strong&gt; data type when another option is available. So, personally, I tend to gravitate toward the first option. &lt;/p&gt;  &lt;p&gt;I’ve supplied some SQL scripts and a &lt;a href="http://cid-f83d4d33f0a1a23a.skydrive.live.com/self.aspx/Sample%20Databases/BigIntAccessDemo.accdb"&gt;sample Access database&lt;/a&gt; applying both methods There are also some examples in the sample database on the use of classes, disconnected ADO Recordsets, and general object oriented programming principles. &lt;/p&gt;  &lt;p&gt;Here are the scripts to create the objects in a SQL Server database.&lt;/p&gt;  &lt;pre class="csharpcode"&gt;&lt;span class="rem"&gt;-- 1 Create a table:&lt;/span&gt;
&lt;span class="rem"&gt;-- I have set the identity to begin at the largest bigint value&lt;/span&gt;
&lt;span class="rem"&gt;-- for demonstration purposes.&lt;/span&gt;
&lt;span class="kwrd"&gt;CREATE&lt;/span&gt; &lt;span class="kwrd"&gt;TABLE&lt;/span&gt; [dbo].[tblName](
    [RecordID] [bigint] &lt;span class="kwrd"&gt;IDENTITY&lt;/span&gt;(9223372036854775807,-1) &lt;span class="kwrd"&gt;NOT&lt;/span&gt; &lt;span class="kwrd"&gt;NULL&lt;/span&gt;,
    [Name] [&lt;span class="kwrd"&gt;varchar&lt;/span&gt;](50) &lt;span class="kwrd"&gt;NULL&lt;/span&gt;,
 &lt;span class="kwrd"&gt;CONSTRAINT&lt;/span&gt; [PK_tblName] &lt;span class="kwrd"&gt;PRIMARY&lt;/span&gt; &lt;span class="kwrd"&gt;KEY&lt;/span&gt; &lt;span class="kwrd"&gt;CLUSTERED&lt;/span&gt; 
(
    [RecordID] &lt;span class="kwrd"&gt;ASC&lt;/span&gt;
)
&lt;span class="kwrd"&gt;WITH&lt;/span&gt; (PAD_INDEX = &lt;span class="kwrd"&gt;OFF&lt;/span&gt;, STATISTICS_NORECOMPUTE = &lt;span class="kwrd"&gt;OFF&lt;/span&gt;, IGNORE_DUP_KEY = &lt;span class="kwrd"&gt;OFF&lt;/span&gt;, 
       ALLOW_ROW_LOCKS = &lt;span class="kwrd"&gt;ON&lt;/span&gt;, ALLOW_PAGE_LOCKS = &lt;span class="kwrd"&gt;ON&lt;/span&gt;) &lt;span class="kwrd"&gt;ON&lt;/span&gt; [&lt;span class="kwrd"&gt;PRIMARY&lt;/span&gt;]
) &lt;span class="kwrd"&gt;ON&lt;/span&gt; [&lt;span class="kwrd"&gt;PRIMARY&lt;/span&gt;]
&lt;span class="kwrd"&gt;GO&lt;/span&gt;

&lt;span class="rem"&gt;-- Create four Stored Procedures.&lt;/span&gt;
&lt;span class="kwrd"&gt;CREATE&lt;/span&gt; &lt;span class="kwrd"&gt;PROCEDURE&lt;/span&gt; [dbo].[procGetNameUsingString] 
&lt;span class="kwrd"&gt;AS&lt;/span&gt;
&lt;span class="kwrd"&gt;BEGIN&lt;/span&gt;
    &lt;span class="kwrd"&gt;SET&lt;/span&gt; NOCOUNT &lt;span class="kwrd"&gt;ON&lt;/span&gt;;
    &lt;span class="rem"&gt;-- bigint range is -9223372036854775808 to 9223372036854775807&lt;/span&gt;

    &lt;span class="rem"&gt;-- Cast RecordID to varchar(19) when sending to Access&lt;/span&gt;
    &lt;span class="rem"&gt;-- 19 is the number of characters needed to hold the largest&lt;/span&gt;
    &lt;span class="rem"&gt;-- length bigint value. Use 20 if you're going to use negative&lt;/span&gt;
    &lt;span class="rem"&gt;-- numbers to account for the negative sign.&lt;/span&gt;
    &lt;span class="kwrd"&gt;SELECT&lt;/span&gt; &lt;span class="kwrd"&gt;CAST&lt;/span&gt;(RecordID &lt;span class="kwrd"&gt;AS&lt;/span&gt; &lt;span class="kwrd"&gt;varchar&lt;/span&gt;(19)) &lt;span class="kwrd"&gt;AS&lt;/span&gt; RecordID, Name &lt;span class="kwrd"&gt;FROM&lt;/span&gt; tblName
&lt;span class="kwrd"&gt;END&lt;/span&gt;
&lt;span class="kwrd"&gt;GO&lt;/span&gt;

&lt;span class="kwrd"&gt;CREATE&lt;/span&gt; &lt;span class="kwrd"&gt;PROCEDURE&lt;/span&gt; [dbo].[procGetNameUsingVariant] 
&lt;span class="kwrd"&gt;AS&lt;/span&gt;
&lt;span class="kwrd"&gt;BEGIN&lt;/span&gt;
    &lt;span class="kwrd"&gt;SET&lt;/span&gt; NOCOUNT &lt;span class="kwrd"&gt;ON&lt;/span&gt;;
    &lt;span class="kwrd"&gt;SELECT&lt;/span&gt;  RecordID, Name &lt;span class="kwrd"&gt;FROM&lt;/span&gt; tblName
&lt;span class="kwrd"&gt;END&lt;/span&gt;
&lt;span class="kwrd"&gt;GO&lt;/span&gt;

&lt;span class="kwrd"&gt;CREATE&lt;/span&gt; &lt;span class="kwrd"&gt;PROCEDURE&lt;/span&gt; [dbo].[procUpdateNameUsingString]
    (
        @RecordID        &lt;span class="kwrd"&gt;varchar&lt;/span&gt;(19),
        @Name            &lt;span class="kwrd"&gt;varchar&lt;/span&gt;(50),
        @ReturnValue    &lt;span class="kwrd"&gt;bit&lt;/span&gt; &lt;span class="kwrd"&gt;OUTPUT&lt;/span&gt;
    )
&lt;span class="kwrd"&gt;AS&lt;/span&gt;
&lt;span class="kwrd"&gt;BEGIN&lt;/span&gt;
    &lt;span class="kwrd"&gt;SET&lt;/span&gt; NOCOUNT &lt;span class="kwrd"&gt;ON&lt;/span&gt;;
    &lt;span class="rem"&gt;-- Declare a variable to hold the bigint value&lt;/span&gt;
    &lt;span class="rem"&gt;-- and assign it the result of casting the incoming&lt;/span&gt;
    &lt;span class="rem"&gt;-- string representation of RecordID back to a bigint value.&lt;/span&gt;
    &lt;span class="kwrd"&gt;DECLARE&lt;/span&gt; @RecordIDBigInt bigint
    &lt;span class="kwrd"&gt;SET&lt;/span&gt; @RecordIDBigInt = &lt;span class="kwrd"&gt;CAST&lt;/span&gt;(@RecordID &lt;span class="kwrd"&gt;AS&lt;/span&gt; bigint)
    &lt;span class="rem"&gt;-- Update the record using the bigint value.&lt;/span&gt;
    &lt;span class="kwrd"&gt;UPDATE&lt;/span&gt; tblName
    &lt;span class="kwrd"&gt;SET&lt;/span&gt; Name = @Name
    &lt;span class="kwrd"&gt;WHERE&lt;/span&gt; RecordID = @RecordIDBigInt
    
    &lt;span class="kwrd"&gt;SET&lt;/span&gt; @ReturnValue = &lt;span class="preproc"&gt;@@ROWCOUNT&lt;/span&gt;
&lt;span class="kwrd"&gt;END&lt;/span&gt;
&lt;span class="kwrd"&gt;GO&lt;/span&gt;

&lt;span class="kwrd"&gt;CREATE&lt;/span&gt; &lt;span class="kwrd"&gt;PROCEDURE&lt;/span&gt; [dbo].[procUpdateNameUsingVariant]
    (
        @RecordID        bigint,
        @Name            &lt;span class="kwrd"&gt;varchar&lt;/span&gt;(50),
        @ReturnValue    &lt;span class="kwrd"&gt;bit&lt;/span&gt; &lt;span class="kwrd"&gt;OUTPUT&lt;/span&gt;
    )
&lt;span class="kwrd"&gt;AS&lt;/span&gt;
&lt;span class="kwrd"&gt;BEGIN&lt;/span&gt;
    &lt;span class="kwrd"&gt;SET&lt;/span&gt; NOCOUNT &lt;span class="kwrd"&gt;ON&lt;/span&gt;;

    &lt;span class="kwrd"&gt;UPDATE&lt;/span&gt; tblName
    &lt;span class="kwrd"&gt;SET&lt;/span&gt; Name = @Name
    &lt;span class="kwrd"&gt;WHERE&lt;/span&gt; RecordID = @RecordID
    
    &lt;span class="kwrd"&gt;SET&lt;/span&gt; @ReturnValue = &lt;span class="preproc"&gt;@@ROWCOUNT&lt;/span&gt;
&lt;span class="kwrd"&gt;END&lt;/span&gt;
&lt;span class="kwrd"&gt;GO&lt;/span&gt;

&lt;span class="rem"&gt;-- Create a view (example if using views&lt;/span&gt;
&lt;span class="rem"&gt;-- rather than stored procedures).&lt;/span&gt;
&lt;span class="kwrd"&gt;CREATE&lt;/span&gt; &lt;span class="kwrd"&gt;VIEW&lt;/span&gt; [dbo].[vwGetNameUsingString]
&lt;span class="kwrd"&gt;AS&lt;/span&gt;
&lt;span class="kwrd"&gt;SELECT&lt;/span&gt;     RecordID, &lt;span class="kwrd"&gt;CAST&lt;/span&gt;(Name &lt;span class="kwrd"&gt;AS&lt;/span&gt; &lt;span class="kwrd"&gt;varchar&lt;/span&gt;(19)) &lt;span class="kwrd"&gt;AS&lt;/span&gt; Expr1
&lt;span class="kwrd"&gt;FROM&lt;/span&gt;         dbo.tblName
GO&lt;/pre&gt;
&lt;style type="text/css"&gt;
.csharpcode {
	background-color: #ffffff; font-family: consolas, "Courier New", courier, monospace; color: black; font-size: small
}
.csharpcode pre {
	background-color: #ffffff; font-family: consolas, "Courier New", courier, monospace; color: black; font-size: small
}
.csharpcode pre {
	margin: 0em
}
.csharpcode .rem {
	color: #008000
}
.csharpcode .kwrd {
	color: #0000ff
}
.csharpcode .str {
	color: #006080
}
.csharpcode .op {
	color: #0000c0
}
.csharpcode .preproc {
	color: #cc6633
}
.csharpcode .asp {
	background-color: #ffff00
}
.csharpcode .html {
	color: #800000
}
.csharpcode .attr {
	color: #ff0000
}
.csharpcode .alt {
	background-color: #f4f4f4; margin: 0em; width: 100%
}
.csharpcode .lnum {
	color: #606060
}&lt;/style&gt;

&lt;p&gt;Once you’ve run the scripts, your SQL database will contain one new table, four new stored procedures, and one new view. You’ll want to add a record to the newly-created table to make use of the form in the sample Access database.&lt;/p&gt;

&lt;p&gt;You can download the sample Access database from &lt;a href="http://cid-f83d4d33f0a1a23a.skydrive.live.com/self.aspx/Sample%20Databases/BigIntAccessDemo.accdb"&gt;here&lt;/a&gt;. You should change the connection string in the Connect subroutine of the clsDataAccess module to suit your environment. Note that the code requires a reference to the Microsoft ActiveX Data Objects 6.0 Library. The sample database already contains the reference; this is something to keep in mind if you implement the class in your database.&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;
&lt;style type="text/css"&gt;
.csharpcode {
	background-color: #ffffff; font-family: consolas, "Courier New", courier, monospace; color: black; font-size: small
}
.csharpcode pre {
	background-color: #ffffff; font-family: consolas, "Courier New", courier, monospace; color: black; font-size: small
}
.csharpcode pre {
	margin: 0em
}
.csharpcode .rem {
	color: #008000
}
.csharpcode .kwrd {
	color: #0000ff
}
.csharpcode .str {
	color: #006080
}
.csharpcode .op {
	color: #0000c0
}
.csharpcode .preproc {
	color: #cc6633
}
.csharpcode .asp {
	background-color: #ffff00
}
.csharpcode .html {
	color: #800000
}
.csharpcode .attr {
	color: #ff0000
}
.csharpcode .alt {
	background-color: #f4f4f4; margin: 0em; width: 100%
}
.csharpcode .lnum {
	color: #606060
}&lt;/style&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9725173" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/access/archive/tags/Access+2007/default.aspx">Access 2007</category><category domain="http://blogs.msdn.com/access/archive/tags/SQL+Server/default.aspx">SQL Server</category><category domain="http://blogs.msdn.com/access/archive/tags/Power+Tips/default.aspx">Power Tips</category></item><item><title>VBA values for Office theme colors</title><link>http://blogs.msdn.com/access/archive/2009/05/26/vba-values-for-office-theme-colors.aspx</link><pubDate>Tue, 26 May 2009 19:17:02 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9641613</guid><dc:creator>Clint Covington</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/access/comments/9641613.aspx</comments><wfw:commentRss>http://blogs.msdn.com/access/commentrss.aspx?PostID=9641613</wfw:commentRss><description>&lt;p&gt;Recently, there was a thread on UtterAccess that I thought might be helpful to more people. The poster radish asks:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;I'd like to change the color of a control then be able to change it back to its original color. If I wanted to use the theme's highlight color, e.g., how would I do that in code? It's listed in the property sheet as &amp;quot;Highlight&amp;quot;. Sure, I could grab the values of that color but is it possible to reference &amp;quot;Highlight&amp;quot;, &amp;quot;Access Theme 5&amp;quot; or &amp;quot;Dark Blue 3&amp;quot; in vba code?&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Access 2007 has a series of generic colors that change color based on the Office theme color. Internally, we store negative numbers and map those to predefined colors in the theme color table. &lt;/p&gt;  &lt;p&gt;You can get the underlying value using the immediate window. Something like:&lt;/p&gt;  &lt;p&gt;&lt;font size="3" face="Courier"&gt;?forms(&amp;quot;colors&amp;quot;).Controls(&amp;quot;Text16&amp;quot;).backcolor&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;In case you are lazy like me—here is a table of the color values you need to use in VBA to have it theme with the Office theme color. &lt;/p&gt;  &lt;table border="0" cellspacing="0" cellpadding="2" width="400"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top" width="200"&gt;&lt;strong&gt;Color&lt;/strong&gt;&lt;/td&gt;        &lt;td valign="top" width="200"&gt;&lt;strong&gt;VBA Color Value&lt;/strong&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="200"&gt;Alternate Row&lt;/td&gt;        &lt;td valign="top" width="200"&gt;-2147483610 &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="200"&gt;Background Form&lt;/td&gt;        &lt;td valign="top" width="200"&gt;-2147483613&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="200"&gt;Background Light Header&lt;/td&gt;        &lt;td valign="top" width="200"&gt;-2147483612 &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="200"&gt;Borders/Gridlines&lt;/td&gt;        &lt;td valign="top" width="200"&gt;-2147483609&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="200"&gt;Text Black&lt;/td&gt;        &lt;td valign="top" width="200"&gt;-2147483617 &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="200"&gt;Text description&lt;/td&gt;        &lt;td valign="top" width="200"&gt;-2147483614 &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="200"&gt;Text Light&lt;/td&gt;        &lt;td valign="top" width="200"&gt;-2147483616 &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="200"&gt;Text Dark&lt;/td&gt;        &lt;td valign="top" width="200"&gt;-2147483615 &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="200"&gt;Highlight&lt;/td&gt;        &lt;td valign="top" width="200"&gt;-2147483608&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;Here is a link where you can get similar color values for &lt;a href="http://office.microsoft.com/en-us/access/HP051878881033.aspx"&gt;system colors&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9641613" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/access/archive/tags/Access+2007/default.aspx">Access 2007</category><category domain="http://blogs.msdn.com/access/archive/tags/Power+Tips/default.aspx">Power Tips</category></item><item><title>Synchronize with SharePoint under the hood</title><link>http://blogs.msdn.com/access/archive/2009/05/26/synchronize-with-sharepoint-under-the-hood.aspx</link><pubDate>Tue, 26 May 2009 18:46:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9638315</guid><dc:creator>Clint Covington</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/access/comments/9638315.aspx</comments><wfw:commentRss>http://blogs.msdn.com/access/commentrss.aspx?PostID=9638315</wfw:commentRss><description>&lt;p&gt;Recently I was asked the following question:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;I am looking to get an understanding of the internal operations during an Access 2007 synchronize execution. I have just been exposed to a SharePoint MOSS and Access 2007 environment where at times the normal sync time goes from 7-minutes to around an hour. I am taking the side of “network bandwidth” as the reason and not the side of “data quantity” as the root cause for the increased time.&lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;em&gt;Each user has their own copy of the SharePoint Lists (tables), which they work with offline. The users update their Access tables and at certain times (at their own discretion) during the day executes the synchronize function, which leads to why I expose myself to this forum's sages. Just what actions/decisions are being executed and how they are selected?&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;From a high level there are seven stages to synchronizing data with SharePoint:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;The client sends pending changes to the server.&lt;/li&gt;    &lt;li&gt;The client delete the local cache.&lt;/li&gt;    &lt;li&gt;The client requests a new local cache from the server.&lt;/li&gt;    &lt;li&gt;The server pulls the data out of SQL Server and sends it to the client in batches of XML.&lt;/li&gt;    &lt;li&gt;The data travels the wire from the server to the client.&lt;/li&gt;    &lt;li&gt;The client parses the XML and loads it into an in-memory table.&lt;/li&gt;    &lt;li&gt;The client asks the user to resolve any potential conflicts.&lt;/li&gt; &lt;/ol&gt;  &lt;h4&gt;Client Memory&lt;/h4&gt;  &lt;p&gt;When the user takes an application with SharePoint link tables Offline, Access stores an copy of all the list data in an XML format that mirrors what was retrieved from the server. When Access is running this data is parsed into an in-memory table. One of the first performance challenges you will face is when Access parses the XML and loads the data in memory. If the working set gets too big Access Windows swap memory out to disk which causes the machine to thrash. I typically check task manager to see how large the working set is. There are two remedies to this problem:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Increase memory on the client machine, and/or &lt;/li&gt;    &lt;li&gt;Move data that doesn’t change (such as stale and large lookup data) to a local table.&lt;/li&gt; &lt;/ol&gt;  &lt;h4&gt;Rehydrating the Cache&lt;/h4&gt;  &lt;p&gt;When the user clicks synchronize, Access will send pending changes to the server and request an updated version of the list. Access 2007&amp;#160; re-fetchs the linked list(s) including the User Information Lists. If your site has a large user information list—this could take quite a while. There are a couple solutions if your app has a large User Information List:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Move the data into it’s own site and not inherit the permissions from the parent site. This should give you a custom user information list that only includes people that are actually using the site. &lt;/li&gt;    &lt;li&gt;If you don’t use the User Information List the link table can be deleted. The app should still continue to function other than not resolving the Created By and Modified By lookup fields. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;The performance of fetching data is impacted by performance of the SharePoint Server to query the list items, return the user information list, and sending data down the wire. It is limited to the speed of light—the further you are from the server the slower the response. Obviously connection speed also has a huge influence. You also have to factor in parsing the XML and loading the DOM in memory. &lt;/p&gt;  &lt;h4&gt;What is on the wire?&lt;/h4&gt;  &lt;p&gt;You can see what is actually sent over the wire by installing the free &lt;a href="http://www.fiddlertool.com/fiddler/version.asp"&gt;Fiddler Web Debugging Proxy&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/access/WindowsLiveWriter/SynchronizewithSharePointunderthehood_8181/fiddler_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="fiddler" border="0" alt="fiddler" src="http://blogs.msdn.com/blogfiles/access/WindowsLiveWriter/SynchronizewithSharePointunderthehood_8181/fiddler_thumb.png" width="244" height="192" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;I find this tool invaluable to understand what is happening in the application.&lt;/p&gt;  &lt;p&gt;In investigations that we’ve done, the pushing up and fetching of the data (which includes the network time plus whatever processing SharePoint does) often takes about 2/3 of the time in the go offline/sync scenario.&lt;/p&gt;  &lt;h4&gt;Conflict Detection&lt;/h4&gt;  &lt;p&gt;If there are conflicts detected during a sync operation (meaning the item was changed by someone on the server and someone on the client) Access launches the conflict detection dialog. We leave it up to the user to figure out which record to keep.&lt;/p&gt;  &lt;h4&gt;Summary&lt;/h4&gt;  &lt;p&gt;Access 2007 is much more efficient than Access 2003 working with SharePoint data; however, there are many opportunities for us to improve make this scenario for the client and server. We will talk more about this subject in a couple months.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9638315" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/access/archive/tags/Access+2007/default.aspx">Access 2007</category><category domain="http://blogs.msdn.com/access/archive/tags/SharePoint/default.aspx">SharePoint</category></item><item><title>How to: Create a Shortcut Menu for a Form, Form Control, or Report</title><link>http://blogs.msdn.com/access/archive/2009/05/21/how-to-create-a-shortcut-menu-for-a-form-form-control-or-report.aspx</link><pubDate>Thu, 21 May 2009 11:00:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9633085</guid><dc:creator>Mike Stowe</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/access/comments/9633085.aspx</comments><wfw:commentRss>http://blogs.msdn.com/access/commentrss.aspx?PostID=9633085</wfw:commentRss><description>&lt;p&gt;&lt;strong&gt;Today’s guest blogger is Edwin Blancovitch. Edwin is president of &lt;/strong&gt;&lt;a href="http://advdev.net/"&gt;&lt;strong&gt;Advanced Developers.net&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;, creators of &lt;/strong&gt;&lt;a href="http://www.easypayroll.net/"&gt;&lt;strong&gt;Easy Payroll&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;, a software package to manage your human resources, payroll, scheduling, time and attendance needs.&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;When you're designing a form or report, you may want to provide a method for a user to easily use a command that applies only to the correct context. One way to do this is to create a custom shortcut menu and apply it to a form report, or control. The shortcut menu appears when the user right-clicks the object to which the shortcut menu is applied.&lt;/p&gt;  &lt;p&gt;In earlier versions of Access, you could use the &lt;b&gt;Customize&lt;/b&gt; dialog box to create custom shortcut menus. In Microsoft Office Access 2007, you must use Visual Basic for Applications (VBA) code to create a shortcut menu. This article shows you how to create a shortcut menu using VBA.&lt;/p&gt;  &lt;p&gt;To create a shortcut menu, you first have to create a &lt;b&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/aa432092.aspx"&gt;CommandBar&lt;/a&gt;&lt;/b&gt; object. The &lt;b&gt;CommandBar&lt;/b&gt; object represents the shortcut menu. Then, you use the &lt;b&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/aa432790.aspx"&gt;Add&lt;/a&gt;&lt;/b&gt; method to create &lt;b&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/aa432095.aspx"&gt;CommandBarControl&lt;/a&gt;&lt;/b&gt; objects. Each time you create a &lt;strong&gt;CommandBarControl&lt;/strong&gt; object, a command is added to the shortcut menu.&lt;/p&gt;  &lt;h3&gt;Example 1: A Simple Shortcut Menu&lt;/h3&gt;  &lt;p&gt;The following example creates a shortcut menu named &lt;b&gt;SimpleShortcutMenu&lt;/b&gt; that contains two commands, &lt;b&gt;Remove Filter/Sort&lt;/b&gt; and &lt;b&gt;Filter by Selection&lt;/b&gt;.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt; To use the following examples, you must set a reference to the &lt;b&gt;Microsoft Office 12.0 Object Library&lt;/b&gt;. See &lt;a href="http://msdn.microsoft.com/en-us/library/bb256558.aspx"&gt;Set References to Type Libraries&lt;/a&gt; for more information about setting references.&lt;/p&gt;  &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;Sub&lt;/span&gt; CreateSimpleShortcutMenu()
    &lt;span class="kwrd"&gt;Dim&lt;/span&gt; cmbShortcutMenu &lt;span class="kwrd"&gt;As&lt;/span&gt; Office.CommandBar
    
    &lt;span class="rem"&gt;' Create a shortcut menu named &amp;quot;SimpleShortcutMenu&amp;quot;.&lt;/span&gt;
    &lt;span class="kwrd"&gt;Set&lt;/span&gt; cmbShortcutMenu = CommandBars.Add(&lt;span class="str"&gt;&amp;quot;SimpleShortcutMenu&amp;quot;&lt;/span&gt;, _
                        msoBarPopup, &lt;span class="kwrd"&gt;False&lt;/span&gt;, &lt;span class="kwrd"&gt;False&lt;/span&gt;)
                        
    &lt;span class="rem"&gt;' Add the Remove Filter/Sort command.&lt;/span&gt;
    cmbShortcutMenu.Controls.Add Type:=msoControlButton, Id:=605
    
    &lt;span class="rem"&gt;' Add the Filter By Selection command.&lt;/span&gt;
    cmbShortcutMenu.Controls.Add Type:=msoControlButton, Id:=640
    
    &lt;span class="kwrd"&gt;Set&lt;/span&gt; cmbShortcutMenu = &lt;span class="kwrd"&gt;Nothing&lt;/span&gt;
&lt;span class="kwrd"&gt;End&lt;/span&gt; Sub&lt;/pre&gt;
&lt;style type="text/css"&gt;
.csharpcode {
	background-color: #ffffff; font-family: consolas, "Courier New", courier, monospace; color: black; font-size: small
}
.csharpcode pre {
	background-color: #ffffff; font-family: consolas, "Courier New", courier, monospace; color: black; font-size: small
}
.csharpcode pre {
	margin: 0em
}
.csharpcode .rem {
	color: #008000
}
.csharpcode .kwrd {
	color: #0000ff
}
.csharpcode .str {
	color: #006080
}
.csharpcode .op {
	color: #0000c0
}
.csharpcode .preproc {
	color: #cc6633
}
.csharpcode .asp {
	background-color: #ffff00
}
.csharpcode .html {
	color: #800000
}
.csharpcode .attr {
	color: #ff0000
}
.csharpcode .alt {
	background-color: #f4f4f4; margin: 0em; width: 100%
}
.csharpcode .lnum {
	color: #606060
}&lt;/style&gt;&lt;style type="text/css"&gt;
.csharpcode {
	background-color: #ffffff; font-family: consolas, "Courier New", courier, monospace; color: black; font-size: small
}
.csharpcode pre {
	background-color: #ffffff; font-family: consolas, "Courier New", courier, monospace; color: black; font-size: small
}
.csharpcode pre {
	margin: 0em
}
.csharpcode .rem {
	color: #008000
}
.csharpcode .kwrd {
	color: #0000ff
}
.csharpcode .str {
	color: #006080
}
.csharpcode .op {
	color: #0000c0
}
.csharpcode .preproc {
	color: #cc6633
}
.csharpcode .asp {
	background-color: #ffff00
}
.csharpcode .html {
	color: #800000
}
.csharpcode .attr {
	color: #ff0000
}
.csharpcode .alt {
	background-color: #f4f4f4; margin: 0em; width: 100%
}
.csharpcode .lnum {
	color: #606060
}&lt;/style&gt;

&lt;p&gt;&lt;font face="Courier New"&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p&gt;Once you've run the code, the shortcut menu is saved as part of the database. You don't have to run the same code to recreate the shortcut menu each time you open the database.&lt;/p&gt;

&lt;p&gt;To assign the shortcut menu to a form, form control, or report, set &lt;b&gt;Shortcut Menu&lt;/b&gt; property of the object to &lt;b&gt;Yes&lt;/b&gt; and set the &lt;b&gt;Shortcut Menu Bar&lt;/b&gt; property of the object to the name of the shortcut menu. For this example, set the &lt;b&gt;Shortcut Menu Bar&lt;/b&gt; property to &lt;b&gt;SimpleShortcutMenu&lt;/b&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt; In some instances, you may want to create a temporary CommandBar. To do this, set the &lt;em&gt;Temporary&lt;/em&gt; argument of the &lt;strong&gt;Add&lt;/strong&gt; method to &lt;strong&gt;True&lt;/strong&gt;. When you do this, the CommandBar is deleted when Access is closed.&lt;/p&gt;

&lt;h3&gt;Example 2: A Shortcut Menu With Grouping&lt;/h3&gt;

&lt;p&gt;The following example creates a shortcut menu named &lt;b&gt;cmdFormFiltering&lt;/b&gt; that contains commands that are useful to use with Continuous forms. In this example, the &lt;b&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/aa432903.aspx"&gt;BeginGroup&lt;/a&gt;&lt;/b&gt; property is used on several controls to group controls visually.&lt;/p&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;Sub&lt;/span&gt; CreateShortcutMenuWithGroups()
    &lt;span class="kwrd"&gt;Dim&lt;/span&gt; cmbRightClick &lt;span class="kwrd"&gt;As&lt;/span&gt; Office.CommandBar
    
    &lt;span class="rem"&gt;' Create the shortcut menu.&lt;/span&gt;
    &lt;span class="kwrd"&gt;Set&lt;/span&gt; cmbRightClick = CommandBars.Add(&lt;span class="str"&gt;&amp;quot;cmdFormFiltering&amp;quot;&lt;/span&gt;, _
                      msoBarPopup, &lt;span class="kwrd"&gt;False&lt;/span&gt;, &lt;span class="kwrd"&gt;False&lt;/span&gt;)
    
    &lt;span class="kwrd"&gt;With&lt;/span&gt; cmbRightClick
        &lt;span class="rem"&gt;' Add the Find command.&lt;/span&gt;
        .Controls.Add msoControlButton, 141
        
        &lt;span class="rem"&gt;' Start a new grouping and add the Sort Ascending command.&lt;/span&gt;
        .Controls.Add(msoControlButton, 210).BeginGroup = &lt;span class="kwrd"&gt;True&lt;/span&gt;
        
        &lt;span class="rem"&gt;' Add the Sort Descending command.&lt;/span&gt;
        .Controls.Add msoControlButton, 211
        
        &lt;span class="rem"&gt;' Start a new grouping and add the Remove Filer/Sort command.&lt;/span&gt;
        .Controls.Add(msoControlButton, 605).BeginGroup = &lt;span class="kwrd"&gt;True&lt;/span&gt;
        
        &lt;span class="rem"&gt;' Add the Filter by Selection command.&lt;/span&gt;
        .Controls.Add msoControlButton, 640
        
        &lt;span class="rem"&gt;' Add the Filter Excluding Selection command.&lt;/span&gt;
        .Controls.Add msoControlButton, 3017
        
        &lt;span class="rem"&gt;' Add the Between... command.&lt;/span&gt;
        .Controls.Add msoControlButton, 10062
    &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;With&lt;/span&gt;
&lt;span class="kwrd"&gt;End&lt;/span&gt; Sub&lt;/pre&gt;
&lt;style type="text/css"&gt;
.csharpcode {
	background-color: #ffffff; font-family: consolas, "Courier New", courier, monospace; color: black; font-size: small
}
.csharpcode pre {
	background-color: #ffffff; font-family: consolas, "Courier New", courier, monospace; color: black; font-size: small
}
.csharpcode pre {
	margin: 0em
}
.csharpcode .rem {
	color: #008000
}
.csharpcode .kwrd {
	color: #0000ff
}
.csharpcode .str {
	color: #006080
}
.csharpcode .op {
	color: #0000c0
}
.csharpcode .preproc {
	color: #cc6633
}
.csharpcode .asp {
	background-color: #ffff00
}
.csharpcode .html {
	color: #800000
}
.csharpcode .attr {
	color: #ff0000
}
.csharpcode .alt {
	background-color: #f4f4f4; margin: 0em; width: 100%
}
.csharpcode .lnum {
	color: #606060
}&lt;/style&gt;&lt;style type="text/css"&gt;
.csharpcode {
	background-color: #ffffff; font-family: consolas, "Courier New", courier, monospace; color: black; font-size: small
}
.csharpcode pre {
	background-color: #ffffff; font-family: consolas, "Courier New", courier, monospace; color: black; font-size: small
}
.csharpcode pre {
	margin: 0em
}
.csharpcode .rem {
	color: #008000
}
.csharpcode .kwrd {
	color: #0000ff
}
.csharpcode .str {
	color: #006080
}
.csharpcode .op {
	color: #0000c0
}
.csharpcode .preproc {
	color: #cc6633
}
.csharpcode .asp {
	background-color: #ffff00
}
.csharpcode .html {
	color: #800000
}
.csharpcode .attr {
	color: #ff0000
}
.csharpcode .alt {
	background-color: #f4f4f4; margin: 0em; width: 100%
}
.csharpcode .lnum {
	color: #606060
}&lt;/style&gt;

&lt;h3&gt;Example 3: A Shortcut Menu for Reports&lt;/h3&gt;

&lt;p&gt;The following example creates a shortcut menu named &lt;b&gt;cmdReportRightClick&lt;/b&gt; that contains commands that are useful to use with a report. This example illustrates how to change the &lt;b&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/aa432905.aspx"&gt;Caption&lt;/a&gt;&lt;/b&gt; property of each control as they're added to the shortcut menu.&lt;/p&gt;

&lt;pre class="csharpcode"&gt;&lt;pre class="csharpcode"&gt;&amp;#160;&lt;/pre&gt;&lt;style type="text/css"&gt;.csharpcode {
	background-color: #ffffff; font-family: consolas, "Courier New", courier, monospace; color: black; font-size: small
}
.csharpcode pre {
	background-color: #ffffff; font-family: consolas, "Courier New", courier, monospace; color: black; font-size: small
}
.csharpcode pre {
	margin: 0em
}
.csharpcode .rem {
	color: #008000
}
.csharpcode .kwrd {
	color: #0000ff
}
.csharpcode .str {
	color: #006080
}
.csharpcode .op {
	color: #0000c0
}
.csharpcode .preproc {
	color: #cc6633
}
.csharpcode .asp {
	background-color: #ffff00
}
.csharpcode .html {
	color: #800000
}
.csharpcode .attr {
	color: #ff0000
}
.csharpcode .alt {
	background-color: #f4f4f4; margin: 0em; width: 100%
}
.csharpcode .lnum {
	color: #606060
}
&lt;/style&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;Sub&lt;/span&gt; CreateReportShortcutMenu()
    &lt;span class="kwrd"&gt;Dim&lt;/span&gt; cmbRightClick &lt;span class="kwrd"&gt;As&lt;/span&gt; Office.CommandBar
    &lt;span class="kwrd"&gt;Dim&lt;/span&gt; cmbControl &lt;span class="kwrd"&gt;As&lt;/span&gt; Office.CommandBarControl

    &lt;span class="kwrd"&gt;Set&lt;/span&gt; cmbRightClick = CommandBars.Add(&lt;span class="str"&gt;&amp;quot;cmdReportsRightClick&amp;quot;&lt;/span&gt;, _
                                        msoBarPopup, &lt;span class="kwrd"&gt;False&lt;/span&gt;, &lt;span class="kwrd"&gt;False&lt;/span&gt;)

    &lt;span class="kwrd"&gt;With&lt;/span&gt; cmbRightClick
        
        &lt;span class="rem"&gt;' Add the Print command.&lt;/span&gt;
        &lt;span class="kwrd"&gt;Set&lt;/span&gt; cmbControl = .Controls.Add(msoControlButton, 2521)
        &lt;span class="rem"&gt;' Change the caption displayed for the control.&lt;/span&gt;
        cmbControl.Caption = &lt;span class="str"&gt;&amp;quot;Quick Print&amp;quot;&lt;/span&gt;
        
        &lt;span class="rem"&gt;' Add the Print command.&lt;/span&gt;
        &lt;span class="kwrd"&gt;Set&lt;/span&gt; cmbControl = .Controls.Add(msoControlButton, 15948)
        &lt;span class="rem"&gt;' Change the caption displayed for the control.&lt;/span&gt;
        cmbControl.Caption = &lt;span class="str"&gt;&amp;quot;Select Pages&amp;quot;&lt;/span&gt;
        
        &lt;span class="rem"&gt;' Add the Page Setup... command.&lt;/span&gt;
        &lt;span class="kwrd"&gt;Set&lt;/span&gt; cmbControl = .Controls.Add(msoControlButton, 247)
        &lt;span class="rem"&gt;' Change the caption displayed for the control.&lt;/span&gt;
        cmbControl.Caption = &lt;span class="str"&gt;&amp;quot;Page Setup&amp;quot;&lt;/span&gt;
        
        &lt;span class="rem"&gt;' Add the Mail Recipient (as Attachment)... command.&lt;/span&gt;
        &lt;span class="kwrd"&gt;Set&lt;/span&gt; cmbControl = .Controls.Add(msoControlButton, 2188)
        &lt;span class="rem"&gt;' Start a new group.&lt;/span&gt;
        cmbControl.BeginGroup = &lt;span class="kwrd"&gt;True&lt;/span&gt;
        &lt;span class="rem"&gt;' Change the caption displayed for the control.&lt;/span&gt;
        cmbControl.Caption = &lt;span class="str"&gt;&amp;quot;Email Report as an Attachment&amp;quot;&lt;/span&gt;
        
        &lt;span class="rem"&gt;' Add the PDF or XPS command.&lt;/span&gt;
        &lt;span class="kwrd"&gt;Set&lt;/span&gt; cmbControl = .Controls.Add(msoControlButton, 12499)
        &lt;span class="rem"&gt;' Change the caption displayed for the control.&lt;/span&gt;
        cmbControl.Caption = &lt;span class="str"&gt;&amp;quot;Save as PDF/XPS&amp;quot;&lt;/span&gt;
        
        &lt;span class="rem"&gt;' Add the Close command.&lt;/span&gt;
        &lt;span class="kwrd"&gt;Set&lt;/span&gt; cmbControl = .Controls.Add(msoControlButton, 923)
        &lt;span class="rem"&gt;' Start a new group.&lt;/span&gt;
        cmbControl.BeginGroup = &lt;span class="kwrd"&gt;True&lt;/span&gt;
        &lt;span class="rem"&gt;' Change the caption displayed for the control.&lt;/span&gt;
        cmbControl.Caption = &lt;span class="str"&gt;&amp;quot;Close Report&amp;quot;&lt;/span&gt;
    &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;With&lt;/span&gt;
    
    &lt;span class="kwrd"&gt;Set&lt;/span&gt; cmbControl = &lt;span class="kwrd"&gt;Nothing&lt;/span&gt;
    &lt;span class="kwrd"&gt;Set&lt;/span&gt; cmbRightClick = &lt;span class="kwrd"&gt;Nothing&lt;/span&gt;
&lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Sub&lt;/span&gt;
&lt;/pre&gt;&lt;style type="text/css"&gt;.csharpcode {
	background-color: #ffffff; font-family: consolas, "Courier New", courier, monospace; color: black; font-size: small
}
.csharpcode pre {
	background-color: #ffffff; font-family: consolas, "Courier New", courier, monospace; color: black; font-size: small
}
.csharpcode pre {
	margin: 0em
}
.csharpcode .rem {
	color: #008000
}
.csharpcode .kwrd {
	color: #0000ff
}
.csharpcode .str {
	color: #006080
}
.csharpcode .op {
	color: #0000c0
}
.csharpcode .preproc {
	color: #cc6633
}
.csharpcode .asp {
	background-color: #ffff00
}
.csharpcode .html {
	color: #800000
}
.csharpcode .attr {
	color: #ff0000
}
.csharpcode .alt {
	background-color: #f4f4f4; margin: 0em; width: 100%
}
.csharpcode .lnum {
	color: #606060
}
&lt;/style&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;/pre&gt;

&lt;h3&gt;Displaying the Shortcut Menu&lt;/h3&gt;

&lt;p&gt;By default, a shortcut menu is displayed when the user right-clicks the object that the shortcut menu is assigned to. The problem is, many users do not know that right-clicking their mouse can display a menu.&lt;/p&gt;

&lt;p&gt;You can use the &lt;a href="http://msdn.microsoft.com/en-us/library/aa432173.aspx"&gt;ShowPopup&lt;/a&gt; method to display a shortcut menu when the user clicks on an object. The following example shows how to display the &lt;strong&gt;cmdFormFiltering&lt;/strong&gt; shortcut menu when the user clicks the Command0 button.&lt;/p&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;Private&lt;/span&gt; &lt;span class="kwrd"&gt;Sub&lt;/span&gt; Command0_Click()
    
    &lt;span class="rem"&gt;' Display the shortcut menu when the user clicks the button.&lt;/span&gt;
    Application.CommandBars(&lt;span class="str"&gt;&amp;quot;cmdFormFiltering&amp;quot;&lt;/span&gt;).ShowPopup
    
&lt;span class="kwrd"&gt;End&lt;/span&gt; Sub&lt;/pre&gt;
&lt;style type="text/css"&gt;
.csharpcode {
	background-color: #ffffff; font-family: consolas, "Courier New", courier, monospace; color: black; font-size: small
}
.csharpcode pre {
	background-color: #ffffff; font-family: consolas, "Courier New", courier, monospace; color: black; font-size: small
}
.csharpcode pre {
	margin: 0em
}
.csharpcode .rem {
	color: #008000
}
.csharpcode .kwrd {
	color: #0000ff
}
.csharpcode .str {
	color: #006080
}
.csharpcode .op {
	color: #0000c0
}
.csharpcode .preproc {
	color: #cc6633
}
.csharpcode .asp {
	background-color: #ffff00
}
.csharpcode .html {
	color: #800000
}
.csharpcode .attr {
	color: #ff0000
}
.csharpcode .alt {
	background-color: #f4f4f4; margin: 0em; width: 100%
}
.csharpcode .lnum {
	color: #606060
}&lt;/style&gt;

&lt;h3&gt;How to Discover the IDs to Use&lt;/h3&gt;

&lt;p&gt;In the previous examples, a numeric ID was used to specify the control to the &lt;strong&gt;Add&lt;/strong&gt; method. How do you find the ID to use for the control that you want to add? Access doesn’t provide a built-in method that you can use to find right ID to use.&lt;/p&gt;

&lt;p&gt;The following example shows how to find the right ID to use. The &lt;strong&gt;CreateCommandBarsWithIDs&lt;/strong&gt; function uses &lt;strong&gt;cbShowButtonFaceIds&lt;/strong&gt; function to create four CommandBars, each with 500 controls. &lt;/p&gt;

&lt;p&gt;The CommandBars are displayed on the &lt;strong&gt;Add-Ins&lt;/strong&gt; tab of the Ribbon. The number displayed beside each icon is the ID to use when adding the control to a shortcut menu.&lt;/p&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;Function&lt;/span&gt; CreateCommandBarsWithIDs()
    &lt;span class="kwrd"&gt;Call&lt;/span&gt; cbShowButtonFaceIds(&lt;span class="str"&gt;&amp;quot;CmdIDs_01&amp;quot;&lt;/span&gt;, 1, 500)
    &lt;span class="kwrd"&gt;Call&lt;/span&gt; cbShowButtonFaceIds(&lt;span class="str"&gt;&amp;quot;CmdIDs_02&amp;quot;&lt;/span&gt;, 501, 1000)
    &lt;span class="kwrd"&gt;Call&lt;/span&gt; cbShowButtonFaceIds(&lt;span class="str"&gt;&amp;quot;CmdIDs_03&amp;quot;&lt;/span&gt;, 1001, 1500)
    &lt;span class="kwrd"&gt;Call&lt;/span&gt; cbShowButtonFaceIds(&lt;span class="str"&gt;&amp;quot;CmdIDs_04&amp;quot;&lt;/span&gt;, 1501, 2000)
&lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Function&lt;/span&gt;

&lt;span class="kwrd"&gt;Function&lt;/span&gt; cbShowButtonFaceIds(strName &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;String&lt;/span&gt;, _
                             lngIDStart &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;Long&lt;/span&gt;, _
                             lngIDStop &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;Long&lt;/span&gt;)

    &lt;span class="kwrd"&gt;Dim&lt;/span&gt; cbrNewToolBar &lt;span class="kwrd"&gt;As&lt;/span&gt; CommandBar
    &lt;span class="kwrd"&gt;Dim&lt;/span&gt; cmdNewButton &lt;span class="kwrd"&gt;As&lt;/span&gt; CommandBarButton
    &lt;span class="kwrd"&gt;Dim&lt;/span&gt; intCntr &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;Integer&lt;/span&gt;

    &lt;span class="kwrd"&gt;On&lt;/span&gt; &lt;span class="kwrd"&gt;Error&lt;/span&gt; &lt;span class="kwrd"&gt;Resume&lt;/span&gt; &lt;span class="kwrd"&gt;Next&lt;/span&gt;

    &lt;span class="rem"&gt;' Delete the CommandBar if it already exists.&lt;/span&gt;
    Application.CommandBars(strName).Delete

    &lt;span class="rem"&gt;' Create the CommandBar.&lt;/span&gt;
    &lt;span class="kwrd"&gt;Set&lt;/span&gt; cbrNewToolBar = Application.CommandBars.Add( _
                      Name:=strName, temporary:=&lt;span class="kwrd"&gt;True&lt;/span&gt;)

    &lt;span class="rem"&gt;' Loop through the IDs.&lt;/span&gt;
    &lt;span class="kwrd"&gt;For&lt;/span&gt; intCntr = lngIDStart &lt;span class="kwrd"&gt;To&lt;/span&gt; lngIDStop
        &lt;span class="rem"&gt;' Create a new button for each ID.&lt;/span&gt;
        &lt;span class="kwrd"&gt;Set&lt;/span&gt; cmdNewButton = cbrNewToolBar.Controls.Add( _
                         Type:=msoControlButton)

        &lt;span class="kwrd"&gt;With&lt;/span&gt; cmdNewButton
            .FaceId = intCntr
            .TooltipText = &lt;span class="str"&gt;&amp;quot;Faceid= &amp;quot;&lt;/span&gt; &amp;amp; intCntr
            .Caption = intCntr
            .Style = msoButtonIconAndCaptionBelow
        &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;With&lt;/span&gt;

        &lt;span class="rem"&gt;' This takes awhile to run. Display a count&lt;/span&gt;
        &lt;span class="rem"&gt;' to indicate progress.&lt;/span&gt;
        Debug.Print intCntr &amp;amp; &lt;span class="str"&gt;&amp;quot; of &amp;quot;&lt;/span&gt; &amp;amp; lngIDStop
    &lt;span class="kwrd"&gt;Next&lt;/span&gt; intCntr

    &lt;span class="rem"&gt;' Display the new CommandBar.&lt;/span&gt;
    &lt;span class="kwrd"&gt;With&lt;/span&gt; cbrNewToolBar
        .Width = 600
        .Left = 100
        .Top = 200
        .Visible = &lt;span class="kwrd"&gt;True&lt;/span&gt;
    &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;With&lt;/span&gt;

    &lt;span class="kwrd"&gt;Set&lt;/span&gt; cbrNewToolBar = &lt;span class="kwrd"&gt;Nothing&lt;/span&gt;
    &lt;span class="kwrd"&gt;Set&lt;/span&gt; cmdNewButton = &lt;span class="kwrd"&gt;Nothing&lt;/span&gt;
&lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Function&lt;/span&gt;&lt;/pre&gt;
&lt;style type="text/css"&gt;
.csharpcode {
	background-color: #ffffff; font-family: consolas, "Courier New", courier, monospace; color: black; font-size: small
}
.csharpcode pre {
	background-color: #ffffff; font-family: consolas, "Courier New", courier, monospace; color: black; font-size: small
}
.csharpcode pre {
	margin: 0em
}
.csharpcode .rem {
	color: #008000
}
.csharpcode .kwrd {
	color: #0000ff
}
.csharpcode .str {
	color: #006080
}
.csharpcode .op {
	color: #0000c0
}
.csharpcode .preproc {
	color: #cc6633
}
.csharpcode .asp {
	background-color: #ffff00
}
.csharpcode .html {
	color: #800000
}
.csharpcode .attr {
	color: #ff0000
}
.csharpcode .alt {
	background-color: #f4f4f4; margin: 0em; width: 100%
}
.csharpcode .lnum {
	color: #606060
}&lt;/style&gt;&lt;font face="Courier New"&gt;&lt;/font&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9633085" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/access/archive/tags/Access+2007/default.aspx">Access 2007</category><category domain="http://blogs.msdn.com/access/archive/tags/Report/default.aspx">Report</category><category domain="http://blogs.msdn.com/access/archive/tags/User+Interface/default.aspx">User Interface</category><category domain="http://blogs.msdn.com/access/archive/tags/Form/default.aspx">Form</category><category domain="http://blogs.msdn.com/access/archive/tags/Code/default.aspx">Code</category><category domain="http://blogs.msdn.com/access/archive/tags/Power+Tips/default.aspx">Power Tips</category></item><item><title>Access 2007 and Runtime SP2 now available</title><link>http://blogs.msdn.com/access/archive/2009/04/29/access-2007-and-runtime-sp2-now-available.aspx</link><pubDate>Thu, 30 Apr 2009 03:45:19 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9577532</guid><dc:creator>Ryan McMinn</dc:creator><slash:comments>43</slash:comments><comments>http://blogs.msdn.com/access/comments/9577532.aspx</comments><wfw:commentRss>http://blogs.msdn.com/access/commentrss.aspx?PostID=9577532</wfw:commentRss><description>&lt;p&gt;   &lt;p&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=D9AE78D9-9DC6-4B38-9FA6-2C745A175AED&amp;amp;displaylang=en"&gt;&lt;/a&gt;&lt;/p&gt; Highlights&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;The ability to export reports to Excel has been added. &lt;/li&gt;    &lt;li&gt;Fixes for issues with the import data wizards, report printing and previewing, macros, Excel integration, and date filters. &lt;/li&gt;    &lt;li&gt;Updates to Access Developer Extensions and Access Runtime are updated for SP2 and are available in all supported languages. The ADE is patched with the full Office Suite patch, while the Access Runtime is in a separate patch. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;strong&gt;More Access Runtime info&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;This version of the Access 2007 Runtime contains the same version of files as Office 2007 Service Pack 2 (SP2). For additional information about Microsoft Office Access 2007 Runtime Service Pack 2, click the following article number to view the article in the Microsoft Knowledge Base: &lt;a href="http://support.microsoft.com/default.aspx?scid=kb;EN-US;957262"&gt;957262&lt;/a&gt; Description of the Microsoft Office Access 2007 Runtime Service Pack 2. &lt;/p&gt;  &lt;p&gt;Also, the international versions of the Runtime are also available; except the Italian version which will be available in a couple of days. We will announce it on the blog. Enjoy!&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=b444bf18-79ea-46c6-8a81-9db49b4ab6e5&amp;amp;displaylang=en"&gt;Download: Microsoft Office Suite Service Pack 2&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=6F4EDEED-D83F-4C31-AE67-458AE365D420&amp;amp;displaylang=en"&gt;Download: Update for Access Runtime and Data Connectivity 2007 Service Pack 2&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=D9AE78D9-9DC6-4B38-9FA6-2C745A175AED&amp;amp;displaylang=en"&gt;Download: Full Access SP2 Runtime&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Here is a &lt;a href="http://blogs.technet.com/office_sustained_engineering/default.aspx"&gt;link&lt;/a&gt; for info on all the fixes across office.&lt;/p&gt;  &lt;p&gt;Please install SP2 and send us your feedback.&lt;/p&gt;  &lt;p&gt;   &lt;p&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=D9AE78D9-9DC6-4B38-9FA6-2C745A175AED&amp;amp;displaylang=en"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9577532" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/access/archive/tags/Access+2007/default.aspx">Access 2007</category></item><item><title>Access 2007 SP2 due to ship April 28th</title><link>http://blogs.msdn.com/access/archive/2009/04/24/access-2007-sp2-due-to-ship-april-28th.aspx</link><pubDate>Sat, 25 Apr 2009 03:21:05 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9567545</guid><dc:creator>Clint Covington</dc:creator><slash:comments>23</slash:comments><comments>http://blogs.msdn.com/access/comments/9567545.aspx</comments><wfw:commentRss>http://blogs.msdn.com/access/commentrss.aspx?PostID=9567545</wfw:commentRss><description>&lt;p&gt;The Office Sustained Engineering team has announced the &lt;a href="http://blogs.technet.com/office_sustained_engineering/archive/2009/04/16/service-pack-2-for-the-2007-microsoft-office-system-due-to-ship-april-28th.aspx"&gt;official ship date&lt;/a&gt;. Highlights for Access include:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;The ability to export reports to Excel has been added.&lt;/li&gt;    &lt;li&gt;Fixes for issues with the import data wizards, report printing and previewing, macros, Excel integration, and date filters.&lt;/li&gt;    &lt;li&gt;Updates to Access Developer Extensions and runtime (including as a patch) are now included in SP2. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;We will have a complete list of fixes available on the 28th.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9567545" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/access/archive/tags/Access+2007/default.aspx">Access 2007</category></item><item><title>Template demonstrates how to synchronize combo boxes</title><link>http://blogs.msdn.com/access/archive/2009/04/03/template-demonstrates-how-to-synchronize-combo-boxes.aspx</link><pubDate>Fri, 03 Apr 2009 04:54:20 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9530037</guid><dc:creator>accblog</dc:creator><slash:comments>5</slash:comments><comments>http://blogs.msdn.com/access/comments/9530037.aspx</comments><wfw:commentRss>http://blogs.msdn.com/access/commentrss.aspx?PostID=9530037</wfw:commentRss><description>&lt;p&gt;You can download a template for Access 2007 that demonstrates how to synchronize two combo boxes. For example, say you choose a category from one combo box, and you want a second combo box to only display products within that category. The template shows you how to make it happen.&lt;/p&gt;  &lt;p&gt;On the Getting Started page of Access, click &lt;strong&gt;Sample&lt;/strong&gt; in the left pane, and then click &lt;strong&gt;How to synchronize combo boxes&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/accesspower/WindowsLiveWriter/Newtemplatedemonstrateshowtosynchronizec_D71B/image_2.png"&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/accesspower/WindowsLiveWriter/Newtemplatedemonstrateshowtosynchronizec_D71B/image_thumb.png" width="459" height="341" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Click &lt;strong&gt;Download&lt;/strong&gt;, and Access launches the template. The template contains all the instructions you need to set up combo boxes of your own, whether you want to use VBA code or macros.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/accesspower/WindowsLiveWriter/Newtemplatedemonstrateshowtosynchronizec_D71B/image_4.png"&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/accesspower/WindowsLiveWriter/Newtemplatedemonstrateshowtosynchronizec_D71B/image_thumb_1.png" width="487" height="229" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;You can also download the template via Office Online &lt;a href="http://office.microsoft.com/en-us/templates/TC102880861033.aspx"&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9530037" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/access/archive/tags/Access+2007/default.aspx">Access 2007</category><category domain="http://blogs.msdn.com/access/archive/tags/Template/default.aspx">Template</category><category domain="http://blogs.msdn.com/access/archive/tags/User+Interface/default.aspx">User Interface</category><category domain="http://blogs.msdn.com/access/archive/tags/Form/default.aspx">Form</category><category domain="http://blogs.msdn.com/access/archive/tags/Power+Tips/default.aspx">Power Tips</category></item><item><title>Accessing external data using the IN clause</title><link>http://blogs.msdn.com/access/archive/2009/03/27/accessing-external-data-using-the-in-clause.aspx</link><pubDate>Fri, 27 Mar 2009 13:36:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9510012</guid><dc:creator>robcooper</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/access/comments/9510012.aspx</comments><wfw:commentRss>http://blogs.msdn.com/access/commentrss.aspx?PostID=9510012</wfw:commentRss><description>&lt;P&gt;Someone sent us a question the other day about one of my favorite dark corners in Access and we thought it might be interesting to dive into this area a little.&lt;/P&gt;
&lt;P&gt;Microsoft Access SQL supports two uses of the IN keyword. The most commonly used case is as part of the WHERE clause of a SQL statement to provide a list of values used as criteria. Using the Customers table in the Northwind 2007 sample database as an example, this might look something like:&lt;/P&gt;&lt;PRE class=csharpcode&gt;&lt;SPAN class=kwrd&gt;SELECT&lt;/SPAN&gt; [&lt;SPAN class=kwrd&gt;First&lt;/SPAN&gt; Name], [&lt;SPAN class=kwrd&gt;Last&lt;/SPAN&gt; Name], [&lt;SPAN class=kwrd&gt;State&lt;/SPAN&gt;/Province]
&lt;SPAN class=kwrd&gt;FROM&lt;/SPAN&gt; [Customers]
&lt;SPAN class=kwrd&gt;WHERE&lt;/SPAN&gt; [&lt;SPAN class=kwrd&gt;State&lt;/SPAN&gt;/Province] &lt;SPAN class=kwrd&gt;IN&lt;/SPAN&gt; (&lt;SPAN class=str&gt;'WA'&lt;/SPAN&gt;, &lt;SPAN class=str&gt;'CA'&lt;/SPAN&gt;, &lt;SPAN class=str&gt;'NY'&lt;/SPAN&gt;)&lt;/PRE&gt;
&lt;P&gt;This query returns the names of customers that live in WA, CA, or NY. This keyword provides a nice alternative to the OR clause which would require repeating the field name.&lt;/P&gt;
&lt;P&gt;The other use of the IN keyword is as part of the SELECT statement or FROM clause, and is called the &lt;A href="http://msdn.microsoft.com/en-us/library/bb177907.aspx" mce_href="http://msdn.microsoft.com/en-us/library/bb177907.aspx"&gt;IN clause&lt;/A&gt;. The IN clause is used to access external data, and can be used in place of linked tables. For example, let's say that you had a SQL Server database that is used as part of an application, but you don't want to maintain a DSN to connect. You could use the IN clause in a query that uses a DSN-less connection to quickly read data from the external table. For example:&lt;/P&gt;&lt;PRE class=csharpcode&gt;&lt;SPAN class=kwrd&gt;SELECT&lt;/SPAN&gt; * &lt;SPAN class=kwrd&gt;FROM&lt;/SPAN&gt; ExternalTable
&lt;SPAN class=kwrd&gt;IN&lt;/SPAN&gt; &lt;SPAN class=str&gt;''&lt;/SPAN&gt; [ODBC;Driver={&lt;SPAN class=kwrd&gt;SQL&lt;/SPAN&gt; Server}; Server=ServerName; &lt;SPAN class=kwrd&gt;Database&lt;/SPAN&gt;=DatabaseName; Trusted_Connection=Yes]&lt;/PRE&gt;
&lt;P&gt;It is possible to create a linked table that uses a DSN-less connection, but creating the table requires code. Also, unlike a SQL pass-through query, this query is executed by the Access database engine which means that the resultset may also be updateable. Furthermore, there is a certain simplicity or elegance about this technique that I think is cool. Incidentally, there is another syntax for the IN clause, but I prefer this one.&lt;/P&gt;
&lt;P&gt;So far so good, but since the IN clause is part of the FROM clause of a query, it can also be used other places where the FROM clause can be used. For example, in a make table query to create a local copy of data in an external table:&lt;/P&gt;&lt;PRE class=csharpcode&gt;&lt;SPAN class=kwrd&gt;SELECT&lt;/SPAN&gt; * &lt;SPAN class=kwrd&gt;INTO&lt;/SPAN&gt; LocalTable
&lt;SPAN class=kwrd&gt;FROM&lt;/SPAN&gt; SourceTable
&lt;SPAN class=kwrd&gt;IN&lt;/SPAN&gt; &lt;SPAN class=str&gt;''&lt;/SPAN&gt; [ODBC;Driver={&lt;SPAN class=kwrd&gt;SQL&lt;/SPAN&gt; Server}; Server=ServerName; &lt;SPAN class=kwrd&gt;Database&lt;/SPAN&gt;=D&lt;SPAN class=kwrd&gt;atabaseName&lt;/SPAN&gt;; Trusted_Connection=Yes]&lt;/PRE&gt;
&lt;P&gt;Or, in an append query using the INSERT...INTO statement to move data from the local database into another database. Note that the connection string used in this example is to another Access database.&lt;/P&gt;&lt;PRE class=csharpcode&gt;INSERT &lt;SPAN class=kwrd&gt;INTO&lt;/SPAN&gt; DestinationTable (DestinationField)
&lt;SPAN class=kwrd&gt;IN&lt;/SPAN&gt; &lt;SPAN class=str&gt;''&lt;/SPAN&gt; [;&lt;SPAN class=kwrd&gt;DATABASE&lt;/SPAN&gt;= C:\Users\Rob\Documents\Northwind 2007.accdb]
&lt;SPAN class=kwrd&gt;SELECT&lt;/SPAN&gt; SourceField &lt;SPAN class=kwrd&gt;FROM&lt;/SPAN&gt; SourceTable&lt;/PRE&gt;
&lt;P&gt;You could even use an append query with multiple IN clauses to concatenate two text files:&lt;/P&gt;&lt;PRE class=csharpcode&gt;INSERT INTO [File2.txt] (Field1)&lt;BR&gt;IN '' [TEXT; FMT=Delimited; HDR=YES; DATABASE= C:\Users\Rob\Documents;TABLE=File2.txt]&lt;BR&gt;SELECT Field1&lt;BR&gt;FROM [File1.txt]&lt;BR&gt;IN '' [TEXT; FMT=Delimited; HDR=YES; DATABASE= c:\Users\Rob\Documents;TABLE=File1.txt];&lt;BR&gt;&lt;/PRE&gt;
&lt;P&gt;These are just a few examples of how you could use the IN clause to quickly work with external data. By using different connection strings for the external data sources, you could do some pretty cool stuff.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9510012" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/access/archive/tags/Access+2007/default.aspx">Access 2007</category><category domain="http://blogs.msdn.com/access/archive/tags/Engine/default.aspx">Engine</category><category domain="http://blogs.msdn.com/access/archive/tags/Code/default.aspx">Code</category><category domain="http://blogs.msdn.com/access/archive/tags/Access+2003/default.aspx">Access 2003</category><category domain="http://blogs.msdn.com/access/archive/tags/Power+Tips/default.aspx">Power Tips</category></item><item><title>Paste from Excel hotfix available</title><link>http://blogs.msdn.com/access/archive/2009/03/18/paste-from-excel-hot-fix-available.aspx</link><pubDate>Wed, 18 Mar 2009 16:56:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9486877</guid><dc:creator>Clint Covington</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/access/comments/9486877.aspx</comments><wfw:commentRss>http://blogs.msdn.com/access/commentrss.aspx?PostID=9486877</wfw:commentRss><description>&lt;p&gt;in mid December an Excel security fix (MS08-074) broke paste from Excel inside Access. Users would get the following error message:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;i&gt;The data on the Clipboard is damaged, so Microsoft Office Access can't paste it. There may be an error in the Clipboard, or there may not be enough free memory. Try the operation again.&lt;/i&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;There is a &lt;a mce_href="http://support.microsoft.com/kb/967699/" href="http://support.microsoft.com/kb/967699/"&gt;hot fix&lt;/a&gt; now available that will fix the issue. Luke Chung has written about how you can &lt;a mce_href="http://www.fmsinc.com/MicrosoftAccess/Errors/ExcelPaste/Clipboard.html" href="http://www.fmsinc.com/MicrosoftAccess/Errors/ExcelPaste/Clipboard.html"&gt;work around the issue&lt;/a&gt; if you don’t have permissions to install the hot fix.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9486877" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/access/archive/tags/Access+2007/default.aspx">Access 2007</category></item><item><title>Automate data collection forms using VBA</title><link>http://blogs.msdn.com/access/archive/2009/02/09/automate-data-collection-forms-using-vba.aspx</link><pubDate>Tue, 10 Feb 2009 09:00:47 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9409984</guid><dc:creator>Clint Covington</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/access/comments/9409984.aspx</comments><wfw:commentRss>http://blogs.msdn.com/access/commentrss.aspx?PostID=9409984</wfw:commentRss><description>&lt;p&gt;Access 2007 has a nifty feature that allows you to &lt;a href="http://office.microsoft.com/en-us/access/HA100154271033.aspx"&gt;collect data via email&lt;/a&gt;. Recently, I got the following question from a user:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Is there any way to automate the creation, sending and receiving of Emails through the Data Collection capability of A07 using VBA?&amp;#160; The wizard is too complex for the users I am working with.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Here is the reply we got from the developer—it isn’t for the faint at heart… &lt;/p&gt;  &lt;p&gt;There isn’t a straight-forward way to do this and it isn’t officially supported. It’s possible if you don’t mind a little reverse engineering… The key is that there are two places Data Collection uses to do its work.&amp;#160; One is in a system table inside Access used to store information about the action, and the other is an XML file that Outlook uses when mails are received to identify Data Collection mails and associated databases.&lt;/p&gt;  &lt;p&gt;The system table is called &lt;b&gt;MSysDataCollection&lt;/b&gt;.&amp;#160; There’s one entry for each data collection action that’s created in the database.&amp;#160; A quick rundown of the fields:&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Active&lt;/b&gt; – Controls whether the current Data Collection action should be run.    &lt;br /&gt;&lt;b&gt;BasedOnType&lt;/b&gt; – This marks whether the data collection is based on a query or a table    &lt;br /&gt;&lt;b&gt;CreatedDate&lt;/b&gt; – When was the data collection action originally started.    &lt;br /&gt;&lt;b&gt;ExternalID&lt;/b&gt; – A unique GUID to identify the Data Collection action    &lt;br /&gt;&lt;b&gt;FormName&lt;/b&gt; – Name of the form; appears in the e-mail subject    &lt;br /&gt;&lt;b&gt;InfoPathForm&lt;/b&gt; – True if we sent out an InfoPath form, false if it was HTML    &lt;br /&gt;&lt;b&gt;Mapping&lt;/b&gt; – An XML chunk that defines how fields in the table/query map to fields in the form.&amp;#160; Your best bet is to create a few Data Collection actions similar to ones your users might create, and mimic the XML.&amp;#160; Here’s some of the interesting bits&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&amp;lt;formProperties&amp;gt; stores most of the properties found in the Options dialog of the Data Collection Wizard&lt;/li&gt;    &lt;li&gt;&amp;lt;tables&amp;gt;, despite the name, only supports one table.&amp;#160; This section stores the database column name to the form field name mapping.&lt;/li&gt;    &lt;li&gt;&amp;lt;table&amp;gt;’s name attribute should always be “table1”, accessTable is the table name inside Access, and collectionType is either “insert” or “update”&lt;/li&gt;    &lt;li&gt;&amp;lt;iterate&amp;gt; points to where in the InfoPath/HTML form we’re looking for data (as opposed to formatting, etc.).&amp;#160; This doesn’t change much.&lt;/li&gt;    &lt;li&gt; There will be one &amp;lt;mapitem&amp;gt; for each column in your form, including hidden fields.&amp;#160; formNode is for the form, and is always “table1fieldX”, tableCell is for the Access table&lt;/li&gt;    &lt;li&gt;The &amp;lt;recipients&amp;gt; tag stores who we sent the mail to, in case we want to only accept certain people’s responses, or limit how many times, or what rows, they can update.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;b&gt;OutlookFolder&lt;/b&gt; – This is the Outlook item ID of the Outlook folder replies should be moved to when processed.    &lt;br /&gt;&lt;b&gt;SentDate&lt;/b&gt; – The last time this data collection item was mailed out (updated through the Resend feature).&lt;/p&gt;  &lt;p&gt;The other bit is the XML file for Outlook, and lives in &amp;lt;AppData&amp;gt;\Microsoft\Access.&amp;#160; It’s called &lt;b&gt;AccessDCActionFile.xml&lt;/b&gt;.&amp;#160; There’s only one file for a given user on a machine, and each Data Collection action gets added to the same file.&amp;#160; Again, the easiest way to understand the file is to create a few actions and see what we write out, but here’s some highlights:&lt;/p&gt;  &lt;p&gt;&lt;b&gt;&amp;lt;outlookFolders&amp;gt;&lt;/b&gt; - Stores the Outlook ID for the default Data Collection folders in Outlook.    &lt;br /&gt;&lt;b&gt;&amp;lt;mdbMap&amp;gt;&lt;/b&gt; - Each data collection action gets one &amp;lt;form&amp;gt; tag under here.    &lt;br /&gt;&lt;b&gt;&amp;lt;form&amp;gt;&lt;/b&gt; - id is the GUID that matches the External ID in MSysDataCollection, moveToFolder matches OutlookFolder, and FormType is “HTML” or “InfoPath”    &lt;br /&gt;&lt;b&gt;&amp;lt;path&amp;gt;&lt;/b&gt; - path to the database    &lt;br /&gt;&lt;b&gt;&amp;lt;userReply&amp;gt;&lt;/b&gt; - This tracks whether the user who sent the Data Collection e-mails has replied to it themselves.    &lt;br /&gt;&amp;lt;&lt;b&gt;formProperties&amp;gt;&lt;/b&gt; - Pretty much a copy of what’s in the system table’s Mapping section.&amp;#160; By having it here, we don’t have to grab it from Access every time we need it.    &lt;br /&gt;&amp;lt;&lt;b&gt;lastShutdown&amp;gt;&lt;/b&gt; - The last time Outlook was shut down.&lt;/p&gt;  &lt;p&gt;Lastly, you have to actually generate the HTML or InfoPath form.&amp;#160; We do this by manually building the HTML or XML for the forms.&amp;#160; I’d recommend cracking open some Data Collection forms, looking for the nodes and GUIDs stored in the HTML or XML, and recreating them that way.&amp;#160; I don’t have a more convenient way to do this, and it’s probably the hardest part to get right.&lt;/p&gt;  &lt;p&gt;With this info in hand, you can do the follow to create a Data Collection action through automation:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Collect whatever information from the user you need (recipients, options, etc.)&lt;/li&gt;    &lt;li&gt;Add a row to MSysDataCollection&lt;/li&gt;    &lt;li&gt;Add a &amp;lt;form&amp;gt; entry to AccessDCActionFile.xml&lt;/li&gt;    &lt;li&gt;Create the HTML/XML mail.&lt;/li&gt;    &lt;li&gt;Use Outlook’s OM to send the e-mails.&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;The client version of Outlook does need to run in order to receive and process e-mails, but this will get the data collection action created and running.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9409984" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/access/archive/tags/Access+2007/default.aspx">Access 2007</category><category domain="http://blogs.msdn.com/access/archive/tags/Data+Collection/default.aspx">Data Collection</category></item><item><title>Access Developer Extensions 2007 Updates</title><link>http://blogs.msdn.com/access/archive/2009/01/20/access-developer-extensions-2007-updates.aspx</link><pubDate>Wed, 21 Jan 2009 01:08:22 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9351610</guid><dc:creator>Ryan McMinn</dc:creator><slash:comments>9</slash:comments><comments>http://blogs.msdn.com/access/comments/9351610.aspx</comments><wfw:commentRss>http://blogs.msdn.com/access/commentrss.aspx?PostID=9351610</wfw:commentRss><description>&lt;p&gt;Access Developer Extensions 2007 has been updated and is now live on Microsoft.com. Here is a link - &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=d96a8358-ece4-4bee-a844-f81856dceb67&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyID=d96a8358-ece4-4bee-a844-f81856dceb67&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Highlights of the updates:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;b&gt;Package Solution Wizard&lt;/b&gt;       &lt;br /&gt;A wizard that creates a Windows Installer Package (MSI) to install your database and any supporting files and optionally includes the Access 2007 Runtime, or prompts the user to download the Access 2007 Runtime.       &lt;ul&gt;       &lt;li&gt;Updated for packaging databases with international character file names.&amp;#160; Some surrogate Unicode characters are not supported due to MSI technology limitations &lt;/li&gt;        &lt;li&gt;Bug fix: Repairing an package install to a custom location will correctly install to the original user-specified location. &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;&lt;b&gt;Source Code Control&lt;/b&gt;       &lt;br /&gt;Integration with Microsoft Visual SourceSafe or other source code control systems to allow check-in/check-out of queries, forms, reports, macros, modules, and data. You can also see the differences that have been made to your checked out objects.       &lt;ul&gt;       &lt;li&gt;This is the first release of the ADE that ships the source code control components in additional languages beyond English, Japanese, French and German. &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;&lt;b&gt;Save As Template&lt;/b&gt;       &lt;br /&gt;Enables you to create database templates (ACCDTs) that can be featured in the Access 2007 Getting Started screen. &lt;/li&gt;    &lt;li&gt;&lt;b&gt;ADE 2007 now available in additional Languages &lt;/b&gt;      &lt;br /&gt;Chinese (Traditional), Chinese (Simplified), Korean, Japanese, Spanish, French, Italian and German. &lt;/li&gt; &lt;/ul&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9351610" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/access/archive/tags/Access+2007/default.aspx">Access 2007</category><category domain="http://blogs.msdn.com/access/archive/tags/Download/default.aspx">Download</category><category domain="http://blogs.msdn.com/access/archive/tags/Developer+Extensions/default.aspx">Developer Extensions</category><category domain="http://blogs.msdn.com/access/archive/tags/Runtime/default.aspx">Runtime</category></item><item><title>A new hot fix for Access 2007 is now available</title><link>http://blogs.msdn.com/access/archive/2008/12/30/a-new-hot-fix-for-access-2007-is-now-available.aspx</link><pubDate>Tue, 30 Dec 2008 21:06:42 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9257397</guid><dc:creator>Clint Covington</dc:creator><slash:comments>4</slash:comments><comments>http://blogs.msdn.com/access/comments/9257397.aspx</comments><wfw:commentRss>http://blogs.msdn.com/access/commentrss.aspx?PostID=9257397</wfw:commentRss><description>&lt;p&gt;Issues fixed include:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;You experience slower performance than you did in previous versions when you share a database file over a network.&lt;/li&gt;    &lt;li&gt;You may notice your database file increase in increments of 4 KB&amp;#160; without any user interaction when the database is open. &lt;/li&gt;    &lt;li&gt;You may see a sub-form become blank after you set the main form’s recordset. You may also receive the following error: “Run-time error 2467 – The expression you entered does not exist”.&lt;/li&gt;    &lt;li&gt;When you make a change in a code module in an Access 2007 database under source code control, the changes are not saved if you do the following: &lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;Close the Visual Basic Editor without saving the changes&lt;/li&gt;      &lt;li&gt;Check the Object back in&lt;/li&gt;      &lt;li&gt;Use the Get Last Version feature to view the latest changes.&lt;/li&gt;   &lt;/ul&gt; &lt;/ul&gt;  &lt;p&gt;These fixes are available at &lt;a href="http://support.microsoft.com/kb/960307"&gt;http://support.microsoft.com/kb/960307&lt;/a&gt;. &lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9257397" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/access/archive/tags/Access+2007/default.aspx">Access 2007</category></item><item><title>Built-in Tab Names in Access Ribbons</title><link>http://blogs.msdn.com/access/archive/2008/12/09/built-in-tab-names-in-access-ribbons.aspx</link><pubDate>Wed, 10 Dec 2008 08:16:04 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9189351</guid><dc:creator>robcooper</dc:creator><slash:comments>5</slash:comments><comments>http://blogs.msdn.com/access/comments/9189351.aspx</comments><wfw:commentRss>http://blogs.msdn.com/access/commentrss.aspx?PostID=9189351</wfw:commentRss><description>&lt;p&gt;If you've tried to create a Ribbon customization that included one of the built-in controls in Access you've probably seen that you can use the Customize page in the Access Options dialog to get the names of groups and controls. You can also &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=4329d9e9-4d11-46a5-898d-23e4f331e9ae&amp;amp;displaylang=en"&gt;download&lt;/a&gt; the entire list of controls from the Microsoft web site. Unfortunately, the dialog does not include the list of built-in tabs.&lt;/p&gt;  &lt;p&gt;For simplicity, here is the list of built-in tabs taken from this list:&lt;/p&gt; TabPrintPreviewAccess  &lt;br /&gt;TabHomeAccess  &lt;br /&gt;TabCreate  &lt;br /&gt;TabExternalData  &lt;br /&gt;TabDatabaseTools  &lt;br /&gt;TabSourceControl  &lt;br /&gt;TabAddIns  &lt;br /&gt;TabFormToolsFormatting  &lt;br /&gt;TabControlLayout  &lt;br /&gt;TabFormToolsDesign  &lt;br /&gt;TabFormToolsLayout  &lt;br /&gt;TabReportToolsFormatting  &lt;br /&gt;TabReportToolsLayout  &lt;br /&gt;TabReportToolsPageSetupLayout  &lt;br /&gt;TabReportToolsDesign  &lt;br /&gt;TabReportToolsAlignment  &lt;br /&gt;TabReportToolsPageSetupDesign  &lt;br /&gt;TabRelationshipToolsDesign  &lt;br /&gt;TabQueryToolsDesign  &lt;br /&gt;TabMacroToolsDesign  &lt;br /&gt;TabPivotTableDesign  &lt;br /&gt;TabPivotChartDesign  &lt;br /&gt;TabTableToolsDatasheet  &lt;br /&gt;TabTableToolsDesignAccess  &lt;br /&gt;TabAdpFunctionAndViewToolsDesign  &lt;br /&gt;TabAdpStoredProcedureToolsDesign  &lt;br /&gt;TabAdpSqlStatementDesign  &lt;br /&gt;TabAdpDiagramDesign  &lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9189351" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/access/archive/tags/Access+2007/default.aspx">Access 2007</category><category domain="http://blogs.msdn.com/access/archive/tags/Ribbon/default.aspx">Ribbon</category><category domain="http://blogs.msdn.com/access/archive/tags/User+Interface/default.aspx">User Interface</category><category domain="http://blogs.msdn.com/access/archive/tags/Code/default.aspx">Code</category></item><item><title>Total Access Analyzer 2007 Preview</title><link>http://blogs.msdn.com/access/archive/2008/08/28/total-access-analyzer-2007-preview.aspx</link><pubDate>Thu, 28 Aug 2008 22:21:44 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8903979</guid><dc:creator>robcooper</dc:creator><slash:comments>13</slash:comments><comments>http://blogs.msdn.com/access/comments/8903979.aspx</comments><wfw:commentRss>http://blogs.msdn.com/access/commentrss.aspx?PostID=8903979</wfw:commentRss><description>&lt;p&gt;One thing about being on the Access team that I enjoy is seeing some of the great work being done in the Access community. Among the forefront of this community is &lt;a href="http://www.fmsinc.com/"&gt;FMS&lt;/a&gt;, who is the leading developer of Access add-ins. FMS recently announced a preview version of Total Access Analyzer 2007 which is a tool that helps you create better Access databases. There are too many new features to list here, but here is a small subset that might be interesting to note:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Support for the .ACCDB file format added in Access 2007&lt;/li&gt;    &lt;li&gt;Analysis of new macro actions including embedded macros&lt;/li&gt;    &lt;li&gt;24 new reports!&lt;/li&gt;    &lt;li&gt;Reports can now be viewed in Report View which provides an interactive experience for reports&lt;/li&gt;    &lt;li&gt;Reports can be exported to PDF&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Here's a link to the preview:&lt;/p&gt;  &lt;p&gt;&lt;a title="http://www.fmsinc.com/Products/analyzer/confprvw.asp" href="http://www.fmsinc.com/Products/analyzer/confprvw.asp"&gt;http://www.fmsinc.com/Products/analyzer/confprvw.asp&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Enjoy!&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8903979" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/access/archive/tags/Community/default.aspx">Community</category><category domain="http://blogs.msdn.com/access/archive/tags/Access+2007/default.aspx">Access 2007</category><category domain="http://blogs.msdn.com/access/archive/tags/Tools/default.aspx">Tools</category></item></channel></rss>