1

あるExcelシートを別のExcelシートにコピーするための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

しかし、ハードコードされた文字列を使用してシート名Set ws1 = Wb1.Worksheets("Task")を取得したくありません 。代わりに関数引数を使用したい。

次のコードは機能しません。

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
4

1 に答える 1

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の予約語です。変数/引数名として引き続き使用できますが、おそらく使用しないでください。

于 2012-05-09T13:28:26.443 に答える