2016-05-05 11 views
0

対象配列の先頭から1次元配列にArrayList全体をコピーしようとしていますが、エラー "タイプの不一致"。私はたくさんのグーグル・グーグルでコードの異なるバージョンを試しましたが、誰もが働いていました。VBScriptのArrayListクラス:CopyTo(配列)メソッドを使用した "型の不一致"エラー

Option Explicit 
dim arr1, arr2(), iLoop, lenght 

Set arr1 = CreateObject("System.Collections.ArrayList") 

for iLoop = 0 to 3 
arr1.add iLoop 
next 

redim arr2(arr1.count) 

arr2 = arr1.ToArray() 

for iLoop = 0 to ubound(arr2) 
msgbox "arr2: " & arr2(iLoop) 
next 
+0

私は推測している 'ARR2 = arr1.ToArray()' VBScriptの配列はありません。ネットと同じであり、問​​題になるだろう配列、VBScriptのすべては[Variant'のサブタイプです(https://msdn.microsoft.com/en-us/library/9e7a57cf(v = vs.84).aspx)データ型です。 – Lankymart

答えて

0

VBScriptにはtoArrayメソッド/関数はありません。

  • toArray Method (VBArray)(JavaScriptの)または
  • toArray Method(Visual Studioの - のJScript)でのインスタンスの参照(例で)見つけたり
  • toArray Method(Windowsスクリプティング - のJScript)よりガイダンスについて

ArrayList classとそのVBScriptでの使用方法をお読みください

記事Be Careful What You SayはここEkkehard.Hornerの答えの私のダイジェストです:ArrayListを含むVariant型の変数がarray変数から概念的に異なるが、1がfor .. to .. nextループまたはfor each .. in .. nextループを使用して類似した方法でそれらを読むことができます。そして、私の貢献:

option explicit 
On Error GoTo 0 
Dim sRslt: sRslt = Wscript.ScriptName  ' result 

dim arr1, arr2(), iLoop, lenght, oLoop 

Set arr1 = CreateObject("System.Collections.ArrayList") 
for iLoop = 0 to 3 
    arr1.add Chr(65 + iLoop) 
next 

redim arr2(arr1.count -1) 
sRslt = sRslt & vbNewLine & "IsArray(arr1)=" & IsArray(arr1) & " arr1.count=" & arr1.count 
sRslt = sRslt & vbNewLine & "arr1.type: " & VarType(arr1) & vbTab & TypeName(arr1) 
sRslt = sRslt & vbNewLine & "arr2.type: " & VarType(arr2) & vbTab & TypeName(arr2) 
'arr2 = arr1.ToArray() 

sRslt = sRslt & vbNewLine & vbNewLine & "''' for iLoop = 0 to arr1.count -1" 
for iLoop = 0 to ubound(arr2) ' or equivalent 
           ' for iLoop = 0 to arr1.count -1 
    'msgbox "arr2: " & arr2(iLoop) 
    arr2(iLoop) = Chr(97 + iLoop) & arr1(iLoop) 
    sRslt = sRslt & vbNewLine & iLoop & " arr1(iLoop): " & arr1(iLoop) _ 
          & vbTab & "arr2(iLoop): " & arr2(iLoop) 
next 

sRslt = sRslt & vbNewLine & vbNewLine & "''' for each oLoop in arr2" 
iLoop = 0 
for each oLoop in arr2 
    sRslt = sRslt & vbNewLine & iLoop & " arr1(iLoop): " & arr1(iLoop) _ 
          & vbTab & "oLoop: " & oLoop 
    iLoop = iLoop + 1 
Next 

Wscript.Echo sRslt 

その出力:

==> cscript D:\VB_scripts\SO\37052791.vbs 
37052791.vbs 
IsArray(arr1)=False arr1.count=4 
arr1.type: 9 ArrayList 
arr2.type: 8204 Variant() 

''' for iLoop = 0 to arr1.count -1 
0 arr1(iLoop): A  arr2(iLoop): aA 
1 arr1(iLoop): B  arr2(iLoop): bB 
2 arr1(iLoop): C  arr2(iLoop): cC 
3 arr1(iLoop): D  arr2(iLoop): dD 

''' for each oLoop in arr2 
0 arr1(iLoop): A  oLoop: aA 
1 arr1(iLoop): B  oLoop: bB 
2 arr1(iLoop): C  oLoop: cC 
3 arr1(iLoop): D  oLoop: dD 

==> 
関連する問題