2

我有一个用 VB6 编写的旧 ActiveX 组件来支持(甚至不必费心要求对其进行现代化改造,这正是我目前所拥有的),它在编译以下代码时做了一些奇怪的事情:

Dim connectedPrinter As printer
Dim printers() As String

For Each connectedPrinter In printers
    printers(UBound(printers)) = connectedPrinter.DeviceName
Next

它应该做的就是列出所有连接的打印机。但是,在编译时,VB6 告诉我

对于数组上的每个控制变量必须是 Variant

奇怪的是,在同一代码库的另一个函数中,我对不同的任务使用完全相同的循环(将当前打印机设置为默认值)

Dim pPrinter As printer

For Each pPrinter In printers
    If (pPrinter.DeviceName = sPrinterName) Then
        Set printer = pPrinter
        Exit For
    End If
Next

然而,这被毫不犹豫地接受,编译并且在生产环境中也可以证明是有效的。

这里发生了什么?

4

1 回答 1

8

在问题片段中,您有一个名为printers隐藏Printers集合的本地数组。您可以重命名本地数组,或者通过将其引用为来限定对集合的访问权限VB.Printers

于 2013-02-19T11:45:00.133 回答