2016-02-01 1 views
0

Вот что у меня есть. Это макрос для запуска текста в столбцы вставленного материала. Затем он втягивается в другой лист, который имеет vlookups. После того, как v-look up успешно вытащил формулу, я хочу скопировать ее специальную ценность. Но не ячейки под ним в столбцах D-J, которые имеют vlookups для вытягивания формул для данных, скопированных позже. Пожалуйста помогите. Я очень новичок в макросах.Marco - После завершения вычисления я хочу вставить значения в вычисленные строки, но сохранить формулы в строках ниже

Sub Macro1() 
 
' 
 
' Macro1 Macro 
 
' 
 
' Keyboard Shortcut: Ctrl+v 
 
' 
 
    Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _ 
 
     TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=True, _ 
 
     Semicolon:=False, Comma:=False, Space:=True, Other:=False, FieldInfo _ 
 
     :=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1)), TrailingMinusNumbers:= _ 
 
     True 
 
    Sheets("Bags").Select 
 
    Columns("D:J").Select 
 
    Selection.Copy 
 
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ 
 
     :=False, Transpose:=False 
 
End Sub

+0

Добро пожаловать в SO. Ваш вопрос довольно неясен. Пожалуйста, прочитайте [Как спросить] (http://stackoverflow.com/help/how-to-ask), чтобы получить самую эффективную помощь на сайте. –

ответ

0

Я понимаю, что вы храните некоторые данные в столбце А, сделать текст в столбцы части, а затем скопировать-вставить только строки в столбце D: J, где на самом деле данные в колонке А: С. Другими словами: после выполнения вычисления вы хотите вставить значения в вычисленные строки, но сохраните формулы в строках ниже.

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

Приведенный ниже пример оставит введенные формулы в столбцах D: J неповрежденными для строк, которые не имеют данных в столбце A: C.

Sub Macro1() 

Dim lastRow as integer 'We need a variable to store the row number in. 

' 
' Macro1 Macro 
' 
' Keyboard Shortcut: Ctrl+v 
' 
    Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _ 
     TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=True, _ 
     Semicolon:=False, Comma:=False, Space:=True, Other:=False, FieldInfo _ 
     :=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1)), TrailingMinusNumbers:= _ 
     True 

'Let's assume this first part works correctly, since your question does not address this. 
'However - Keep in mind that the text to columns have a destination that will always be A1 in your example. 

    lastRow = Sheets("Bags").Range("A65535").end(xlUp).Row 'Determine the last row in column A that has a value in it. 
    Sheets("Bags").Range("D2:J" & lastRow).Select 'Select only the rows that have values in column A. 
    Selection.Copy 
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ 
     :=False, Transpose:=False 
End Sub 

Комментарии к этому ответу: Это будет исправить вашу непосредственную проблему, однако до сих пор не очень чистый способ сделать это. Также я не думаю, что вышеуказанный код будет делать именно то, что вы хотите. вопрос ответил: Как изменить ваш код, так что теперь переписать формулы в D: J в строках, которые не имеют никаких данных в A.

Другие примечания/указатели: Далее: Если можно попытаться избежать отборы вообще. Там большой вопрос + asnwers о том, как и почему в старой угрозы здесь: How to avoid using Select in Excel VBA macros

Также я рекомендую прочитать до того, как ссылаться на диапазоны/ячейки:

https://msdn.microsoft.com/en-us/library/office/aa221357(v=office.11).aspx

http://excelmatters.com/referring-to-ranges-in-vba/

http://spreadsheetpage.com/index.php/tip/referring_to_ranges_in_your_vba_code/

Зная, как это работает, это хорошее начало, когда оно новое для Макро. Удачи!

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