防止自动格式从一般更改为例如百分比

时间:2014-03-18 16:44:47

标签: excel

我的电子表格已锁定,因此用户可以编辑值但不能更改单元格的格式。单元格具有“常规”类型,但有数据验证以确保输入是数字。

尽管有锁定,但可以通过输入特定值来更改单元格的格式。例如,输入4%会将格式更改为百分比,输入£4会将类型更改为货币等。

我想要防止这种情况,因为a)单元格的存储值可能已经改变,例如0.04而不是4和b)现在用户无法改变格式。

我可以通过将单元格类型设置为数字而不是常规来防止这种情况。然而,这也是不可取的,因为它将我与显示固定数量的小数位联系起来。我想要'4'和'4.256'这样显示,如果没有向前者添加尾随零(4.00)或舍入后者(4.26),似乎没有办法做到这一点。

请有人告诉我如何防止自动格式化更改,或者无法设置如何设置符合我想要的数字格式。

3 个答案:

答案 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