2014-03-18 7 views
0

Итак, есть книга, в которой выполняется макрос, созданный другой группой в компании и ее GARBAGE, но они заблокировали ее и не позволят мне изменять VBA. Поэтому я пытаюсь извлечь из этой книги выход из этой книги. Заголовки диапазона находятся в объединенных рядах, а первые 11 строк заняты кнопками для запуска макроса.Выбор диапазона с помощью слияющих ячеек

Вот мой текущий код

Sub Pull_Data() 
Dim returnValue As Variant 
Dim wb As Workbook 
Dim ws As Worksheet 
Dim wb2 As Workbook 
Dim ws2 As Worksheet 
Set wb2 = Application.Workbooks("name.xlsm") 
Set ws2 = wb2.Worksheets("INPUT") 
Dim rng As Range 
r = Range("H65536").End(xlUp).Row 
Set ws = wb.Worksheets("Report") 
ws.Range("A11:A13").Select 
Set rng = ws.Range(Cells(11, 1), Cells(r, 8)) 
rng.Select 
rng.Copy 
    wb2.Activate 
ws.Range(Cells(1, 1), Cells(r, 8)).PasteSpecial xlPasteAll 

End Sub 

Моя проблема заключается в том, что, когда я пытаюсь выбрать весь вывод, что иногда выбирает то, что я хочу (А11 Н, то последняя строка со значением), но иногда выбирает A1 : H11 и его разочарование, как черт понять эту проблему. Если есть лучший способ, я бы с удовольствием узнал.

EDIT:

Обновленный код

Sub Pull_Data() 
Dim returnValue As Variant 
Dim wb As Workbook 
Dim ws As Worksheet 
Dim wb2 As Workbook 
Dim ws2 As Worksheet 
Set wb2 = Application.Workbooks("name.xlsm") 
Set ws2 = wb2.Worksheets("INPUT") 
Dim rng As Range 
r = Application.Max(Range("H65536").End(xlUp).Row, 11) 
Set ws = wb.Worksheets("Report") 
ws.Range("A11:A13").Select 
Set rng = ws.Range(Cells(11, 1), Cells(r, 8)) 
rng.Select 
rng.Copy 
    wb2.Activate 
ws.Range(Cells(1, 1), Cells(r, 8)).PasteSpecial xlPasteAll 

End Sub 
+0

Если нет содержания в ColH тогда было бы выбрать A1: H11. Попробуйте 'r = Application.Max (Range (« H65536 »). End (xlUp) .Row, 11)' вместо того, что у вас есть сейчас. –

+0

ОК, поэтому я внес изменения, и я обновлю свой код, чтобы отразить изменения. Он работал в первый раз, но ..... затем я закрыл книгу и снова запустил код, и теперь он выбирает только верхний ряд, поэтому мысли A11: H13? – user3271518

ответ

0
r = Application.Max(Range("H65536").End(xlUp).Row, 11) 'wich sheet is the range assiciated with ? 
Set ws = wb.Worksheets("Report") 
ws.Range("A11:A13").Select 'how is this line usefull at all ? 
Set rng = ws.Range(Cells(11, 1), Cells(r, 8)) ' change to ws.Range(ws.Cells(11, 1), ws.Cells(r, 8)) 
rng.Select 'delete this line 
rng.Copy ' 
wb2.Activate 
ws.Range(Cells(1, 1), Cells(r, 8)).PasteSpecial xlPasteAll 'change to ws.Range(ws.Cells(1, 1), ws.Cells(r, 8)).PasteSpecial xlPasteAll 
+0

Я просто приступаю к публикации, что, как мне кажется, r нужно указать на листе. Что касается некоторых ваших других вопросов, я поставил их там, как чек, прежде чем я позволил ему вслепую скопировать. Я отправлю результаты в ближайшее время – user3271518

0

Вместо того, чтобы тянуть данные из garbage.xlsm в вашей книге, скопируйте весь лист в книге.

Тогда в вашей версии листа, удалить слияние и т.д.

+0

Моя цель - сделать это программно, поэтому, если делать это так, не нужно делать больше шагов? – user3271518

+0

Возможно, еще один шаг ......., но как только лист находится в ** вашей ** книге, вы можете манипулировать им по своему усмотрению. –

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