2017-08-16 10 views
0

少し単純化しますが、本質的には、外部ファイル内に複数のフィールドを見つけて(オープンせずに)、見つからなければデフォルト値を持つことです。それができた、もちろんvba - 外部ファイルに見つからない場合にブレークを見つける

Set src = Workbooks.Open(CStr(FilePath & Filename), True, True) 
Set wb = Application.ThisWorkbook.ActiveSheet 
For Each Roww In Range("A3:A14").Rows 
     With src.Worksheets(srcSheet) 
      cellSearch = "*" & wb.Range("A" & Roww.Row) & "*)" 
      cellSearch = Replace(cellSearch , " -C-", "") 

      'this works 
      cellVal = .Range("A:A").Find(What:=cellSearch , After:=.Range("A1")) 

      'this breaks if not found 
      findPlaceHolder = .Range("A:A").Find(What:=cellVal & ", UK", After:=.Range("A1")) 

      If findPlaceHolder = "" Then 
       wb.Range("E" & rowHelp) = 0 
      Else 
       wb.Range("E" & rowHelp) = findPlaceHolder 
      End If 

私が最初に動作し、文字列のプレフィックスを検索する必要がありますが、その後私は、既存または非既存の終末に、このような

何かを採用する必要があります最初の検索は常に成功し、すべてのフィールドが見つかるので、最初の検索はうまくいきます。

+0

「this breaks not found found」のコメントに関するご質問はありますか?もしそうでなければ、あなたの質問は何ですか?なぜなら私は実際の質問が書かれているようには投稿に表示されないからです。 –

答えて

1

多くのドキュメントが用意されていますので、Findを参照してください。変数を宣言し、Option Explicitを使用する習慣も必要です。最初に見つかったものがあるかどうかを確認する必要があります

Sub x() 

Dim cellVal As Range, findPlaceHolder As Range 

Set src = Workbooks.Open(CStr(FilePath & Filename), True, True) 
Set wb = Application.ThisWorkbook.ActiveSheet 
For Each roww In Range("A3:A14").Rows 
     With src.Worksheets(srcSheet) 
      cellSearch = "*" & wb.Range("A" & roww.Row) & "*)" 
      cellSearch = Replace(cellSearch, " -C-", "") 

      Set cellVal = .Range("A:A").Find(What:=cellSearch, After:=.Range("A1")) 
      If Not cellVal Is Nothing Then 
       Set findPlaceHolder = .Range("A:A").Find(What:=cellVal & ", UK", After:=.Range("A1")) 
       If findPlaceHolder Is Nothing Then 
        wb.Range("E" & rowHelp) = 0 
       Else 
        wb.Range("E" & rowHelp) = findPlaceHolder 
       End If 
      End If 
     End With 
Next roww 

End Sub 
関連する問題