2017-01-10 8 views
0

私は新しいブックを作成し、ディレクトリ内のファイルを開き、対応するシートと値を新しいブックに追加します。私は "Copy Destination:="または他の範囲と等しい範囲を示すように多くのフォームを見てきましたが、私はスクリプトの仕事を得ることができません。 Elseシナリオの "Workbooks(FileName).Close"の直前のこの1行を除き、すべてが動作しています(これは単なるスニペットなので、98%信頼しています)。私は通常、私の答えを見つけてそれを理解しますが、ここでタオルを入れます。助けてください!あるブックから別のブックへセルの範囲をコピーする正しい構文は何ですか?

Dim SiteUsedCheck As Boolean 
Dim NewBook As Workbook 
Dim NewSheet As Worksheet 
Dim SaveAsName As String 
Dim WeekRange As Range 

Set WeekRange = Range("I5:O17") 

SaveAsName = "Invoice" & "_" & Home.Range("C23").Value & ".xlsm" 
MsgBox SaveAsName 

Set NewBook = Workbooks.Add 
    With NewBook 

       Do While FileName <> "" '<---recall FileName variable looks at excele books; it ignores folders 

        Workbooks.Open (Directory & FileName) 

         If Workbooks(FileName).Worksheets("TotalHours").Cells(SecretTest, WeekCol) = 0 Then 

          Workbooks(FileName).Close 

         Else 
          Dim TempSheetName As String 
          Set NewSheet = .Sheets.Add(After:=.Sheets(.Sheets.Count)) 
          TempSheetName = Workbooks(FileName).Worksheets("TotalHours").Range("B2").Value 
          NewSheet.Name = TempSheetName 

          NewBook.Sheets(TempSheetName).Range("A1").Value = Workbooks(FileName).Sheets("TotalHours").Range("WeekRange") '<--This is the line that keeps getting an error. But if I put a "1" on the right side of the = it works. So what's wrong with this tiny piece? 

          Workbooks(FileName).Close 

         End If 


        FileName = Dir() 

       Loop 

     .SaveAs FileName:= _ 
      InvoiceDirectory & SaveAsName _ 
      , FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False 

     Workbooks(SaveAsName).Close 
    End With 
+0

「SecretTest」または「WeekCol」に値を割り当てていないようですか? – SJR

+0

私は間違った行を見ていました。 'Range(" WeekRange ")'は名前付き範囲ではないので間違っていますが、なぜ単一のセルの値を範囲に設定しようとしていますか? – SJR

+0

ああ、私はあなたが1つのセルに、このセル(この場合はA1)全体の範囲を置くことができると思った上にコピーされたすべての左上になります。上記のスニペットでは、WeekRangeはそれが何週あるかに基づいて定義されています。私はWeekRangeのために私が使っていたものを知っているので、一例しか書いていません –

答えて

0

おそらく

NewBook.Sheets(TempSheetName).Range("A1").resize(weekrange.rows.count,weekrange.columns.count).Value = WeekRange.value 
+0

興味深い。それはとても近かったこれはエラーなしで働いたが、それは間違ったブックからそれをつかんだ。私はDo Whileの第1のものを開くブックからそのWeekRangeを取得したいと思います –

+0

ファイルを開く前に、コードの先頭にWeekRangeを定義しています。開いているワークブックごとにその範囲として定義する必要があると言っていますか? – SJR

+0

うん、それが働いていなかった理由です。ケースシナリオをループに入れて、今すぐ動作します。どうもありがとうございます!私は、設定の範囲がどのように働いたかを理解するのが難しかった。 –

0

最も簡単な方法は次のようにいくつかの標準的な構文を使用することです:

r1r2を範囲としてDim'edされている
r1.Copy r2 

。ここで

Sub BooktoBook() 
    Dim r1 As Range, r2 As Range, NewBook As Workbook 
    Set r1 = ActiveWorkbook.Sheets("Sheet1").Range("A3:D7") 

    Set NewBook = Workbooks.Add 
    Set r2 = NewBook.Sheets("Sheet1").Range("A3:D7") 

    r1.Copy r2 
End Sub 
+0

これはもう1つの答えで、私は何がうまくいかなかったのか、それをどうやって動作させるのか理解できました。それを分解していただきありがとうございます! –

0

はあなたに私は私が実際に正しい場所になるように、私は再び働いWeekRange私に与えられた2つの答えで学んだことを組み合わせてみんなに、ありがとう小さな一例です次のコードのように。

Dim SiteUsedCheck As Boolean 
Dim NewBook As Workbook 
Dim NewSheet As Worksheet 
Dim SaveAsName As String 
Dim TempInvoiceRange As Range 



SaveAsName = "Invoice" & "_" & Home.Range("C23").Value & ".xlsm" 
MsgBox SaveAsName 

Set NewBook = Workbooks.Add 
    With NewBook 

       Do While FileName <> "" '<---recall FileName variable looks at excele books; it ignores folders 

        Dim OpenRange As Range 
        Workbooks.Open (Directory & FileName) 

        Select Case Home.Range("C25") 

         Case Is = 1 
          Set WeekRange = Workbooks(FileName).Worksheets("TotalHours").Range("A5:G17") '<---Range for Current Week to transfer to invoice 
          SecretTest = 18                 '<---Row to check if site was used for the week 
          WeekCol = 7                  '<---Column corresponding to current week 
         Case Is = 2 
          Set WeekRange = Workbooks(FileName).Worksheets("TotalHours").Range("I5:O17") 
          SecretTest = 18 
          WeekCol = 15 
         Case Is = 3 
          Set WeekRange = Workbooks(FileName).Worksheets("TotalHours").Range("Q5:W17") 
          SecretTest = 18 
          WeekCol = 23 
         Case Is = 4 
          Set WeekRange = Workbooks(FileName).Worksheets("TotalHours").Range("A19:G31") 
          SecretTest = 32 
          WeekCol = 7 
         Case Is = 5 
          Set WeekRange = Workbooks(FileName).Worksheets("TotalHours").Range("I19:O31") 
          SecretTest = 32 
          WeekCol = 15 

        End Select 

         If Workbooks(FileName).Worksheets("TotalHours").Cells(SecretTest, WeekCol) = 0 Then 

          Workbooks(FileName).Close 

         Else 
          Dim TempSheetName As String 
          Set NewSheet = .Sheets.Add(After:=.Sheets(.Sheets.Count)) 
          TempSheetName = Workbooks(FileName).Worksheets("TotalHours").Range("B2").Value 
          NewSheet.Name = TempSheetName 
          NewBook.Sheets(TempSheetName).Range("A1").Resize(WeekRange.Rows.Count, WeekRange.Columns.Count).Value = WeekRange.Value 
          Workbooks(FileName).Close 

         End If 


        FileName = Dir() 

       Loop 

     .SaveAs FileName:= _ 
      InvoiceDirectory & SaveAsName _ 
      , FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False 

     Workbooks(SaveAsName).Close 
    End With 
関連する問題