Защо първата задача не се изпълнява в Sheet2, а се връща в 1?

Microsoft Excel Електронни таблици Microsoft 365 Excel VBA Програмиране VBA за Excel

Защо след като създам макроса Select Sheet и го копирам в CopyFormula след F5 той се изпълнява в Sheet 1, а не в Sheet 2. Така става и в урока. Не мога да намеря къде греша. Този макрос би трябвало да работи и в следващ Sheet, напр. 3, но не се получава. 

Здравейте Любен, Не е грешка!

Инструкцията е Sheets("Sheet1").Range("D3:G9") = "=Randbetween(800,1700)". Това означава, че винаги ще се изпълнява за Range("D3:G9") на лист Sheet1, независимо кой е активния лист. За да работи макросът за всеки лист, т.е. да се изпълнява за всеки лист, който е активен, тогава трябва да премахнете Sheets("Sheet1") и да остане само Range("D3:G9") = "=Randbetween(800,1700)".

Тествайте, за да видите разликата в изпълнението на макроса.

Ако имате още въпроси, пишете!

Здравейте! Нещо не разбрах. При мен се получава абсолютно същото, както при г-н Помаков. Още преди да прочета въпроса му (и отговора на г-жа Вълкова), аз също мислех, че макроса трябва да се изпълнява в листа, който работим. Иначе, просто не се сещам за практическо приложение. Наистина, след като оставих само Range("D3:G9") = "=Randbetween(800,1700)", макросът проработи и на двата листа, да дори и на нови такива, които добавих (наистина, на новите листа, не се получава форматирането). Има обаче, един интересен момент - при това положение, макросът повече не копира формулата от Sheet1!A3, а изпълнява задачата, благодарение на записа "=Randbetween(800,1700)".
В последното се убедих, просто като изтрих формулата в Sheet1!A3, но това ни най-малко не "смути" макроса... Работя в EXCEL2010. Надявам се, в следващите уроци, да намеря отговор на задачата.

Здравейте, Валентин. В инструкцията (реда) Sheets("Sheet1").Range("D3:G9") = "=Randbetween(800,1700)" пред Range("D3:G9") е включен листа Sheets("Sheet1"), където се въвежда формулата. В Excel избираме клетка, диапазон или лист, за да се изпълни команда. Във VBA е достатъчно точно да се дефинира обекта, не е необходимо да се избира, за се изпълни команда. В конкретния пример, Sheets("Sheet1").Range("D3:G9") формулата ще се въвежда винаги в Range("D3:G9") на лист Sheet1. Всеки лист има Range("D3:G9"), но когато се добави отпред Sheets("Sheet1").Range("D3:G9"), тогава формулата се копира само и единствено в диапазона Range("D3:G9"), който се намира на лист Sheet1, без значение кой е активния лист. Как се дефинират и управляват различни обекти във VBA разглеждам в следващите модули и уроци и се надявам скоро да намерите сам отговор на въпроса си. Но въпреки това, ако имате въпроси или нещо не е ясно, моля пишете ме. Ще се радвам да бъда полезна!

Благодаря за отговора!

Здравейте, пиша във връзка с последната под задача за поставяне на рамка. Как само с тази инструкция (вж.: следващия параграф) успявате при изпълнение на макроса да постигнете All Borders за селекцията?

With Selection.Borders(xlInsideHorizontal) .LineStyle = xlContinuous

    .Weight = xlThin
End With

При мен не се поучава, само хоризонталните линии се запълват. За да постигна това, което виждаме от видеото, кодът е следния.


Вашият отговор

Научи компютърните програми онлайн от топ експертите на България
Регистрацията в АУЛА ви дава:
  • 20 безплатни урока
  • Трикове и тънкости за софтуера
  • Отговори на вашите въпроси
  • Регистрация