防止从一般的自动格式改变到例如百分比

我的电子表格被locking,以便用户可以编辑值,但不能更改单元格的格式。 单元格的types是“通用”,但是有数据validation来确保input是数字。

尽pipelocking,但可以通过input特定的值来更改单元格的格式。 例如,input4%将格式更改为百分比,input4英镑将types更改为货币等。

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

我可以通过将单元格types设置为数字而不是一般来防止这种情况。 然而,这也是不可取的,因为它使我显示固定的小数位数。 我想同时显示“4”和“4.256”,似乎也没有办法做到这一点,而不是为前者添加尾随零(4.00)或将后者四舍五入(4.26)。

请有人可以告诉我如何防止自动格式更改,或者如何设置一个数字格式,做我想做的。

海事组织,唯一的方法来实现这个使用macros重置格式到它的原始状态。

打开VBA编辑器( AllF11 ),然后双击要使用此function的工作表。

然后将此代码粘贴到主窗口中:

 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 

完成!

我们得出的结论是,这是不可能的。 (请注意,问题是如何防止这种行为,在用户创build后不立即恢复更改。运行macros擦除撤消堆栈,这不是一个可行的解决方法。

在工作表事件处理中使用这个macros:

 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