2017-01-10 13 views
0

Я создаю новую книгу, затем открываю файлы в каталоге и добавляю соответствующие листы и значения в новую книгу. Я прошел через так много форм, показывая «Копировать назначение: =» или только один диапазон, равный другому, но я не могу заставить работать мой скрипт. Все работает (это всего лишь фрагмент, так что поверьте мне, что 98% его работы), за исключением этой ОДНОЙ строки прямо перед «Книгами (FileName). Закройте» в сценарии «Другие». Я обычно нахожу свой ответ и разбираюсь в этом, но я включаю здесь полотенце. Помоги пожалуйста!Каков правильный синтаксис для копирования диапазона ячеек из одной книги в другую?

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

О, я думал, что вы можете поместить весь диапазон в одну ячейку, тогда эта ячейка (в данном случае A1) будет левым верхним краем всего, что было скопировано. И в приведенных выше фрагментах WeekRange определяется в зависимости от того, на какой неделе это происходит; Я написал только один пример, чтобы вы, ребята, знали, что я использую для WeekRange –

ответ

0

Возможно

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

интересный. Это было так близко. Это работало без ошибок, но оно схватило его из неправильной книги. Я хочу захватить этот WeekRange из книги, которая открывает 1-е место в Do While –

+0

. Вы определяете WeekRange в начале кода, хотя перед открытием каких-либо файлов. Вы говорите, что он должен быть определен как этот диапазон в каждой открытой книге? – SJR

+0

Yup, и поэтому он не работал. Я помещаю сценарий дела в цикл, и он работает сейчас. Спасибо огромное! У меня возникли проблемы с пониманием того, как работают диапазоны настроек. –

0

Самый простой способ заключается в использовании некоторый стандартный синтаксис как:

r1.Copy r2 

где r1 и r2 были Dim'ed в диапазонами. Вот маленький пример

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

Это с другим ответом помогло мне понять, что происходит не так и как это работает. Спасибо, что сломал! –

0

Спасибо всем, когда я объединил то, что я узнал, с двумя ответами на меня снова работал WeekRange на самом деле быть в нужном месте как в приведенном ниже коде.

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 
Смежные вопросы