Excel VBA 撇号在副本中消失
Excel VBA Apostrophe Disappears on Copy
我正在修改一个宏处理不能强制转换为科学记数法的长整数(想想产品 ID 号)。在正常情况下,我只是将它们转换为字符串,但 Excel 似乎仍然将一串数字视为数字,即使分类为文本也是如此。
因此,在使用以下代码更改任何其他内容之前,我必须在整个列中附加一个撇号:
Function CleanColumn(Col As String, ws As Worksheet, Optional wb As Workbook)
If wb Is Nothing Then Set wb = ThisWorkbook
With ws
arr = .Range(.Cells(2, Col), .Cells(.Rows.Count, Col).End(xlUp)).Value2
For i = LBound(arr, 1) To UBound(arr, 1)
arr(i, 1) = Chr(39) & Replace(arr(i, 1), Chr(45), vbNullString)
Next i
.Cells(2, Col).Resize(UBound(arr, 1), UBound(arr, 2)) = arr
End With
End Function
这很好用,但是我现在需要获取数据集并根据一列的值将其分成单独的工作表。为此,我使用了以下内容:
Function CopyByCriteria(Criteria As String, FilterRange As Range, SourceSheet As Worksheet, DestinationSheet As Worksheet)
Dim pasteRow As Integer
Dim c As Range
pasteRow = 1
For Each c In FilterRange
If c = Criteria Then
DestinationSheet.Rows(pasteRow) = SourceSheet.Rows(c.Row).Value2
pasteRow = pasteRow + 1
End If
Next c
End Function
问题是,当我使用 CopyByCriteria 函数时,我添加的撇号在新工作表中不存在,并且数字变成了科学记数法。
解决这个问题的方法是什么?
编辑:撇号实际上并不是单元格 formula/value 的一部分。它存储在 PrefixCharacter 属性 中(您可以在 Immediate window 中使用 ?ActiveCell.PrefixCharacter
访问它)。
资料来源:https://www.ozgrid.com/forum/forum/help-forums/excel-general/136277-apostrophe-in-front-of-text
要 100% 确定您正在复制此字符,您必须复制 value/formula 和 PrefixCharacter。但是一次整行是不可能的。
下面的代码可能有效,但也可能无效(对我来说它有效,但很快就无缘无故停止工作)。
Function CopyByCriteria(Criteria As String, FilterRange As Range, SourceSheet As
Worksheet, DestinationSheet As Worksheet)
Dim pasteRow As Integer
Dim c As Range
pasteRow = 1
For Each c In FilterRange
If c = Criteria Then
DestinationSheet.Rows(pasteRow).formula = SourceSheet.Rows(c.Row).formula
pasteRow = pasteRow + 1
End If
Next c
End Function
为了 100% 确定我会建议使用 Range.Copy 方法或手动复制(就像 OP 对 Value 所做的那样)单独一行中每个单元格的 Formula 和 PrefixCharacter。也许有时间我会提供代码。
我正在修改一个宏处理不能强制转换为科学记数法的长整数(想想产品 ID 号)。在正常情况下,我只是将它们转换为字符串,但 Excel 似乎仍然将一串数字视为数字,即使分类为文本也是如此。
因此,在使用以下代码更改任何其他内容之前,我必须在整个列中附加一个撇号:
Function CleanColumn(Col As String, ws As Worksheet, Optional wb As Workbook)
If wb Is Nothing Then Set wb = ThisWorkbook
With ws
arr = .Range(.Cells(2, Col), .Cells(.Rows.Count, Col).End(xlUp)).Value2
For i = LBound(arr, 1) To UBound(arr, 1)
arr(i, 1) = Chr(39) & Replace(arr(i, 1), Chr(45), vbNullString)
Next i
.Cells(2, Col).Resize(UBound(arr, 1), UBound(arr, 2)) = arr
End With
End Function
这很好用,但是我现在需要获取数据集并根据一列的值将其分成单独的工作表。为此,我使用了以下内容:
Function CopyByCriteria(Criteria As String, FilterRange As Range, SourceSheet As Worksheet, DestinationSheet As Worksheet)
Dim pasteRow As Integer
Dim c As Range
pasteRow = 1
For Each c In FilterRange
If c = Criteria Then
DestinationSheet.Rows(pasteRow) = SourceSheet.Rows(c.Row).Value2
pasteRow = pasteRow + 1
End If
Next c
End Function
问题是,当我使用 CopyByCriteria 函数时,我添加的撇号在新工作表中不存在,并且数字变成了科学记数法。
解决这个问题的方法是什么?
编辑:撇号实际上并不是单元格 formula/value 的一部分。它存储在 PrefixCharacter 属性 中(您可以在 Immediate window 中使用 ?ActiveCell.PrefixCharacter
访问它)。
资料来源:https://www.ozgrid.com/forum/forum/help-forums/excel-general/136277-apostrophe-in-front-of-text
要 100% 确定您正在复制此字符,您必须复制 value/formula 和 PrefixCharacter。但是一次整行是不可能的。
下面的代码可能有效,但也可能无效(对我来说它有效,但很快就无缘无故停止工作)。
Function CopyByCriteria(Criteria As String, FilterRange As Range, SourceSheet As
Worksheet, DestinationSheet As Worksheet)
Dim pasteRow As Integer
Dim c As Range
pasteRow = 1
For Each c In FilterRange
If c = Criteria Then
DestinationSheet.Rows(pasteRow).formula = SourceSheet.Rows(c.Row).formula
pasteRow = pasteRow + 1
End If
Next c
End Function
为了 100% 确定我会建议使用 Range.Copy 方法或手动复制(就像 OP 对 Value 所做的那样)单独一行中每个单元格的 Formula 和 PrefixCharacter。也许有时间我会提供代码。