我的电子表格已锁定,因此用户可以编辑值但不能更改单元格的格式。单元格具有“常规”类型,但有数据验证以确保输入是数字。
尽管有锁定,但可以通过输入特定值来更改单元格的格式。例如,输入4%会将格式更改为百分比,输入£4会将类型更改为货币等。
我想要防止这种情况,因为a)单元格的存储值可能已经改变,例如0.04而不是4和b)现在用户无法改变格式。
我可以通过将单元格类型设置为数字而不是常规来防止这种情况。然而,这也是不可取的,因为它将我与显示固定数量的小数位联系起来。我想要'4'和'4.256'这样显示,如果没有向前者添加尾随零(4.00)或舍入后者(4.26),似乎没有办法做到这一点。
请有人告诉我如何防止自动格式化更改,或者无法设置如何设置符合我想要的数字格式。
答案 0 :(得分:1)
IMO,实现此目的的唯一方法是使用宏将格式重置为原始状态。
打开VBA编辑器(全部 - F11 ),然后双击要使用此功能的工作表。
然后将此代码粘贴到主窗口中:
Option Explicit
Private Const mcStrPasswort As String = "" '<---Change to your password
Private mStrFormat As String
Private Sub Worksheet_Change(ByVal Target As Range)
Dim blnProtected As Boolean
If mStrFormat = "" Then mStrFormat = "General"
If Me.ProtectContents Then
blnProtected = True
Me.Unprotect mcStrPasswort
Else
blnProtected = False
End If
Target.NumberFormat = mStrFormat
If blnProtected Then
Me.Protect mcStrPasswort
End If
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
mStrFormat = Target.Cells(1, 1).NumberFormat
End Sub
完成!
答案 1 :(得分:1)
我们得出的结论是,这是不可能的。 (注意问题是如何阻止此行为,而不是在用户创建后立即恢复更改。运行宏会擦除撤消堆栈,因此这不是一个可行的解决方法。)
答案 2 :(得分:0)
在工作表事件处理中使用此宏:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim ChangedCells As Range
Dim NextChangedCell As Range
Dim Temp As String
Set ChangedCells = Intersect(Target, Range("A1:A5")) ' or you can specify any other range to be monitored for changes
If Not ChangedCells Is Nothing Then
Application.EnableEvents = False
For Each NextChangedCell In ChangedCells
Temp = NextChangedCell.Formula
NextChangedCell.NumberFormat = "General" ' or you can specify any other format to be forced on cells
NextChangedCell.Value = Temp
Next NextChangedCell
Application.EnableEvents = True
End If
End Sub