我有一个电子表格,用户粘贴数字,由于这些数字的长度(以及我们不需要电子表格来执行任何计算)我们希望它们被格式化为文本,否则它们出现在科学中格式即1.12345E+13
代替12345678912345
无法调整/修改正在复制数字的数据源.
我正在使用Private Sub Workbook_SheetChange
do检测相关范围内的单元格是否已更改,然后我将范围格式化为文本
ThisWorkbook.Sheets("Sheet1").Columns("B").NumberFormat = "@"
不幸的是,在Excel 2007上,无论是在Excel中还是通过marco手动执行此操作,数字仍会显示为1.12345E+13
除非您单击进入单元格并按Enter键.
我可以申请:
With rng .Value = Evaluate("IF(ISTEXT(" & .Address & "),TRIM(" & .Address & "),REPT(" & .Address & ",1))") End With
但是当我这样做时,我最终得到一个无限循环,因为Private Sub Workbook_SheetChange
检测到细胞已被更改并再次绕过循环.
如果我能以某种方式计算出用户或宏是否手动更改了单元格,这很容易解决.宏在ThisWorkbook
.我尝试使用Application.Activesheet
而不是ThisWorkbook.Sheets
它没有任何区别.
如果替代方案有一个更简单/更好的方法来修复显示的数字,1.12345E+13
即使我重新格式化了我想知道它的单元格.
谢谢.
这是一个完整的示例,包括处理> 1单元格的目标范围:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) Dim c As Range Application.EnableEvents = False On Error GoTo haveError For Each c In Application.Intersect(Target, Sh.UsedRange).Cells With c If IsNumeric(.Value) Then .NumberFormat = "@" .Value = CStr(.Value) End If End With Next c haveError: 'Make sure to re-enable events! Application.EnableEvents = True End Sub