您输入的表达式对属性Visible(Access.Application)的引用无效

时间:2019-01-23 22:05:20

标签: c# .net ms-access

当我使用Interaction.CreateObject(“ Access.Application”)创建Access应用程序的COM对象实例时,便能够“使用Access的所有功能”,如设置.Visible = true或.UserControl = true,但是当我使用EXE文件启动Access,然后使用Interaction.GetObject(null,“ Access.Application”)尝试将Access实例附加到Access实例时,无法执行.Visible = true或.UserControl =正确,因为它会引发错误,说:您输入的表达式对属性Visible的引用无效

我不知道发生了什么。我试图在Internet上搜索一些相关内容,但没有发现任何有用的信息。

无论如何,这是我正在测试的代码:

using System;
using System.Threading;
using Microsoft.VisualBasic;

namespace Test1
{
    class Program
    {
        const string TEST_DB_PATH = @"C:\Users\Administrator\Documents\db1.accdb";

        public static void Main(string[] args)
        {
            dynamic accessApp = null;
            try {
                accessApp = Interaction.GetObject(null, "Access.Application");
            } catch (Exception e) {
                accessApp = Interaction.CreateObject("Access.Application");
            }

            Console.WriteLine("accessApp: " + accessApp);
            Console.WriteLine("Version: " + accessApp.Version);

            accessApp.Visible = true;
            accessApp.OpenCurrentDatabase(TEST_DB_PATH);
            Thread.Sleep(750);
            accessApp.CloseCurrentDatabase();
            accessApp.Quit();

            /*
            Console.Write("Press any key to continue . . . ");
            Console.ReadKey(true);
            */
        }
    }
}

如上所述,当我使用CreateObject创建Access的新实例时,一切正常。使用GetObject COM对象,我可以执行OpenCurrentDatabase,但不能执行.Visible = true,等等。

Windows 7 x64 Pro SP1,在Access 2007和2016中进行了尝试-两个版本的结果相同。

1 个答案:

答案 0 :(得分:1)

这是预期的行为。

一旦UserControl设置为True,则UserControlVisible均为只读和True。

您可以通过测试UserControl是否为真来解决此问题:

If(!accessApp.UserControl){accessApp.Visible = True;}