2016-01-27 3 views
0

Это мой первый пост здесь.Ошибка копирования данных в новый лист Excel с использованием макроса

Я пытаюсь скопировать данные с одного листа на новый лист в той же книге после фильтрации на основном листе.

Мне также нужно скопировать шаблон листа из листа шаблона на этот новый лист, где я копирую данные, прежде чем копировать данные.

Это код VBA показано в моем макросе:

Sub Macro7() 
' 
' Macro7 Macro 
' 

' 
    Sheets("Template").Select 
    Rows("1:3").Select 
    Application.CutCopyMode = False 
    Selection.Copy 
    Dim sSheetName As String 
    Sheets.Add After:=Sheets(Sheets.Count) 
    sSheetName = ActiveSheet.Name 

    ActiveSheet.Paste 
    Sheets("Sheet1").Select 
    Range("N13").Select 
    Range(Selection, Selection.End(xlDown)).Select 
    Application.CutCopyMode = False 
    Selection.Copy 
    Sheets("sSheetName").Select 
    Range("D4").Select 
    ActiveSheet.Paste 
    Columns("D:D").EntireColumn.AutoFit 
    Sheets("Sheet1").Select 
    Range("A13").Select 
    Range(Selection, Selection.End(xlDown)).Select 
    Application.CutCopyMode = False 
    Selection.Copy 
    Sheets("sSheetName").Select 
    Range("C4").Select 
    ActiveSheet.Paste 
    Sheets("Sheet1").Select 
    Range("D13").Select 
    Range(Selection, Selection.End(xlDown)).Select 
    Application.CutCopyMode = False 
    Selection.Copy 
    Sheets("sSheetName").Select 
    Range("E4").Select 
    ActiveSheet.Paste 
    Sheets("Sheet1").Select 
    Range("B13").Select 
    Range(Selection, Selection.End(xlDown)).Select 
    Application.CutCopyMode = False 
    Selection.Copy 
    Sheets("sSheetName").Select 
    Range("F4").Select 
    ActiveSheet.Paste 
    Sheets("Sheet1").Select 
    Range("H13").Select 
    Range(Selection, Selection.End(xlDown)).Select 
    Application.CutCopyMode = False 
    Selection.Copy 
    Sheets("sSheetName").Select 
    Range("G4").Select 
    ActiveSheet.Paste 
    Sheets("Sheet1").Select 
    Range("F13").Select 
    Range(Selection, Selection.End(xlDown)).Select 
    Application.CutCopyMode = False 
    Selection.Copy 
    Sheets("sSheetName").Select 
    Range("I4").Select 
    ActiveSheet.Paste 
    Range("A4").Select 
    Application.CutCopyMode = False 
    ActiveCell.FormulaR1C1 = "Fives Cinetic Corp" 
    Columns("B:B").Select 
    Columns("A:A").ColumnWidth = 17.57 
    Range("A4").Select 
    Selection.AutoFill Destination:=Range("A4:A5") 
    Range("A4:A5").Select 
    Range("D10").Select 
End Sub 

Я получаю сообщение об ошибке: Ошибка выполнения 9: Subscript из диапазона

Угадайте его что-то делать с номерами листов, но не в состоянии понять, что именно.

+1

Всегда избегайте использования определенных ненадежных функций, таких как '.select' и' .copy'/'.paste'. Я бы посоветовал найти альтернативные методы и переписать код. Также посмотрите на тур и прочитайте, как задать хороший вопрос. http://stackoverflow.com/tour –

+0

Привет, Джош, спасибо за подсказку. Я буду практиковать то, что вы предложили в будущем. –

ответ

0

Просто убедитесь, что вы еще не решили это, посмотрите на код, который я адаптировал для вас. При создании новых проектов VBA, играйте с некоторыми из этих методов, вы обнаружите, что они намного быстрее и надежнее, чем предыдущая. Сравните их рядом.

Это сделало много предположений с моей стороны, поэтому сделайте резервную копию, прежде чем запускать ее, чтобы проверить ее и убедиться, что все идет в нужном месте.

Sub Macro7() 

    Sheets.Add After:=Sheets(Sheets.Count) 
    NewSheet = ActiveSheet.Name 
    Sheets("Template").Rows("1:3").Copy Destination:=ActiveSheet.Range("A1") 

    Sheets("Sheet1").Activate 
    Range("N13").Select 
    Range(Selection, Selection.End(xlDown)).Select 
    Selection.Copy Destination:=Sheets(NewSheet).Range("D4") 

    With Sheets(NewSheet) 
     Columns("D:D").EntireColumn.AutoFit 
    End With 

    Range("A13").Select 
    Range(Selection, Selection.End(xlDown)).Select 
    Selection.Copy Destination:=Sheets(NewSheet).Range("C4") 

    Range("D13").Select 
    Range(Selection, Selection.End(xlDown)).Select 
    Selection.Copy Destination:=Sheets(NewSheet).Range("E4") 

    Range("B13").Select 
    Range(Selection, Selection.End(xlDown)).Select 
    Selection.Copy Destination:=Sheets(NewSheet).Range("F4") 

    Range("H13").Select 
    Range(Selection, Selection.End(xlDown)).Select 
    Selection.Copy Destination:=Sheets(NewSheet).Range("G4") 

    Range("F13").Select 
    Range(Selection, Selection.End(xlDown)).Select 
    Selection.Copy Destination:=Sheets(NewSheet).Range("I4") 

    Sheets(NewSheet).Activate 
    Range("A4").Value = "Fives Cinetic Corp" 
    Columns("A:A").AutoFit 
    Range("A4").AutoFill Destination:=Range("A4:A5") 
    Range("D10").Select 
End Sub 
+0

Привет, Джош, я понимаю, что мои знания о VBA сейчас очень ясны, когда я вижу ваш код. Ваши взгляды более структурированы и понятны и понятны. Спасибо, что уделили мне время и помогли мне в этом пожирании. –

+0

Хотелось бы узнать, почему вы дали D13, N13 и т. Д. В Range? Я получаю ошибку #Ref в диапазоне D4 на новом листе. Reswt кода работает безупречно –

+0

Я только что выбрал диапазоны, которые вы выбрали в своем коде, является ли код, вставляющий формулу в D4? Если это так, то может быть, как формула была сделана для работы изначально. Например, если в формуле указано «Сумма A1 и B1», и вы переместили ее на новый лист, где в B1 не было значения, вы получите ошибку. –

Смежные вопросы