首页 > 解决方案 > 使用 Application.Workbooks.Open 打开 .txt 文件,但它会删除长数字

问题描述

我有这个脚本

Sub IMport()
Dim FileToOpen As Variant
Dim OpenBook As Workbook
Application.ScreenUpdating = False
    FileToOpen = Application.GetOpenFilename(Title:="Browse for your File & Import Range")
    If FileToOpen <> False Then
        Set OpenBook = Application.Workbooks.Open(FileToOpen)
        OpenBook.Sheets(1).Range("B1:K200").Copy
        ThisWorkbook.Worksheets("Hent Data").Range("B2").PasteSpecial xlPasteValues
        OpenBook.Sheets(1).Range("A1:A200").Copy
        ThisWorkbook.Worksheets("Hent Data").Range("A2").PasteSpecial Format:="Text"
    End If
    
Application.ScreenUpdating = True

End Sub

我正在使用此脚本打开一个 txt 文件并将其复制到 Excel 工作表中。问题是A列中的数字是23个数字,所以当它在excel中打开时,很多数字都被删除了。

如何防止 Excel 截断大量数字?

更新:我犯了一个错误,并在我试图解决问题的地方发布了 VBA 脚本。真正的脚本是:

Sub IMport()
Dim FileToOpen As Variant
Dim OpenBook As Workbook
Application.ScreenUpdating = False
    FileToOpen = Application.GetOpenFilename(Title:="Browse for your File & Import Range")
    If FileToOpen <> False Then
        Set OpenBook = Application.Workbooks.Open(FileToOpen)
        OpenBook.Sheets(1).Range("A1:K200").Copy
        ThisWorkbook.Worksheets("Hent Data").Range("A2").PasteSpecial xlPasteValues
    End If
    
Application.ScreenUpdating = True

End Sub

标签: vbatxt

解决方案


我一直在为此苦苦挣扎,因为我犯了一个愚蠢的错误,即生成可能有前导零的条形码编号。Excel 会切断数字的前导零,并不断破坏这些条形码数字。

我找到的解决方案是首先将未更改的值放入一个数组中,然后在值周围添加一个等号和引号,这样当它粘贴到 excel 中时,它是一个文字字符串,不能通过它们的数字格式来更改。

根据我的经验,仅将工作表编号格式设置为“@”是不够的,excel 仍会尝试删除数字的前导零,并仍尝试以科学计数法显示长数字。但是输入一个数字"=""" & number & """"将迫使excel不这样做。

这是我为二维数组编写的函数:

Private Function ForceString(ByRef InputArr As Variant) As Variant
    Dim OutputArr() As Variant
    OutputArr = InputArr
    Dim i As Long, j As Long
    For i = LBound(OutputArr) To UBound(OutputArr)
        For j = LBound(OutputArr, 2) To UBound(OutputArr, 2)
            OutputArr(i, j) = "=""" & OutputArr(i, j) & """"
        Next j
    Next i
    ForceString = OutputArr
End Function

推荐阅读