2016-05-18 12 views
1

別のExcelファイルからシートのセルを開いてコピーしようとしています。私は必要なExcelファイルを開いたりコピーしたり閉じたりするのに問題ありません。この場合、私はWith x.Sheets("Documents").UsedRangeです。セルをコピーするために必要なほとんどのファイルには、シート名として「ドキュメント」がありますが、「ドキュメント」+別の異なる文字(「DocuemntsEX」など)を持つものがあります。コピーしようとすると、「DocumentEX」と「Document」が異なるため、「Subscript Out-of-range」が表示されます。ほとんどのファイルにその名前が付いているので、シートの特定の名前を保持できる方法はありますか?異なるシート名のシートにアクセスするのに役立つコードはありますか?あなたが明確化を必要とするなら、ちょうど私を打つ。ほとんど同じ名前のシート

+1

を参照'Sheets(" sheetNumber ")'(without ""なので、Sheets(2) –

+1

'ちょうどあなたが説明を必要とするならば私を打つ.'絶対に10 0%は説明が必要です。 –

答えて

3

最初のシートを得るために、ワイルドカード文字を使用する:あなたのコードで

Function GetDocumentSheet(ByRef wb As Workbook) As Worksheet 

    For Each ws In wb.Sheets 
     If LCase$(ws.Name) Like "documents*" Then 
      Set GetDocumentSheet = ws 
      GoTo SheetFound: 
     End If 
    Next 

    Set GetDocumentSheet = Nothing 

SheetFound:  
End Function 

を:

Set mySheet = GetDocumentSheet(x) '// where 'x' is your workbook object 

その後、シートは同じインデックスにある場合、あなたが使用することができます

mySheet.UsedRange 
+1

は、 'Lcase'や' Ucase'や 'option compare text'を使って大文字小文字を区別しない方が良いでしょう。 'Lcase(ws.Name)"ドキュメント* "と似ていますが、そうでなければ何らかの問題があるかもしれません。 – Vasily

+1

@Vasily良いアイデアは、*** ***常に起こるのを待っているエラーです... –

0

私がコメントで言ったように、あなたは数でシートを使用することができ、またはあなたが文字列と正規の文字にシート名を比較するときは、この

Sub findSheet() 

Dim sheetSubName As String 
sheetSubName = "fluff" 

Dim currentSheet As Worksheet 

For Each currentSheet In Sheets 

    If currentSheet.Name Like sheetSubName & "*" Then 
     MsgBox "do some stuff" 
    End If 

Next currentSheet 

End Sub 

のようなものを使用することができます(私の例では*その何でもそうは) 。したがって、このマクロはシートの毛羽立ちやふわふわのふわふわしたもので動作します。(すべてブック内のシート)でループし、その名前をLike(=など)で比較しますが、いくつかの基本正規表現を使用できます。

関連する問題