ExcelBanter

ExcelBanter (https://www.excelbanter.com/)
-   Excel Programming (https://www.excelbanter.com/excel-programming/)
-   -   Finding unlocked cells in Excel (https://www.excelbanter.com/excel-programming/358056-finding-unlocked-cells-excel.html)

S30 via OfficeKB.com

Finding unlocked cells in Excel
 
Hi All,

I have a macro which find and adds color to all unlocked/unprotected cells in
Excel. Unfortunately once I remove the color from unlocked cells the macro
also removes original colors applied to the cells prior to running these
macros.

Any ideas of how I could improve these macros?

Thanks a lot in advance

Steve

Sub Color_Unprotected_cells()
Application.ScreenUpdating = False
Set A = ActiveWorkbook.ActiveSheet
For Each Sheet In ActiveWorkbook.Worksheets
Sheet.Activate
Sheet.Cells.Select
For Each Item In Intersect(ActiveSheet.UsedRange, Selection.Cells)

'Item.Value = Item.Interior.ColorIndex
If Item.Locked = False Then
Item.Interior.ColorIndex = 37
End If
Next
ActiveSheet.Range("A1").Select
Next Sheet
A.Activate
Application.ScreenUpdating = True
End Sub

Sub Remove_Color_Unprotected_cells()
Application.ScreenUpdating = False
Set A = ActiveWorkbook.ActiveSheet
For Each Sheet In ActiveWorkbook.Worksheets
Sheet.Activate
ActiveSheet.Cells.Select
For Each Item In Intersect(ActiveSheet.UsedRange, Selection.Cells)
If Item.Locked = False Then
Item.Interior.ColorIndex = xlNone
End If
Next
ActiveSheet.Range("A1").Select
Next Sheet
A.Activate
Application.ScreenUpdating = True
End Sub

--
Message posted via http://www.officekb.com

JMB

Finding unlocked cells in Excel
 
So you color the unprotected cells, then you want to be able to change the
color back to what it was before?

The easiest way I could think of is if your spreadsheets are not currently
using any comments, you could save the existing color index number in a
comment box before changing the color, then get the value from the comment
box when you change it back. Other than that, you could have to create a
separate worksheet that had a list of cells (worksheet name and cell address)
and the existing color index number. Then when changing the cell color back,
lookup the old value in your table, change the cell color back, and delete
the entry from the table.

Saving the value as a comment would look like:

Sub Color_Unprotected_cells()
Dim Sheet As Worksheet
Dim Item As Range

For Each Sheet In ActiveWorkbook.Worksheets
For Each Item In Sheet.UsedRange.Cells
'Item.Value = Item.Interior.ColorIndex
If Item.Locked = False Then
Item.AddComment (CStr(Item.Interior.ColorIndex))
Item.Interior.ColorIndex = 37
End If
Next Item
Next Sheet
End Sub

Sub Remove_Color_Unprotected_cells()
Dim Sheet As Worksheet
Dim Item As Range

For Each Sheet In Worksheets
For Each Item In Sheet.UsedRange.Cells
If Item.Locked = False Then
Item.Interior.ColorIndex = CLng(Item.Comment.Text)
Item.Comment.Delete
End If
Next Item
Next Sheet
End Sub



"S30 via OfficeKB.com" wrote:

Hi All,

I have a macro which find and adds color to all unlocked/unprotected cells in
Excel. Unfortunately once I remove the color from unlocked cells the macro
also removes original colors applied to the cells prior to running these
macros.

Any ideas of how I could improve these macros?

Thanks a lot in advance

Steve

Sub Color_Unprotected_cells()
Application.ScreenUpdating = False
Set A = ActiveWorkbook.ActiveSheet
For Each Sheet In ActiveWorkbook.Worksheets
Sheet.Activate
Sheet.Cells.Select
For Each Item In Intersect(ActiveSheet.UsedRange, Selection.Cells)

'Item.Value = Item.Interior.ColorIndex
If Item.Locked = False Then
Item.Interior.ColorIndex = 37
End If
Next
ActiveSheet.Range("A1").Select
Next Sheet
A.Activate
Application.ScreenUpdating = True
End Sub

Sub Remove_Color_Unprotected_cells()
Application.ScreenUpdating = False
Set A = ActiveWorkbook.ActiveSheet
For Each Sheet In ActiveWorkbook.Worksheets
Sheet.Activate
ActiveSheet.Cells.Select
For Each Item In Intersect(ActiveSheet.UsedRange, Selection.Cells)
If Item.Locked = False Then
Item.Interior.ColorIndex = xlNone
End If
Next
ActiveSheet.Range("A1").Select
Next Sheet
A.Activate
Application.ScreenUpdating = True
End Sub

--
Message posted via http://www.officekb.com


S30 via OfficeKB.com

Finding unlocked cells in Excel
 
Hi JMB,

this is an excellent suggestion, however, unfortunately I am using comments.
It becomes messy once you start adding to exsisting comments. I have tried
writing the colorindex into a spreadsheet, which works fine. Unfortunately
this type of macro runs forever.
Any other ideas how I could make this work?

Thanks you very much

Regards

Steve

JMB wrote:
So you color the unprotected cells, then you want to be able to change the
color back to what it was before?

The easiest way I could think of is if your spreadsheets are not currently
using any comments, you could save the existing color index number in a
comment box before changing the color, then get the value from the comment
box when you change it back. Other than that, you could have to create a
separate worksheet that had a list of cells (worksheet name and cell address)
and the existing color index number. Then when changing the cell color back,
lookup the old value in your table, change the cell color back, and delete
the entry from the table.

Saving the value as a comment would look like:

Sub Color_Unprotected_cells()
Dim Sheet As Worksheet
Dim Item As Range

For Each Sheet In ActiveWorkbook.Worksheets
For Each Item In Sheet.UsedRange.Cells
'Item.Value = Item.Interior.ColorIndex
If Item.Locked = False Then
Item.AddComment (CStr(Item.Interior.ColorIndex))
Item.Interior.ColorIndex = 37
End If
Next Item
Next Sheet
End Sub

Sub Remove_Color_Unprotected_cells()
Dim Sheet As Worksheet
Dim Item As Range

For Each Sheet In Worksheets
For Each Item In Sheet.UsedRange.Cells
If Item.Locked = False Then
Item.Interior.ColorIndex = CLng(Item.Comment.Text)
Item.Comment.Delete
End If
Next Item
Next Sheet
End Sub

Hi All,

[quoted text clipped - 44 lines]
Application.ScreenUpdating = True
End Sub


--
Message posted via OfficeKB.com
http://www.officekb.com/Uwe/Forums.a...mming/200604/1


All times are GMT +1. The time now is 09:13 PM.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
ExcelBanter.com