3

マクロの 1 つで突然エラーが発生しました。次の関数を呼び出します。この関数は、選択したオプションの区切り文字を使用して一連のセルを連結します。

Public Function MAKELIST(ByVal cellRange As Range, Optional ByVal delimiter As String)
 'Function to join a range of cells together with an optional
 Dim c As Range
 Dim newText As String
 Dim Count As Integer
 Count = 0
 newText = ""
 For Each c In cellRange
  Count = Count + 1
  newText = newText & c.Value
  If Count < cellRange.Count Then
   newText = newText & delimiter
  End If
 Next
 MAKELIST = newText
End Function

これは、手動で入力されたセル データを単に結合しているだけであり、どの値でもそれを壊しているように見えます。問題は、関数自体ではなく、関数がどのように参照/呼び出されているか (申し訳ありませんが、命名法が良くありません) にあるようです。

これ完璧に機能していました。ファイルをフォルダー間で移動すると、突然動作しなくなり、#NAME毎回エラーが返されました。コード内で何も変更されていないので、同じ VBAで からMAKELISTに変更しました。MAKELIST2これは完全に機能します。ただし、ワークブック内の関数へのすべての参照を変更する必要がないことは明らかであり、他のユーザーにこれが起こらないように、堅牢で将来性のあるものにしたいと考えています。なぜこれが起こったのか、誰にでも光を当てることができますか?

ありがとう!

4

1 に答える 1

6

問題の範囲を確認すると便利です。このはるかに短い関数を使用することもできますが

[複数の列範囲を処理するように更新]

Public Function MAKELIST2(ByVal cellRange As Range, Optional delimiter As String)
Dim rng1 As Range
For Each rng1 In cellRange.Columns
    MAKELIST2 = MAKELIST2 & Join(Application.Transpose(rng1), delimiter)
Next
End Function
于 2012-06-18T12:33:57.733 に答える