2012-03-20 18 views
3

1つのExcelブックからワークシートをインポートする必要があります(ワークシート名は常に同じではありません)。ここでMS Excel VBA - ワークシートを1つのExcelファイルから別のExcelファイルにインポートする必要があります

は、私がこれまでにしたものである:

Sub openFile_Click() 
    FileToOpen = Application.GetOpenFilename _ 
    (Title:="Please choose a Report to Parse", _ 
    FileFilter:="Report Files *.rpt (*.rpt),") 

    If FileToOpen = False Then 
     MsgBox "No File Specified.", vbExclamation, "ERROR" 
     Exit Sub 
    Else 
     Workbooks.Open Filename:=FileToOpen 

     Dim wb1 As Workbook 
     Dim wb2 As Workbook 
     Set wb1 = ActiveWorkbook 
     wb2 = Workbooks(FileToOpen)  'This is where I am stuck..I can't give it a static name 

     For Each Sheet In wb1.Sheets 
      If Sheets.Visible = True Then 
       Sheets.Copy After:=wb2.Sheets(wb2.Sheets.Count) 
      End If 

     Next Sheet 

    End If 

答えて

0

は、オープンにワークブックを設定します(またはファイルパスなしで、後でワークブックを設定)

ここに行く:

Sub openFile_Click() 
FileToOpen = Application.GetOpenFilename _ 
(Title:="Please choose a Report to Parse", _ 
FileFilter:="Report Files *.rpt (*.rpt),") 

If FileToOpen = False Then 
    MsgBox "No File Specified.", vbExclamation, "ERROR" 
    Exit Sub 
Else 
    Dim wb1 As Workbook 
    Dim wb2 As Workbook 
    Set wb1 = ActiveWorkbook 
    Set wb2 = Workbooks.Open(FileToOpen) 




    For Each Sheet In wb1.Sheets 
     If Sheet.Visible = True Then 
      Sheets.Copy After:=wb2.Sheets(wb2.Sheets.Count) 
     End If 

    Next Sheet 

End If 
End Sub 
2

このコードは、あなたが望むように動作します。私は次のように修正しました。

  1. 変数の宣言をすべてプロシージャの先頭に移動し、使用する前に宣言します。それは単なる良い習慣です。

  2. 2つ目のブックを開く前に、変数にアクティブなブックを割り当てて、ブックが1つだけ開くようにします。

  3. それぞれの声明には、いくつかの修正が加えられました。

    Sub openFile_Click() 
    Dim wb1 As Workbook 
    Dim wb2 As Workbook 
    
    Set wb1 = ActiveWorkbook 
    
    FileToOpen = Application.GetOpenFilename _ 
    (Title:="Please choose a Report to Parse", _ 
    FileFilter:="Report Files *.rpt (*.rpt),") 
    
    If FileToOpen = False Then 
        MsgBox "No File Specified.", vbExclamation, "ERROR" 
        Exit Sub 
    Else 
        Set wb2 = Workbooks.Open(Filename:=FileToOpen) 
    
        For Each Sheet In wb2.Sheets 
         If Sheet.Visible = True Then 
          Sheet.Copy After:=wb1.Sheets(wb1.Sheets.Count) 
         End If 
        Next Sheet 
    
    End If 
    
    End Sub 
    
関連する問題