Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 在VBA中使用范围函数粘贴值_Excel_Vba - Fatal编程技术网

Excel 在VBA中使用范围函数粘贴值

Excel 在VBA中使用范围函数粘贴值,excel,vba,Excel,Vba,我用这段代码来粘贴一个范围的值,但每当我的数据在一百万或更多行号时,我就开始面临问题,我想打破这个范围,在4/5部分(循环)中运行相同的代码,有人能帮我吗 Range("F14:J14").Select Selection.Copy With ActiveSheet RowCount = .Cells(.Rows.Count, "B").End(xlUp).Row End With Range("F14:J14").Select Selection.Copy Range("f15:J" &a

我用这段代码来粘贴一个范围的值,但每当我的数据在一百万或更多行号时,我就开始面临问题,我想打破这个范围,在4/5部分(循环)中运行相同的代码,有人能帮我吗

Range("F14:J14").Select
Selection.Copy
With ActiveSheet
RowCount = .Cells(.Rows.Count, "B").End(xlUp).Row
End With

Range("F14:J14").Select
Selection.Copy

Range("f15:J" & RowCount).Select
Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
Range("f15:J" & RowCount).Select
Selection.Copy
Range("f15:J" & RowCount).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False

您是对的,复制大量的单元格是有问题的,所以在块中处理数据是一个好主意

也就是说,依靠
选择
复制
粘贴专用
也是有问题的

我会建议这个替代方案

Sub Demo()
    Dim rSrc As Range
    Dim rDst As Range
    Dim rBlk As Range
    Dim RowCount As Long
    Dim CopyRowStart As Long
    Dim CopyRowNum As Long

    ' Set number of rows to process at a time
    CopyRowNum = 100000

    ' Set references to source and Destination ranges
    With ActiveSheet
        Set rSrc = .Range("F14:J14")
        RowCount = .Cells(.Rows.Count, "B").End(xlUp).Row
        Set rDst = .Range("F15:J" & RowCount)
    End With

    ' Copy data in blocks
    CopyRowStart = 0
    Set rBlk = rDst.Resize(CopyRowNum)
    Do While CopyRowStart + CopyRowNum <= rDst.Rows.Count
        ' Copy formulas
        rBlk.Formula = rSrc.Formula
        ' Convert to values
        rBlk.Value = rBlk.Value
        ' Move to next block
        If rBlk.Row + CopyRowNum + CopyRowStart - 1 > rDst.Row + rDst.Rows.Count - 1 Then
            Exit Do
        End If
        Set rBlk = rBlk.Offset(CopyRowNum, 0)
        CopyRowStart = CopyRowStart + CopyRowNum
        DoEvents
    Loop
    ' Copy remaining rows
    If rBlk.Row + CopyRowNum <= rDst.Row + rDst.Rows.Count - 1 Then
        Set rBlk = rBlk.Resize(rDst.Row + rDst.Rows.Count - rBlk.Row - CopyRowNum)
        Set rBlk = rBlk.Offset(CopyRowNum, 0)
        rBlk.Formula = rSrc.Formula
        rBlk.Value = rBlk.Value
    End If
End Sub
子演示()
变暗rSrc As范围
Dim rDst As范围
变暗rBlk As范围
暗行数与长行数相同
暗显CopyRowStart尽可能长
Dim CopyRowNum尽可能长
'设置一次要处理的行数
CopyRowNum=100000
'设置对源和目标范围的引用
使用ActiveSheet
设置rSrc=.范围(“F14:J14”)
RowCount=.Cells(.Rows.Count,“B”).End(xlUp).Row
设置rDst=.Range(“F15:J”和行计数)
以
'在块中复制数据
CopyRowStart=0
设置rBlk=rDst.Resize(CopyRowNum)

在CopyRooStc+CoprnnUm时,请考虑更好地描述问题。