2016-01-21 19 views
1

Я пытаюсь скопировать все строки на новый лист, но только скопировать эти строки, где Чайлдс возраст выше 20.Копирования объединенных ячеек VBA

Я еще не написал заявление, если выбрать эти строки, но написали код для импорта данных и заполнили различные столбцы, чтобы получить 20-й день рождения с даты рождения.

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

На данный момент я просто пытаюсь разобраться, как скопировать весь лист, чтобы я знал, как копировать объединенные ячейки, прежде чем выполнять оператор If.

Это то, что у меня есть до сих пор (смелый бит внизу - это то, где я пытаюсь копировать объединенные ячейки. Я получаю сообщение об ошибке в строке с ActiveSheet.Range ("**"). MergeArea.Copy

Option Explicit 

Sub ImportActiveList() 
Dim FileName As String 
Dim WS1 As Worksheet 
Dim WS2 As Worksheet 
Dim ActiveListWB As Workbook 

    Set WS2 = ActiveWorkbook.Sheets("Sheet1") 
    FileName = Application.GetOpenFilename(FileFilter:="Excel Files (*.xls*),*.xls*", _ 
               Title:="Select Active List to Import", _ 
               MultiSelect:=False) 

    If FileName = "False" Then 
      Exit Sub 
     Else 
      Set ActiveListWB = Workbooks.Open(FileName) 
    End If 

    Set WS1 = ActiveListWB.Sheets("Page1-1") 

    WS1.UsedRange.Copy WS2.Range("A1") 

    ActiveWorkbook.Close False 

End Sub 


Sub CalculateBirthday() 

    Dim lastrow As Long 
    lastrow = Range("X" & Rows.Count).End(xlUp).Row 

    ActiveSheet.Range("A5:AA291").AutoFilter 
    ActiveSheet.Range("$A$5:$AA$291").AutoFilter Field:=24, Criteria1:="Child" 

    Range("AB5") = "Today's Age Year/Month" 
    Range("AB7:AB" & lastrow).Formula = "=DATEDIF(RC[-2],TODAY(),""Y"") & "" Years, "" & DATEDIF(RC[-2],TODAY(),""YM"") & "" Months """ 
    Columns("AB:AB").EntireColumn.AutoFit 

    Range("AC5") = "Today's Age Year Only" 
    Range("AC7:AC" & lastrow).Formula = "=DATEDIF(RC[-3],TODAY(),""Y"")" 
    Columns("AC:AC").EntireColumn.AutoFit 

    Range("AD5") = "Child 20th Birthday" 
    Range("AD7:AD" & lastrow).Formula = "=DATE(YEAR(R[-1]C[-4])+20, MONTH(R[-1]C[-4]),DAY(R[-1]C[-4]))" 
    Columns("AD:AD").EntireColumn.AutoFit 


    ActiveSheet.Range("A5:AA291").MergeArea.Copy 'copies the merged cells 
    Sheet2.Range("A1").PasteValues  ' pastes what was copied into A1 on Sheet 2 and any merged cells** 

End Sub 
+0

к сожалению, смелая немного не работал. Это последние 2 строки я после. в основном, я просто хочу, чтобы скопировать объединенные ячейки на новый лист. – dogmum

+0

присоединяемых клетки = кошмар для работы с , каждый раз, один раз. Есть ли способ, которым вы можете настроить свою книгу так, чтобы она не объединяла ячейки? Вообще говоря, всегда плохая практика использования объединенных ячеек. – tigeravatar

+0

Спасибо за ответ. Это не мои работы так что, к сожалению, я не имел права говорить, пришли ли они ко мне, которые уже слились. Я разблокировал их, попробовав это до и после фильтрации на «Ребенок», но это, к сожалению, удалило часть информации. – dogmum

ответ

0
Range("A5").Copy 
sheet2.Range("A1").Select 
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ 
     :=False, Transpose:=False 
+0

Я получаю синтаксическую ошибку для строки, начинающейся с Selection :( – dogmum

+0

Это на самом деле Paste: = что, кажется, вызывает проблему. – dogmum

+1

попробуйте @dogmum ... Я исправил форматирование кода, и ** пожалуйста ** просто используйте 'sheet2.Range (« A1 ») .PasteSpecial xlPasteValues'. Нет необходимости в' .Select' –

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