私はサポートするために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
それでも、それはためらうことなく受け入れられ、コンパイルされ、実稼働環境でも明らかに機能します。
何が起きてる?