2016-04-04 20 views
0

配列を関数に渡した後、配列に問題があります。基本的には、いくつかの既知の値に対してチェックしたい一連の文字列を含む配列を渡しています。私が試してこれを行うと、私は不一致のエラーが発生します。渡された配列の不一致

私はmsgboxの問題を診断しようとしましたが、コードボックスを実行するときにメッセージボックスがポップアップし、文字列が配列内に表示されるようになってしまいました。 OKをクリックすると、正しい情報が表示されたにもかかわらず、msgboxコマンドで不一致のエラーが発生しているようです。誰が私にミスマッチがあるのか​​教えてもらえますか?

エラー:
Error

コード:条件が初めて成立した

Public Function A2LConvert(ByRef Software As Variant) As Variant 

For i = 0 To 6 
MsgBox (Software(i)) 
    If Software(i) = "A" Then 'Or "A1" Then 
     A2LConvert(i) = "A.txt" 
    ElseIf Software(i) = "C" Then 
     A2LConvert(i) = "C.txt" 
    ElseIf Software(i) = "B" Then 
     A2LConvert(i) = "B.txt" 
    ElseIf Software(i) = "D" Then 
     A2LConvert(i) = "D.txt" 
    ElseIf Software(i) = "E" Then 
     A2LConvert(i) = "E.txt" 
    ElseIf Software(i) = "F" Then 
     A2LConvert(i) = "F.txt" 
    ElseIf Software(i) = "G" Then 
     A2LConvert(i) = "G.txt" 
    Else 
     A2LConvert(i) = "" 
    End If 

Next i 

End Function 
+0

:あなたが欲しい(と思う)という

挙動が仲介配列(tempAr)を実装することによって達成することができますか? –

+0

あなたがしようとしていることは本当に不明です。私の推測では、渡された配列の値を直接置き換えたいということですが、新しい値( 'x.txt')で関数を呼び出しています。も意味ない。その時点で、 'software'は' variant'として宣言されていますので、あなたの関数は何かを受け入れます(常にバリアントを扱う理由は悪いハビットです)。論理全体が間違っているように見えますが、セマンティックは良くありません。すべての 'elseif'の代わりに' select case'を使うべきです。達成したいことを明確に記述し、適切なコードを提供します。 –

+0

また、適切なMS Office製品でご質問ください:ExcelまたはAcccesまたはその他 –

答えて

1

、あなたの条件式が関数A2LConvertをリコールされた、しかし、それは通過しているバリアントi(最初は0)。

例えば、

A2LConvert(i) = ... 

は実際にA2LConvertへの関数呼び出しを行っていると「ソフトウェア」バリアントとして0を渡します。次に、そのmsgbox呼び出しで0の0番目のプロパティにアクセスしようとします。これは型の不一致エラーを引き起こします。どのように関数に値を渡している

Public Function A2LConvert(ByRef Software As Variant) As Variant 

Dim tempAr(6) As Variant 

For i = 0 To 6 
MsgBox Software(i) 
    If Software(i) = "A" Then 'Or "A1" Then 
     tempAr(i) = "A.txt" 
    ElseIf Software(i) = "C" Then 
     tempAr(i) = "C.txt" 
    ElseIf Software(i) = "B" Then 
     tempAr(i) = "B.txt" 
    ElseIf Software(i) = "D" Then 
     tempAr(i) = "D.txt" 
    ElseIf Software(i) = "E" Then 
     tempAr(i) = "E.txt" 
    ElseIf Software(i) = "F" Then 
     tempAr(i) = "F.txt" 
    ElseIf Software(i) = "G" Then 
     tempAr(i) = "G.txt" 
    Else 
     tempAr(i) = "" 
    End If 

Next i 

A2LConvert = tempAr 

End Function 
+0

これで解決しました。なぜこれが今起こったのか理解しています、ありがとう! –

関連する問題