2015-11-25 7 views
0

У меня возникли проблемы с пониманием того, что делает функция ниже.Копирование данных на другой лист

Сама функция имеет возможность копировать данные на листе Sheet History. Однако я не понимаю, как это делается?

Sub histFunc() 

Dim Y As String 
Y = "R" & Range("G7").Value 

    Sheets("Sheet History").Select 
    Range("h17").Select 

    Cells.Find(What:=Y, After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _ 
     xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _ 
     , SearchFormat:=False).Activate 
    Range(Selection, Selection.End(xlToRight)).Select 
    Application.CutCopyMode = False 
    Selection.Copy 
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ 
     :=False, Transpose:=False 
    Application.CutCopyMode = False 
    Sheets("Sheet Current").Select 

End Sub 

Любые предложения по использованию этого макроса?

Я ценю ваши ответы!

ответ

0

После немного очистки, это то, что это может выглядеть следующим образом (объяснения ниже):

Sub histFunc() 
Dim FindRange As Range, _ 
    LookForValue As String 
LookForValue = "R" & Range("G7").Value 

With Sheets("Sheet History") 
    .Range("h17").Activate 
    Set FindRange = .Cells.Find(What:=LookForValue, _ 
        After:=ActiveCell, _ 
        LookIn:=xlFormulas, _ 
        LookAt:=xlPart, _ 
        SearchOrder:=xlByRows, _ 
        SearchDirection:=xlNext, _ 
        MatchCase:=False, _ 
        SearchFormat:=False) 

    Application.CutCopyMode = False 

    Range(FindRange, FindRange.End(xlToRight)).Copy 
    FindRange.PasteSpecial Paste:=xlPasteValues, _ 
          Operation:=xlNone, _ 
          SkipBlanks:=False, _ 
          Transpose:=False 
End With 

Application.CutCopyMode = False 
Sheets("Sheet Current").Select 

End Sub 

Я изменил Y к LookForValue для лучшего понимания и использовать переменную Range, чтобы ссылаться на результат метода Find ,

Так этот код, шаг за шагом:

  1. Определить LookForValue как "R" & Range("G7").Value
  2. поиска этого значения в формулах Sheet History
  3. Копии блок данных (в строке результата, из результат вправо, пока не будет пробел)
  4. Вставьте его в то же место, но в значения, чтобы вы избавились от формул!
1

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

Шаг за шагом Объяснение

Получить значение ячейки G7:

Y = "R" & Range("G7").Value 

Выбрать лист лист История и выберите ячейку H17:

Sheets("Sheet History").Select 
Range("h17").Select 

Выполняет Find метод более Cells, все ячейки в лист (обратите внимание, что если параметр не задан, то это диапазон всех ячеек в текущем листе):

Cells.Find(What:=Y, After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _ 
    xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _ 
    , SearchFormat:=False).Activate 

Это возвращает:

Объект Range, который представляет собой первую ячейку, в которой эта информация найденный.

Для получения дополнительной информации см. Find documentation. Теперь из-за .Activate выбрана ячейка (первая), где значение было найдено.Этот выбор продолжается до конца строки:

Range(Selection, Selection.End(xlToRight)).Select 

Затем CutCopyMode деактивируется, чтобы clear the clipboard after usage:

Application.CutCopyMode = False 

Теперь выбранные ячейки скопировать и вставить:

Selection.Copy 
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ 
    :=False, Transpose:=False 

Примечание что они наклеены на PasteSpecial на в том же месте, используя xlPasteValues поддерживать только значения и, следовательно, не иметь никаких формул или ссылок в ячейках.

Теперь переходим к Sheet Current:

Sheets("Sheet Current").Select 
Смежные вопросы