2012-05-09 37 views
1

1つのExcelシートを別のExcelシートにコピーするためのExcel用マクロを作成しています。VBAで名前をハードコーディングせずにExcelワークシートを参照するにはどうすればよいですか?

Function CopyFile() 

    Dim Wb1 As Workbook 
    Dim Wb2 As Workbook 
    Dim ws1 As Worksheet 
    Dim ws2 As Worksheet 

    Set Wb1 = ActiveWorkbook 
    Set ws1 = Wb1.Worksheets("Task") 
    Set Wb2 = Workbooks.Open("D:\Outlook\dest.xlsx") 

    ws1.Copy Wb2.Worksheets(1) 

    Wb2.Save 
    Wb2.Close 
    Wb1.Activate 

End Function 

しかし、私はシート名設定WS1 = Wb1.Worksheets( "タスク")を取得するには、ハードコードされた文字列を使用したくない:

これが働いています。代わりに、関数の引数を使用します。

コードの一部が動作しません後:それは私の作品

Function CopyFile(name As String) 

    Dim Wb1 As Workbook 
    Dim Wb2 As Workbook 
    Dim ws1 As Worksheet 
    Dim ws2 As Worksheet 

    Set Wb1 = ActiveWorkbook 

    Set ws1 = Wb1.Worksheets(name) 
    Set Wb2 = Workbooks.Open("D:\Outlook\dest.xlsx") 
    ws1.Copy Wb2.Worksheets(1) 

    Wb2.Save 
    Wb2.Close 
    Wb1.Activate 

End Function 
+3

何が問題なのですか?間違いはありますか?シートが存在しない場合を除いて、あなたのコードは私にとってうまく見えます。 – markblandford

答えて

2

。存在しない名前を渡すと、エラーが発生します。たぶん

Function CopyFile(sSheetName As String) 

    Dim wbSource As Workbook 
    Dim wbDest As Workbook 
    Dim wsSource As Worksheet 
    Dim wsDest As Worksheet 

    Set wbSource = ActiveWorkbook 

    On Error Resume Next 
     Set wsSource = wbSource.Worksheets(sSheetName) 
    On Error GoTo 0 

    If Not wsSource Is Nothing Then 
     Set wbDest = Workbooks.Open("D:\Outlook\dest.xlsx") 
     wsSource.Copy wbDest.Worksheets(1) 

     wbDest.Save 
     wbDest.Close 
     wbSource.Activate 
    End If 

End Function 

"名前"はVBAの予約語です。変数/引数名として引き続き使用できますが、おそらくそうではありません。

関連する問題