2015-06-13 1 views
-1

Я пытаюсь работать над чем-то в excel VBA, но я не могу заставить его работать нормально.excel click object сохраняет значение из одной ячейки в другую

Вот как это должно работать: Мне нужно скопировать и вставить значение ячейки «J21» с одного листа на другой. НО, значение J21 продолжает меняться каждую неделю. Поэтому я подумал, что, если я создам код, где я просто нажму объект (скажем, «STORE!»), И он копирует значение «J21» из листа 1 в «C3» лист 2. Затем, когда значение J21 изменяется, Я просто нажимаю «МАГАЗИН!». снова и он будет копировать значение J21 и вставить его на «C4» Лист 2 без изменения предыдущего значения на «C3» Лист 2.

Вот моя последняя попытка:

Dim myCell As Range, myRange As Range, i As Long 
i = 3 
Set myRange = Sheets("Summary").Range("C3") 
Set myRange = Range(myRange, myRange.End(xlDown)) 
Sheets("Sheet1").Select 
Range("J21").Copy 
Sheets("Summary").Select 
Cells(i, 3).Select 
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, 
         SkipBlanks:=False, Transpose:=False 
i = i + 1 

myCell и myRange были используется для моих предыдущих попыток, но всегда идет бесконечная копия-вставка.

+0

Необходимо указать код. Используйте макрорекордер, и есть много сайтов, на которых показаны основы написания VBA. – ChipsLetten

+0

Я не очень хорошо разбираюсь в VBA. Я пытался научиться этому только по своему усмотрению. Итак, отказ от ответственности да. Но вот моя последняя попытка: Dim myCell Как Range, MyRange Как Range, я As Long я = 3 Set MyRange = Sheets ("Резюме") Range ("C3") Set MyRange = Range (. MyRange, myRange.End (xlDown)) Sheets ("Лист1"). Выберите Range ("J21"). Copy Sheets ("Резюме"). Выберите Cells (I, 3) .Select Selection.PasteSpecial Вставить: = xlPasteValues, Operation: = xlNone, SkipBlanks _ : = False, Transpose: = False i = i + 1 myCell и myRange использовались для моих предыдущих попыток, но он всегда имеет бесконечную копию-вставку. –

ответ

1

Выбор и копирование в VBA обычно не требуется. Если вы хотите изменить значение ячейки, лучше просто использовать свойство value объекта диапазона. Кажется, вы хотите установить ссылку на первую пустую ячейку ниже C2 на Sheet2. Проблема с вашим кодом заключается в том, что Range (myRange, myRange.End (xlDown)) выбирает целый блок ячеек (над ячейкой, которую вы хотите), а не одну ячейку. В то время как можно было бы правильно использовать .End (xlDown), чтобы добраться до нужной ячейки, несколько сложно получить право, поскольку она ведет себя по-разному в зависимости от того, является ли ячейка под текущей ячейкой пустой. Цикл while - один из способов. Что-то вроде:

Sub store() 
    Dim target As Range, source As Range 
    Set source = Sheets("Sheet1").Range("J21") 
    Set target = Sheets("Sheet2").Range("C3") 
    Do While Not IsEmpty(target.Value) 
     Set target = target.Offset(1) 
    Loop 
    target.Value = source.Value 
End Sub 

Рекомендация Чипа о том, что вы изучаете основы VBA, является хорошей. Если вы кто-то (как я), который учится через книги лучше, чем в онлайн-учебниках, я бы порекомендовал почти что-нибудь от Джона Уокенбаха - я сначала научился программировать Excel, прочитав раннее издание своего «Excel VBA Programming for Dummies».

+0

Почему голос? – ChipsLetten