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

問題スニペットにはprintersPrintersコレクションの非表示と呼ばれるローカル配列があります。ローカル配列の名前を変更するか、コレクションを参照してコレクションへのアクセスを限定することができますVB.Printers

于 2013-02-19T11:45:00.133 に答える