2014-01-24 9 views
0

Я написал vba, чтобы объединить 50 листов в один мастер-лист. Оно работает. Теперь, хотя им нужно знать, на каком листе эта запись появилась для исправления. Как я могу записать имя листа?Название листа захвата для диапазона копирования

For Each sh In ActiveWorkbook.Worksheets 

If sh.Name <> DestSh.Name 
Then Last = Range("A100000").End(xlUp).Row 
Set CopyRng = sh.Range("A2:k2" & Cells(Rows.Count, "A").End(xlUp).Row) 
If Last + CopyRng.Rows.Count > DestSh.Rows.Count Then 
MsgBox "There are not enough rows in the " & _ 
      "summary worksheet to place the data." 
GoTo ExitTheSub 
End If 

CopyRng.Copy 

With DestSh.Cells(Last + 1, "A") 
.PasteSpecial Paste:=xlPasteValues, skipBlanks:=True 
Application.CutCopyMode = False 
End With 

(CopyRng.Rows.Count).Value = sh.Name 

End If 

Next 
+0

Проводка некоторого кода поможет много. – Taosique

+0

Проблема в том, что я не могу отправлять сообщения на ваш сайт с работы, поэтому мне нужно использовать сотовый телефон. Просто нужно сказать, что вы захватили имя листа и сохранили его в столбце L, если это имеет смысл. – user3232490

+0

Не зная больше, я бы сказал, что самым простым способом было бы просто добавить столбец справа, возможно, озаглавленный «Исходный лист», возможно, и просто заполнить его во всех записях. Затем отредактируйте VBA, чтобы захватить его. Простой, но он должен работать ... с дополнительным преимуществом, позволяющим сортировать на листе ... должно быть полезно. – James

ответ

1

Если у вас есть диапазон и хотите знать лист, связанный с этим Диапазон:

Public Function WhichSheet(r As Range) As String 
    WhichSheet = "" 
    If Not r Is Nothing Then 
     WhichSheet = r.Parent.Name 
    End If 
End Function 
0

Это был ответ, что это сделал ...

CopyRng.Copy 

With DestSh.Cells(Last + 1, "A") 
.PasteSpecial Paste:=xlPasteValues, skipBlanks:=True 
Application.CutCopyMode = False 
End With 

DestSh.Cells(Last + 1, "Q").Resize(CopyRng.Rows.Count).Value = sh.Name 

Спасибо за помощь, ребята.

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