在一个函数中不接受VB6 For循环,在另一个函数中工作正常

F.P*_*F.P 2 vb6 foreach activex

我有一个用VB6编写的旧的ActiveX组件来支持(甚至不打算要求它现代化,这就是我现在所拥有的)并且它在编译以下代码时做了一些奇怪的事情:

Dim connectedPrinter As printer
Dim printers() As String

For Each connectedPrinter In printers
    printers(UBound(printers)) = connectedPrinter.DeviceName
Next
Run Code Online (Sandbox Code Playgroud)

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

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

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

Dim pPrinter As printer

For Each pPrinter In printers
    If (pPrinter.DeviceName = sPrinterName) Then
        Set printer = pPrinter
        Exit For
    End If
Next
Run Code Online (Sandbox Code Playgroud)

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

这里发生了什么?

Boa*_*ann 8

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