我有一个用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
然而,毫不犹豫地接受了这一点,编译并且在生产环境中也证明了这一点。
这里发生了什么?
答案 0 :(得分:8)
在问题代码段中,您有一个名为printers
的本地数组,隐藏了Printers
集合。您可以重命名本地数组,或通过将其称为VB.Printers
来限定对集合的访问权限。