Excel VBA撇号在副本上消失

问题描述 投票:1回答:1

我正在重新处理一个长整数的宏交易,这些整数不能被强制转换成科学记数法(想想产品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函数时,我添加的撇号在新工作表中不存在,并且数字会变成科学记数法。

这是什么解决方案?

excel vba long-integer
1个回答
1
投票

编辑:叛教者实际上不是细胞的公式/值的一部分。它存储在PrefixCharacter属性中(您可以在立即窗口中使用?ActiveCell.PrefixCharacter访问它)。资料来源:https://www.ozgrid.com/forum/forum/help-forums/excel-general/136277-apostrophe-in-front-of-text

要100%确定要复制此字符,您必须复制值/公式和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。也许我会在有空的时候为它提供代码。

© www.soinside.com 2019 - 2024. All rights reserved.