2017-07-28 27 views
0

マイコード:VBAのエラー:メソッドまたはデータメンバが見つかりません

Public Sub splitUpRegexPattern() 
Dim regEx As New RegExp 
Dim strPattern As String 
Dim strInput As String 
Dim strReplace As String 
Dim Myrange As Range 

Set Myrange = ActiveSheet.Range("B2:B4279") 

For Each c In Myrange 
    strPattern = "([A-Z]{2}\/[A-Z]{2}\/[A-Z][0-9]{2}\/[a-z]{3}[0-9]{9}\/)([0-9]{4})" 

    If strPattern <> "" Then 
     strInput = c.Value 
     strReplace = "$1" 

     With regEx 
      .Global = True 
      .MultiLine = True 
      .IgnoreCase = False 
      .Pattern = strPattern 
     End With 

     If regEx.test(strInput) Then 
      c.Offset(0, 1) = regEx.Replace(strInput, "$2") 
     Else 
      c.Offset(0, 1) = "" 
     End If 
    End If 
Next 

End Subの

それが最初にうまく働いていた

、それは私にエラーを与えるが、それでもそれがあったタスクを完了するだろうやってしかし、私は新しいスプレッドシート上でこのマクロを使用する場合、それは私にエラーを与える:

Compile Error: Method or Data Member not found.

このサイト上のすべてのソリューションは、さまざまな状況に合わせたので、私は残念ながら私の状況に適用することができませんでした。

私はコードを変更していないので、なぜこれが起こっているのかわかりません。私は、私がこれを理解することができるVBAスクリプトをより深く理解していれば、確かですが、私はそうではないので、ここの誰かが私を助けることができるかどうかを知りました!

ありがとうございます!

アイダン

+1

は、インスタンス 'RegExp'作っているオブジェクトである可能性があります。 –

答えて

2

"Microsoft VBScript Regular Expressions 5.5"というライブラリへの参照を追加する必要があります。

このコードがブック内で動作する場合は、単にライブラリ参照を追加しただけで、新しいブックにコードをコピーするときに同じ参照をもう一度追加する必要があります。

既存のコードでは、redExという変数が自動的にインスタンス化されます。この変数は、ライブラリ参照が既に正しく動作するように追加されていることを前提としています。

これを回避するには、レファレンスを追加する必要がないレイトバインディング手法を使用することができ、コードはすべてのブックで機能します。

ので、以下のようなオブジェクトとして正規表現変数を宣言しないために...

Dim regEx As Object 
Set regEx = CreateObject("VBScript.RegExp") 
+0

ええ、ちょうどそのコードを追加する必要があります、ありがとうマン<3 –

2

私は、あなたがライブラリへの参照を失ってしまったと考えています。 VBEで、[ツール] - [参照]を選択します。 Microsoft VBScript正規表現5.5を探し、それにチェックを入れます。

+0

私はすでにそれをしましたが、助けてくれてありがとう! :D –

関連する問題