Знайти та замінити макрос значенням осередку

Знайти та замінити макрос значенням осередку

Проблема

Я маю ці 20 формул (1 на коді акцій) в моїй таблиці, які надходять з etrade

= PROStaticData (2, "mqg.ASX", "2010/08/10; 2010/08/19; 3; True; False", "10")

Я хочу, щоб бути в змозі змінити дати все відразу, у мене є 2 клітини установки значення, які я хочу шукати в M8 і M9, і я хочу, щоб замінити його значеннями в L8 і L9 відповідно, і це чудово працює в будь-якому місці. у таблиці, за винятком зазначеної вище формули, з якоїсь причини вона не буде переглядати формулу для неї, це код, який я використовую.

 Sub theone () 'Selection.Replace Що: = "ValueToFind", Replacement: = Діапазон ("A1"). Значення, LookAt: = xlPart, SearchOrder: = xlByRows, MatchCase: = False, SearchFormat: = False, ReplaceFormat: = False 'Range ("B1: B2") Виберіть Selection.Copy Range ("L8: L9") Виберіть Selection.PasteSpecial Paste: = xlPasteValues, Operation: = xlNone, SkipBlanks _: = False, Transpose: = False Range Виберіть Application.CutCopyMode = False Selection.Copy Range ("L8"). Виберіть Application.CutCopyMode = False Selection.Copy Cells.Replace Що: = Діапазон ("M8"). Значення, Заміна: = Діапазон ( Значення, LookAt: = _ xlPart, SearchOrder: = xlByRows, MatchCase: = False, SearchFormat: = False, _ ReplaceFormat: = False Cells.Replace Що: = Діапазон ("M9"). Значення, Заміна: = Range ("L9"). Значення, LookAt: = _ xlPart, SearchOrder: = xlByRows, MatchCase: = False, SearchFormat: = False, _ ReplaceFormat: = False Range ("L8: L9"). Виберіть Application.CutCopyMode = Діапазон помилкового вибору ("M8: M9"). Виберіть ActiveSheet.Paste End Sub 

Рішення

Ось кілька сумнівів у вашому макросі

Приклад

 Діапазон ("M8") Виберіть Application.CutCopyMode = False Selection.Copy 

Ви копіюєте це значення, але ніколи не вставляєте його і те ж саме з наступним блоком з L8. Можливо, код не потрібний або, можливо, ви забули вставити. Причина, з якої ви не можете її замінити, тому що дата у формулі знаходиться у форматі YYYY / MM / DD. Дата, яку ви шукаєте, не в такому форматі. Тому потрібно додати ще один пошук і замінити там, де ви шукаєте дату, у форматі YYYY / MM / DD і замінити в тому ж

 Cells.Replace What: = FORMAT (діапазон ("M8"). Значення, "YYYY / MM / DD"), заміна: = FORMAT (діапазон ("L8"). Значення, "YYYY / MM / DD"), LookAt : = _ xlPart, SearchOrder: = xlByRows, MatchCase: = False, SearchFormat: = False, _ ReplaceFormat: = False 

Ось ваш перероблений матеріал.

 Sub theone () Dim sDateFind As String Dim sDateRep As String Range ("B1: B2"). Виберіть Selection.Copy Range ("L8: L9"). Виберіть Selection.PasteSpecial Paste: = xlPasteValues, _ Operation: = xlNone, _ SkipBlanks: = False, _ Transpose: = False Range ("M8") Виберіть Application.CutCopyMode = False Selection.Copy Range ("L8"). Виберіть Application.CutCopyMode = False Selection.Copy sDateFind = Діапазон ("M8") Значення sSateRep = Діапазон ("L8"). Значення Cells.Replace Що: = Діапазон ("M8"). Значення, _ Заміна: = Діапазон ("L8"). Значення, _ LookAt: = xlPart, _ SearchOrder: = xlByRows, _ MatchCase: = False, _ SearchFormat: = False, _ ReplaceFormat: = False Cells.Replace Що: = Формат (sDateFind, "yyyy / mm / dd"), _ Заміна: = Формат (sDateRep, "yyyy / mm / dd "), _ LookAt: = xlPart, _ SearchOrder: = xlByRows, _ MatchCase: = False, _ SearchFormat: = False, _ ReplaceFormat: = False sDateFind = Діапазон (" M9 "). Значення sDateRep = Діапазон (" L9 ") Значення, _ Заміна: = Діапазон ("L9"). Значення, _ LookAt: = xlPart, _ SearchOrder: = xlByRows, _ MatchCase: = False, _ SearchFormat: = False, _ ReplaceFormat: = False Cells.Replace Що: = Формат (sDateFind, "yyyy / mm / dd"), _ Заміна: = Формат (sDateRep, "yyyy / mm / dd"), _ LookAt : = xlPart, _ SearchOrder: = xlByRows, _ MatchCase: = False, _ SearchFormat: = False, _ ReplaceFormat: = False Range ("L8: L9"). Виберіть Application.CutCopyMode = False Selection.Copy Range ("M8: Виберіть ActiveSheet.Paste End Sub 

Примітка

Вирішено за допомогою rizvisa1

Попередня Стаття Наступна Стаття

Кращі Поради