首页 > 解决方案 > VBA - 绕过剪贴板传输(除了值)

问题描述

我在脚本中有以下代码。

我的问题是,在wb.ws.range我的某些列中包含诸如 00100 之类的数字。这些值被复制为 100 而不是 00100。

我怀疑这很简单......但在任何地方都找不到答案

With wb.ws.Range(Range( _
                      Range("A3"), _
                      Range("A3").End(xlDown) _
                      ), _
                Range( _
                      Range("R3"), _
                      Range("R3").End(xlDown) _
                      ) _
                .End(xlToRight) _
                )
Mwb.Mws.Cells(1, 1).Resize(.Rows.Count, .Columns.Count) = .Value2
End With

标签: excelvba

解决方案


按赋值复制值

  • 调整常量部分中的值。
  • 这包括如何获取(创建对)相关范围的引用,如何将数字格式更改为文本(对于整个范围),以及如何删除(ClearContents)目标工作表相关列中可能剩余的旧数据.
  • 请随时在下面的评论中询问其他详细信息。
Option Explicit

Sub copyValuesByAssignment()
    
    Const sName As String = "Sheet1"
    Const sCols As String = "A:R"
    Const sFirstRow As Long = 3
    Const dName As String = "Sheet2"
    Const dFirst As String = "A1"
    
    Dim wb As Workbook: Set wb = ThisWorkbook ' workbook containing this code
    
    Dim srg As Range
    With wb.Worksheets(sName).Columns(sCols).Rows(sFirstRow)
        Dim sCell As Range
        Set sCell = .Resize(.Worksheet.Rows.Count - .Row + 1) _
            .Find("*", , xlFormulas, , xlByRows, xlPrevious)
        If sCell Is Nothing Then Exit Sub
        Set srg = .Resize(sCell.Row - .Row + 1)
    End With
    Dim srCount As Long: srCount = srg.Rows.Count
    
    With wb.Worksheets(dName).Range(dFirst).Resize(, srg.Columns.Count)
        .Resize(srCount).NumberFormat = "@" ' or just for some columns?
        .Resize(srCount).Value = srg.Value
        .Resize(.Worksheet.Rows.Count - .Row - srCount + 1) _
            .Offset(srCount).ClearContents
    End With

End Sub

推荐阅读