1

ここで報告された ByRef エラーを調べましたが、まだ私の方法のエラーを見つけることができません。

OrderedCaseList() は Variant 型の関数です。正しく呼び出され、期待どおりに配列を返します。

ただし、コンパイルしようとすると、コマンドで「ByRef引数の型が一致しません」というメッセージが表示されますJoin(arr...。理由がわかりません...

Private Sub worksheet_Activate()
Dim s As String
Dim arr() As String
Dim var As Variant
Dim i As Long, j As Long

var = OrderedCaseList(True)
ReDim arr(0 To UBound(var))

j = UBound(var)

For i = 0 To j
  arr(i) = var(i)
Next

s = Join(arr, ",")
Range("c16").Validation.Add Type:=xlValidateCustom, Formula1:=s

End Sub

コードの最後の 2 行をコメントアウトしたときの変数 watch の出力は次のとおりです。

OrderedCaseList, Type: Variant/Variant
Expression:OrderedCaseList(0), Value:"Case 1", Type:Variant/String
etc.

Var, Type@ Variant/Variant
Expression: Var(0), Value:"Case 1", Type:Variant/String
etc.

arr, Type:String(0 to 3)
Expression:arr(0), Value:"Case 1", Type:String

どんな助けでも大歓迎です。

4

1 に答える 1

0

あなたのコードは問題ないように見え、関数OrderedCaseListをどのように設定しても、それを壊すことはできませんでした(とにかく問題ではないと思います)。

JOIN 関数も含むサードパーティの dll を参照した可能性はありますか?

次の行を変更して、VBA 関数を呼び出していることを確認できます。

s = Join(arr, ",")

これに:

s = VBA.Strings.Join(arr, ",")

コンパイルされるかどうかを確認します

于 2012-10-27T02:46:17.800 に答える