Excel VBA копирует лист в новую книгу с переименованием значения ячейки на основе листа

#excel #vba

#excel #vba

Вопрос:

Я пытаюсь скопировать один лист «RESULTADOS» в новую книгу с диапазоном значений ячейки на основе имени листа «U3». Мой код отлично копирует лист, но выдает ошибку об имени, а новый файл не открывается нормально, поэтому я не знаю, где его ошибка. Я надеюсь на некоторую помощь.

Мой код:

 Sub CopySheetToNewWorkbook()

Dim wFrom As Workbook
Dim wTo   As Workbook

Set wFrom = ActiveWorkbook
Set wTo = Workbooks("FileResult.xlsx")

With Application
  .ScreenUpdating = False
  .DisplayAlerts = False
End With

With wFrom
  .Sheets("RESULTADOS").Range("A1:Y100").Copy
End With

With wTo
  With .Sheets("HOJA1")
       .Range("A1").PasteSpecial Paste:=xlPasteAll
       .name = wFrom.Sheets("RESULTADOS").Range("U3").Value
  End With
End With

With Application
  .ScreenUpdating = True
  .DisplayAlerts = True
End With
End Sub
  

Заранее благодарю вас.

График объекта на листе «RESULTADOS» не копируется в новую книгу. Какой параметр предназначен для копирования объектов гистограммы?

ОБНОВИТЬ код:

 Sub CopySheetToNewWorkbook()

Dim wbFrom As Workbook
Dim wbTo   As Workbook
Set wbFrom = ThisWorkbook
Set wbTo = "D:FileResult.xlsx"

Application.ScreenUpdating = False

With wbTo
    With .Sheets(.Sheets.Count)
       wbFrom.Sheets("RESULTADOS").Range("A1:Y100").Copy
       .Range("A1").PasteSpecial
       .Range("A1").PasteSpecial xlPasteColumnWidths
       .Name = wbFrom.Sheets("RESULTADOS").Range("U3").Value
    End With
    .Worksheets.Add After:=.Sheets(.Sheets.Count)
    .Save
End With

Application.ScreenUpdating = True

End Sub
  

Комментарии:

1. Где у вас есть код? В книге, содержащей рабочий лист RESULTADOS или в другой книге?

2. В результатах рабочего листа есть код.

3. Есть идея переименовать измененный рабочий лист HOJA1 , а затем создать новый рабочий лист HOJA1 ?

4. В новой книге по умолчанию «Hoja1» есть, вы должны изменить имя в соответствии со значением ячейки (диапазон U3), возможно, необходимо удалить «Worksheets.Add().name = Sheets(«HOJA1″)»

5. Рабочая книга («FileResult») открыта или закрыта?

Ответ №1:

Копирование из одной книги в другую

PasteType

 Option Explicit

Sub CopySheetToNewWorkbook()

    Dim wbFrom As Workbook
    Dim wbTo   As Workbook
    Set wbFrom = ThisWorkbook
    Set wbTo = Workbooks.Open(ThisWorkbook.Path amp; "FileResult.xlsx")
    
    Application.ScreenUpdating = False
    
    With wbTo
        With .Sheets("HOJA1")
           wbFrom.Sheets("RESULTADOS").Range("A1:Y100").Copy
           .Range("A1").PasteSpecial
           .Range("A1").PasteSpecial xlPasteColumnWidths
           .Name = wbFrom.Sheets("RESULTADOS").Range("U3").Value
        End With
        .Worksheets.Add After:=.Sheets(.Sheets.Count)
        ActiveSheet.Name = "HOJA1"
        '.Save
        '.Close
    End With
    
    Application.ScreenUpdating = True

End Sub
  

Комментарии:

1. Спасибо, есть одна вещь, невозможно добавлять больше листов каждый раз, когда я копирую из листов («RESULTADOS»). Диапазон («U3»).Значение и, во-вторых, формат копирования должен быть полной копией, а не значениями. Я предпочитаю, чтобы файл был открыт.

2. @Kais: Я отредактировал код. Я не понимаю ваш первый вопрос? У вас не может быть листов с одинаковыми именами, поэтому вы должны объяснить, как вы их назовете. Если FileResult.xlsx открыто или закрыто, код будет работать. Если вам это не нравится, просто удалите .Open(...) .

3. Еще раз спасибо, вопрос относится к копии листа, которая должна иметь тот же формат в рамке, потому что на новом листе формат изменен по всей ширине столбцов.

4. Потому что без диапазона («A1: Y100»), wbFrom. Листы («РЕЗУЛЬТАТЫ»).копирование создает новую книгу??