title | keywords | f1_keywords | ms.prod | api_name | ms.assetid | ms.date | ms.localizationpriority |
---|---|---|---|---|---|---|---|
Range.Locked property (Excel) |
vbaxl10.chm144157 |
vbaxl10.chm144157 |
excel |
Excel.Range.Locked |
93c5f21d-6429-3287-0992-c810b9a429a8 |
05/11/2019 |
medium |
Range.Locked property (Excel)
Returns or sets a Variant value that indicates if the object is locked.
Syntax
expression.Locked
expression A variable that represents a Range object.
Remarks
This property returns True if the object is locked, False if the object can be modified when the sheet is protected, or Null if the specified range contains both locked and unlocked cells.
Example
This example unlocks cells A1:G37 on Sheet1 so that they can be modified when the sheet is protected.
Worksheets("Sheet1").Range("A1:G37").Locked = False Worksheets("Sheet1").Protect
[!includeSupport and feedback]
Александр Медведев Пользователь Сообщений: 245 |
#1 17.11.2015 23:07:56 Добрый вечер. Посоветуйте как оптимизировать (ускорить) выполнение макроса, который ставит, а потом снимает защиту с объединенных ячеек. Сейчас использую как компромис такой вариант (z1, z2, z3, z4, z5 — это имена диапазонов):
В результате получается долго и некрасиво. Прикрепленные файлы
Если не можешь победить беспорядок, то надо возглавить его. |
||
Sanja Пользователь Сообщений: 14838 |
#2 17.11.2015 23:11:47 Не уверен что будет быстрее, но попробуйте
Согласие есть продукт при полном непротивлении сторон. |
||
В том то и дело, что диапазон z3 на отдельных листах может быть пустым. Изменено: Александр Медведев — 17.11.2015 23:14:51 Если не можешь победить беспорядок, то надо возглавить его. |
|
Sanja Пользователь Сообщений: 14838 |
Зачем такие сложности? Определяйте необходимые диапазоны в зависимости для какого листа выполняется макрос (активного листа) Согласие есть продукт при полном непротивлении сторон. |
Вообще, этот вариант с включением/выключением защиты ячеек тоже не совсем меня устраивает. Изменено: Александр Медведев — 17.11.2015 23:23:49 Если не можешь победить беспорядок, то надо возглавить его. |
|
Хочу сделать универсальный вариант, где по минимуму необходимо делать руками. Изменено: Александр Медведев — 17.11.2015 23:31:02 Если не можешь победить беспорядок, то надо возглавить его. |
|
JayBhagavan Пользователь Сообщений: 11833 ПОЛ: МУЖСКОЙ | Win10x64, MSO2019x64 |
#7 18.11.2015 07:04:59
Что значит пустые? Выходят за пределы UsedRange? Тогда делайте проверку:
<#0> |
||||
Как-то всё непонятно… Всё сложное — не нужно. Всё нужное — просто /М. Т. Калашников/ |
|
Александр Медведев Пользователь Сообщений: 245 |
#9 26.11.2015 21:59:39 Долго не мог ответить и поддержать разговор Спасибо JayBhagavan и Михаил Лебедев за ваши варианты. Михаил Лебедев , в вашем коде для себя интересный момент на заметку взял. По одному месту кода есть вопрос. Разве в имени диапазона разрешается использовать переменные. Я так уже пробовал, но ничего не получилось. Может что не так делал. Ругается на это место:
Пишет, что нельзя установить свойство Locked класса Range. Изменено: Александр Медведев — 26.11.2015 22:00:54 Если не можешь победить беспорядок, то надо возглавить его. |
||
RAN Пользователь Сообщений: 7091 |
Защиту листа снять слабо? Изменено: RAN — 26.11.2015 22:16:25 |
Александр Медведев Пользователь Сообщений: 245 |
#11 26.11.2015 22:18:45 Так нет ее, защиты… Пока упростил до такого варианта. Работает.
Изменено: Александр Медведев — 26.11.2015 22:30:30 Если не можешь победить беспорядок, то надо возглавить его. |
||
The_Prist Пользователь Сообщений: 14182 Профессиональная разработка приложений для MS Office |
#12 26.11.2015 22:31:50
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы… |
||
Но если один диапазон = Nothing, то Union выдает ошибку. Если не можешь победить беспорядок, то надо возглавить его. |
|
The_Prist Пользователь Сообщений: 14182 Профессиональная разработка приложений для MS Office |
#14 26.11.2015 22:59:36
А почему он вдруг Nothing? Если это так — значит логика кода плохо построена. Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы… |
||
Он не вдруг. Он специально. Немного ранее про это написал. Если не можешь победить беспорядок, то надо возглавить его. |
|
The_Prist Пользователь Сообщений: 14182 Профессиональная разработка приложений для MS Office |
#16 26.11.2015 23:12:30 Так сделайте массив и идите по нему. Мало чем от Union будет отличаться.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы… |
||
Александр Медведев Пользователь Сообщений: 245 |
#17 26.11.2015 23:13:21 Он не вдруг. Он специально. Немного ранее про это написал.
меня вполне устроил. Стало быстро практически незаметно. А вот над постом №5 буду думать. Это основной вопрос. Если не можешь победить беспорядок, то надо возглавить его. |
||
Александр Медведев Пользователь Сообщений: 245 |
#18 26.11.2015 23:14:45 Точно, массивом можно! Если не можешь победить беспорядок, то надо возглавить его. |
Содержание
- Range locked vba excel
- How to unlock and lock Excel cells for running a macro
- 4 Answers 4
- Error 1004 when setting Range.Locked
- 5 Answers 5
- Lock certain cells in a range
- 7 Answers 7
- How to lock a cell in Excel formula using VBA
- Protection
- Lock Cells
- Detect Cells with Formulas
- Lock cells and protect a worksheet
Range locked vba excel
Помогите пожалуйста!
Есть код макроса, который находится на листе, а не в модуле.
Требуется определенные ячейки защитить от редактирования.
[vba]
200?’200px’:»+(this.scrollHeight+5)+’px’);»> ActiveWorkbook.Activate
Sheets(«Entrance»).Activate
Columns(«A:L»).Select
Selection.Locked = True
Sheets(«Entrance»).Activate
Получаю ошибку «Run-time error ‘1004’ Метод Select из класса Range завершен неверно» и выделяется строка:
[vba]
Как можно исправить это?
Заранее спасибо!
Помогите пожалуйста!
Есть код макроса, который находится на листе, а не в модуле.
Требуется определенные ячейки защитить от редактирования.
[vba]
200?’200px’:»+(this.scrollHeight+5)+’px’);»> ActiveWorkbook.Activate
Sheets(«Entrance»).Activate
Columns(«A:L»).Select
Selection.Locked = True
Sheets(«Entrance»).Activate
Получаю ошибку «Run-time error ‘1004’ Метод Select из класса Range завершен неверно» и выделяется строка:
[vba]
Как можно исправить это?
Заранее спасибо! Red_Sloth
Помогите пожалуйста!
Есть код макроса, который находится на листе, а не в модуле.
Требуется определенные ячейки защитить от редактирования.
[vba]
200?’200px’:»+(this.scrollHeight+5)+’px’);»> ActiveWorkbook.Activate
Sheets(«Entrance»).Activate
Columns(«A:L»).Select
Selection.Locked = True
Sheets(«Entrance»).Activate
Получаю ошибку «Run-time error ‘1004’ Метод Select из класса Range завершен неверно» и выделяется строка:
[vba]
Как можно исправить это?
Заранее спасибо! Автор — Red_Sloth
Дата добавления — 14.02.2016 в 14:06
Источник
How to unlock and lock Excel cells for running a macro
I have a spreadsheet that has two buttons — To retrieve records from database and another one to upload changes from excel to database. The macro for retrieving records from Database is as follows. Now after retrieving the records, I want the users only to edit certain columns( here the columns from January to Scenario) so that the users, after updating those cells can click on the update button to save the changes to the database. However, I don’t want them to touch the other columns ( EmpID through Status).I want a macro that would lock those columns after data retrieval and unlock while retrieving the records on clicking the Retrieval button. This is because I am clearing the worksheet whenever I click on the retrieve records buttons. I tried several methods and it’s not working. I would appreciate your help.
4 Answers 4
One of the best ways to learn how to do something in VBA is simply to perform the task with the Macro Recorder on. That way you will know the basic code required to complete the task.
It also helps to understand that all cells start off with a property of «Locked» but that only becomes useful when the workbook is Protected using the Review > Protect Sheet option.
So to make sure no one can change all any of the cells in your book after the data has been changed, you’d need to protect the workbook using:
The various options could be changed or removed depending on what you want done.
As I understand it, you want only certain columns locked. In this case, you actually have to unlock the cells you will allow them to enter — so you have to think about it backwards.
This line of code would set the Locked property of the cells C1:C1000 to False so that when the Workbook is Protected, the user can still edit the cells:
If you have any other questions, just post.
Источник
Error 1004 when setting Range.Locked
I get the catch-all runtime error 1004, «unable to set the Locked property of the Range class» when, well, trying to set the Locked property of a Range object. The code looks like this:
When I set a breakpoint on the line and try to query the value of that_goddamn_range.Locked from the Immediate window, this works without problem, but setting it fails.
If, however, I run that_goddamn_range.Select , break the macro, unprotect the sheet (it gets reprotected automatically on selection change) then right click, pick Properties, switch to the Protection tab and tick Locked then confirm, things work okay however.
What could possibly be going wrong?
5 Answers 5
Here’s a complete explanation:
Typically, there are two causes of this error: trying to change a cell’s Locked property on a protected sheet and/or trying to change the Locked property of a single cell in a merged range.
In the first case, you can either unlock the sheet or set UserInterfaceOnly protection for it, which is highly recommended since you then don’t have to mess with repeatedly unlocking/locking it.
With regard to merged cells, you can’t lock a single cell that is part of a merged range but there are reasonable options:
If you are using cell-address notation to reference the cell/range,
then reference the whole merged range instead:
Range(«A1:A3»).Locked = True ‘where «A1:A3» is the entire merged range
If you are using a named range for a set of merged cells, by default it will be defined to reference the first of the merged cells only. You can either edit its definition to include the entire merged range or use its MergeArea property to reference its associated merged range:
But note that you can’t do both since the MergeArea property is, apparently, undefined for a range that is not a strict subset of a larger merged area!
Of course, you can always unmerge the merged range before setting the Locked property of an included cell and then re-merge it afterward, but I have never seen a situation in which one of the above two solutions wasn’t sufficient (and much cleaner).
Источник
Lock certain cells in a range
I’m trying to loop through a range of cells, locking any cell that has content while leaving empty cells unlocked.
When I run the below code the result is the entire sheet is locked. If I add an else statement the sheet is unlocked. Basically whatever the last .locked = (true, false) statement is is how the entire sheet winds up.
Change 1 Is it possible that I have some setting on/off that is interfering since I’m the only one who is unable to get any of this to work?
7 Answers 7
You can try this.
If you say Range(«A1»).Select, then it locks only A1. You can specify multiple cells to be locked by specifying as follows:
A3:A12,D3:E12,J1:R13,W18
This locks A3 to A12 and D3 to E12 etc.
I may be missing something but.
. will lock all cells on the active sheet. If you just change it to.
. then it works; I think?! As the range is very small, you may as well not unlock cells at the start, and instead unlock cells whilst locking them e.g.
If you are new to VBA, I would recommend cycling through code line-by-line as described in this Excel consultant’s video. If you step through code, you can check «has cell A7 behaved as expected?». instead of just seeing the end product
A quick way to unlock non-blank cells is to use SpecialCells see below.
On my testing this code handles merged cells ok, I think this is what is generating your error on Tim’s code when it looks to handle each cell individually (which to be clear is not an issue in Tim’s code, it is dealing with an unexpected outcome)
You may also find this article of mine A fast method for determining the unlocked cell range useful
I know this is an old thread, but I’ve been stuck on this for a while too, and after some testing on Excel 2013 here’s what I conclude if your range includes any merged cell
- The merged cells must be entirely included within that range (e.g. the merging must be entirely within the range being lock/unlocked
- The range being merged can be larger, or at least exactly the range corresponding to the merged cells. If it’s a named range that works as well.
Also, you cannot lock/unlock a cell that is already within a protected range. E.g if you run:
Twice it will work the first time, and fail the second time around. So you should unprotect the target range (or the sheet) before.
Источник
How to lock a cell in Excel formula using VBA
Users entering data into the wrong cells or changing existing formulas can make data collection a tedious process. However, you can prevent users from going outside the intended boundaries by disabling certain sections of your workbook. In this article, we’re going to show you how to lock a cell in Excel formula using VBA.
Protection
Worksheets are objects in a workbook’s worksheet collection and they have Protect and Unprotect methods. These methods determine the protected status of a worksheet as the name suggests. Both methods can get accept other optional arguments. The first is the password argument. By setting a string for the parameter argument, you can lock your worksheets with a password. Below is a breakdown.
Lock Cells
Important note: Protecting a sheet does not lock individual cells! The cells you want to lock should be marked as Locked too. A cell can be marked as Locked, and/or Hidden, in two ways:
The User Interface method requires using the Format Cells dialog. Select a cell or a range of cells, and press Ctrl + 1 to open this menu and go to the Protection tab. Use the corresponding checkboxes to activate properties.
The second method is doing this via VBA code. Every cell and range can be made Locked and FormulaHidden properties. Set these two as True or False to change their status.
You can use the Hidden status to hide your formulas as well.
Detect Cells with Formulas
If you just need to lock only cells with formulas, you need to first identify cells that have formulas. The cells and ranges have a HasFormula property, which makes them read only. It returns a Boolean value based on whether the cell or range has a formula. A simple loop can be used to detect cells in a given range that contain formula.
To run this code, you need to add a module into the workbook or the add-in file. Copy and paste the code into the module to run it. The main advantage of the module method is that it allows saving the code in the file, so that it can be used again later. Furthermore, the subroutines in modules can be used by icons in the menu ribbons or keyboard shortcuts. Remember to save your file in either XLSM or XLAM format to save your VBA code.
Lock cells and protect a worksheet
The code example below checks every cell in the range «B4:C9» from the active worksheet. If a cell has a formula, it locks the cell. Otherwise, the cell becomes or remains unlocked.
Источник
Дарика 12 / 7 / 3 Регистрация: 13.09.2010 Сообщений: 63 |
||||
1 |
||||
12.01.2012, 17:34. Показов 13159. Ответов 15 Метки нет (Все метки)
При попытке защиты ячейки выскакивает ошибка Error 1004 Нельзя установить свойство Locked класса Range. Перепроверила уже все и вся, никак не могу понять причину. Помогите!
0 |
3217 / 966 / 223 Регистрация: 29.05.2010 Сообщений: 2,085 |
|
12.01.2012, 18:08 |
2 |
Изначально все ячейки защищены, но без защиты листа можно вносить изменения в ячейки до установки пароля (может быть и пустой пароль) на лист. Поэтому снятие защиты с листа позволяет изменять ячейки любым образом. Есть ли смысл экспериментировать со свойством Locked.
0 |
12 / 7 / 3 Регистрация: 13.09.2010 Сообщений: 63 |
|
12.01.2012, 18:10 [ТС] |
3 |
Изначально все ячейки защищены, но без защиты листа можно вносить изменения в ячейки до установки пароля (может быть и пустой пароль) на лист. Поэтому снятие защиты с листа позволяет изменять ячейки любым образом. Есть ли смысл экспериментировать со свойством Locked. Мне нужно, чтобы сначала (при первом цикле) определенная ячейка защищалась(т.е. ее нельзя было изменить), а при втором цикле защищался весь лист. Если подскажете, как это сделать, буду безмерно благодарна.
0 |
3217 / 966 / 223 Регистрация: 29.05.2010 Сообщений: 2,085 |
|
12.01.2012, 18:14 |
4 |
Для защиты ячеек необходимо защитить лист.
0 |
12 / 7 / 3 Регистрация: 13.09.2010 Сообщений: 63 |
|
12.01.2012, 18:17 [ТС] |
5 |
Для защиты ячеек необходимо защитить лист. Мне не нужна защита всего листа, мне нужна защита одной ячейки а уже потом листа. То есть это должны быть разные процедуры.
0 |
3217 / 966 / 223 Регистрация: 29.05.2010 Сообщений: 2,085 |
|
12.01.2012, 18:24 |
6 |
Это невозможно.
0 |
12 / 7 / 3 Регистрация: 13.09.2010 Сообщений: 63 |
|
12.01.2012, 18:31 [ТС] |
7 |
Это невозможно. Это абсолютно точно возможно.
0 |
3217 / 966 / 223 Регистрация: 29.05.2010 Сообщений: 2,085 |
|
12.01.2012, 18:46 |
8 |
Одновременно защищенные и незащищенные ячейки могут быть только на защищенном листе!
0 |
1702 / 189 / 19 Регистрация: 20.11.2011 Сообщений: 281 |
|
12.01.2012, 20:04 |
9 |
Это абсолютно точно возможно. Так покажите нам, как защитить ячейку не защищая лист именно инструментом «Защита». Можно без макросов, руками. Так, чтоб ее нельзя было редактировать на незащищенном листе. Думаю, для всех это будет очень познавательно.
0 |
3217 / 966 / 223 Регистрация: 29.05.2010 Сообщений: 2,085 |
|
12.01.2012, 20:21 |
10 |
Если установить на файл флажок » Пометить как окончательный» тогда невозможно редактировать файл и в т.ч. и лист до снятия этого флажка.
0 |
Dragokas 17991 / 7617 / 890 Регистрация: 25.12.2011 Сообщений: 11,351 Записей в блоге: 17 |
||||
12.01.2012, 20:39 |
11 |
|||
В Вашем случае 1004 — это попытка изменения атрибута защиты ячейки или области при неснятой защите листа. Почему? Так, как у Вас в алгоритме неверно проставлены окончания циклов Next. Кроме того, под Next у Вас попадают и некоторые Dimensions. toiai, прав. Но можно действительно сделать разные процедуры. Защита листа предусматривает опции исключений. Таким образом она будет влиять только на одну защищаемую ячейку. Процедура 1. Защита ячейки [A1] Эта процедура делает все вышесказанное при передаче ей параметров Y, X
Также не рекомендую Вам использовать метод Activate (который у Вас тоже попал под цикл), а по возможности и метод Select тоже. Это вызовет мельтешение и замедление работы. Можно обращаться к ячейкам напрямую. Если нужна помощь передайте файл целиком со всеми объектами.
0 |
Дарика 12 / 7 / 3 Регистрация: 13.09.2010 Сообщений: 63 |
||||
13.01.2012, 10:27 [ТС] |
12 |
|||
Так покажите нам, как защитить ячейку не защищая лист именно инструментом «Защита». Можно без макросов, руками. Так, чтоб ее нельзя было редактировать на незащищенном листе. Думаю, для всех это будет очень познавательно.
0 |
1702 / 189 / 19 Регистрация: 20.11.2011 Сообщений: 281 |
|
13.01.2012, 10:31 |
13 |
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True Дарика, что по Вашему делает эта строка? Я просил:
Так, чтоб ее нельзя было редактировать на незащищенном листе.
0 |
12 / 7 / 3 Регистрация: 13.09.2010 Сообщений: 63 |
|
13.01.2012, 10:48 [ТС] |
14 |
Дарика, что по Вашему делает эта строка? Я просил: Блин, нормально тут у вас, спрашиваешь, тебе говорят что это невозможно. Вот я привела пример, код выше. Теперь, я надеюсь, стало окончательно понятно, что я хочу сделать. Вы можете сказать что-то конструктивное по вопросу?
0 |
17991 / 7617 / 890 Регистрация: 25.12.2011 Сообщений: 11,351 Записей в блоге: 17 |
|
13.01.2012, 19:35 |
15 |
Дарика, перечитайте мой пост. Там готовый код. Сложность Вашей программы, связанная с неправильной организацией циклов не позволяет исправить в ней ошибки, пока Вы не выложите Ваш проект полностью файлом и дадите условия задачи в ней. Код, выложенный Вами делает, то что я написал в посте выше, кроме п.0, что вызывает ошибку 1004.
0 |
0 / 0 / 0 Регистрация: 20.07.2013 Сообщений: 6 |
|
01.01.2014, 14:15 |
16 |
В диапазоне есть объединенные ячейки? Если есть — дело, скорее всего в них.
0 |
Защита ячеек от манипуляций |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |