Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
这个VBA代码的C#等价物是什么?_C#_Vba_Excel - Fatal编程技术网

这个VBA代码的C#等价物是什么?

这个VBA代码的C#等价物是什么?,c#,vba,excel,C#,Vba,Excel,我有一个VBA代码,可以刷新excel工作表上的数据连接,我正在稍微更新代码,就像C#相对于Visual Basic的可靠性一样 所以我的问题是这个VBA代码的C#等价物是什么: Set wb = Workbooks.Open(fileName, 0, True) wb.Connections(baseName & " POS Report").OLEDBConnection.BackgroundQuery = False wb.RefreshAll wb.Connections(bas

我有一个VBA代码,可以刷新excel工作表上的数据连接,我正在稍微更新代码,就像C#相对于Visual Basic的可靠性一样

所以我的问题是这个VBA代码的C#等价物是什么:

Set wb = Workbooks.Open(fileName, 0, True)
wb.Connections(baseName & " POS Report").OLEDBConnection.BackgroundQuery = False
wb.RefreshAll
wb.Connections(baseName & " POS Report").OLEDBConnection.BackgroundQuery = True
我已经尝试了C#中的逻辑等价物,但它不起作用。。。非常感谢您的帮助

我已经记下了基本知识:

Application excel = new Application();
Workbook ob = excel.Workbooks.Open(eBook[i], 0, true);
ob.Connections(baseName + " POS Report").OLEDBConnection.BackgroundQuery = true;
此处出现的错误适用于
连接
,其中显示“非invocable memer”Microsoft.Office.Interop.Excel。_工作簿.Connections”不能像方法一样使用“

返回包含成员的。您可以使用该方法访问这些连接中的单个项

所以它应该是这样的:

ob.Connections.Item(baseName + " POS Report").OLEDBConnection.BackgroundQuery = true;

在VB中,允许将类的属性或方法之一指定为“默认”成员。然后,您可以使用该类实例的任何标识符“就好像”它是一个方法名,它将自动调用/访问默认成员

在这种情况下,
Connections
是一个集合,几乎所有VBA集合类的默认成员都是一个名为
Item
的方法,该方法通过索引(数字或名称)返回指定的项。因此,在VB中,这两个是等效的:

WorkbookConnection x = wb.Connections("foo")
WorkbookConnection x = wb.Connections.Item("foo")

C#没有默认成员的相同概念,因此不能使用第一种语法。第二个语法只是一个普通的成员访问,所以它工作得很好。

一个有用的链接,可以从vb net@bto.rdz学习C,谢谢!这是一个很酷的转换器。我改用C#,因为我比VBA更擅长C:P主要从事C的工作
项的文档有点稀疏。这似乎表明它创建了一个连接对象。我很确定,
Item
不在中。但在VBA中它是这样工作的:
Connections(something)
调用
Connections
的默认成员,即
Item
,因此它实际上相当于
Connections.Item(something)
,可以直接转换为C。这与它的IEnumerable实现几乎没有关系,而且我实际上不确定迭代现有元素是否会起作用。“creates”只是文档中非常糟糕的措辞。它的意思是实例化一个新连接,填充适当的属性,然后返回它。与此相反,数组中的某个位置已经存在所有连接的实例。