2017-04-15 24 views
-1

ファイルと同じ名前のワークシートがあるかどうか確認したい。ファイルと同じ名前のワークシートがあるかどうか確認したい

現時点ではファイルを配列として開いていますが、コードを繰り返して、同じ名前のワークシートがあるかどうかを確認してください。

私は分割を使用してパス名と拡張子を削除しましたが、確認することはできません。

コードの乱雑さをお詫び申し上げます。それを整理しようとしていたが、病気が整った。より多くのコードがありますが、一致するものがなければそのコードを実行したいので、これは必要ありません。

お手伝いできますか?

Sub sort_it_out() 

Dim wb1 As Workbook 
Dim wb2 As Workbook 
Dim Sheet As Worksheet 
Dim filnam As Variant 
On Error GoTo errorhandler 

Set wb1 = ActiveWorkbook 

ChDir Application.ActiveWorkbook.path 

    'get files 
    filnam = Application.GetOpenFilename(FileFilter:="2D Table Formats (*.htm;*.xlsm;*.html),*.htm;*.xlsm;*.html", Title:="Select 2D Table", MultiSelect:=True) 

    'set the array 
    If IsArray(filnam) Then 'if at least one file is selected, this will be an Array 

    'define j as the array 
    For j = LBound(filnam) To UBound(filnam) 

    'remove path and extension 
    Dim s As String, a() As String, p As String 
    s = filnam(j) 
    a() = Split(s, "\") 
    p = Split(a(UBound(a)), ".")(0) 

    MsgBox "p " & p 

    'check if worksheet exists 
    For Each ws_check In ThisWorkbook.Worksheets() 

     If ws_check.Name = p Then 
      MsgBox "Its there" 
      Exit Sub 
      Else 
     End If 
    Next ws_check 

    'continue code from here 

これはコードを実行しますが、何らかの理由で配列をループしません。一度に1つのファイルのみ。あなたは助けてもらえますか?

答えて

0

私は今すべてを取り組んだ。

これでファイルの場所が開き、ファイル名から拡張子を差し引いたパスが短縮されます。その後、ws checkはシートをファイル名と照合して、次のファイルにジャンプします。

私を助けてくれたalwaysdataありがとうございました。

Sub sort_it_out() 

Dim filnam As Variant 

'open file locations 
filnam = Application.GetOpenFilename(FileFilter:="2D Table Formats (*.htm;*.xlsm;*.html),*.htm;*.xlsm;*.html", Title:="Select 2D Table", MultiSelect:=True) 

'if at least one file is selected, this will be an Array 
    If IsArray(filnam) Then 

    For j = LBound(filnam) To UBound(filnam) 

'remove pathway and extension from entire filename and path. ie C:\open.txt becomes open. 

    Dim s As String, a() As String, p As String 
    s = filnam(j) 
    a() = Split(s, "\") 
    p = Split(a(UBound(a)), ".")(0) 


'check if worksheet exists against p ... ie if theres a worksheet called open it will goto the next option if not it will continue through code 
    For Each ws_check In ThisWorkbook.Worksheets() 

     If ws_check.Name = p Then 
      MsgBox p & " has already been transfered across. ", vbExclamation 'lets the user know this is already there. 

      GoTo looper 
      Else 
     End If 
    Next ws_check 

'do something here with the code if not found. IE MSGBOX " NOT FOUND " 

'jump to this point if there is a match. 
looper: 
Next 
    Else 
    Exit Sub 

End If 

End Sub 
1

あなたのコードに従うのは少し難しいですが、これはあなたがやろうとしていることですか?

私はあなたがp変数と同じ名前を持っているかどうかを確認するために、ワークブックの各ワークシートを以下のコードでチェックするように、p変数にファイル名を格納していたと思います。

Public Sub CompareWorksheetNamesToFiles() 

    Dim file_name As String 
    file_name = ActiveWorkbook.Name 

    Dim ws_check As Worksheet 
    For Each ws_check In ThisWorkbook.Worksheets() 

     If ws_check.Name = p Then 
      Debug.Print ("Do Something") 
     End If 

    Next ws_check 

End Sub 
+0

ありがとうございます。私が入るとそれをチェックします。filnamはファイルを配列に開くものです。 Filnam(j)は配列を呼び出し、すべての追加パス情報を削除するためにpで短縮する必要があります。これは開かれているファイルか、p内のファイルだけをチェックしますか? –

+0

私はそれが意味をなさないならば、filnamから配列としてpを定義する必要があると思う。 –

+0

あなたのpはforループの中にあるように見えたので、配列の各ファイルを調べてファイル名にpを入れると思っていた。しかし私は間違っている可能性があります。 – AlwaysData

関連する問題