Excel VBA撇号在副本上消失

时间:2019-03-13 13:18:52

标签: excel vba long-integer

我正在重新处理不能处理为科学计数法的长整数(请考虑产品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函数时,新工作表中不存在我添加的撇号,并且数字落入了科学计数法。

对此有什么解决方案?

1 个答案:

答案 0 :(得分:1)

编辑:撇号实际上不是单元格的公式/值的一部分。它存储在PrefixCharacter属性中(您可以在“即时”窗口中使用?ActiveCell.PrefixCharacter访问它)。 来源:https://www.ozgrid.com/forum/forum/help-forums/excel-general/136277-apostrophe-in-front-of-text

要100%确定要复制此字符,必须复制值/公式和PrefixCharacter。但这一次不可能整行。

MIGHT下面的代码可以工作,但可能不起作用(对我来说,它可以工作,但是由于没有特殊原因而很快停止工作)。

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单独使用。也许我有空的时候会提供代码。