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
Vba 从图纸中复制随机行,而不是每次在参数中定义一行_Vba_Excel - Fatal编程技术网

Vba 从图纸中复制随机行,而不是每次在参数中定义一行

Vba 从图纸中复制随机行,而不是每次在参数中定义一行,vba,excel,Vba,Excel,此代码在其当前设置中将所有图纸中的第5行复制到主图纸。我需要它在一个范围内随机抽取一行 Sub test() Dim curRow As Integer Dim activeWorksheet As Worksheet Set activeWorksheet = ActiveSheet curRow = 1 For Each ws In ActiveWorkbook.Worksheets If Not ws.Name = activ

此代码在其当前设置中将所有图纸中的第5行复制到主图纸。我需要它在一个范围内随机抽取一行

Sub test()

    Dim curRow As Integer
    Dim activeWorksheet As Worksheet
    Set activeWorksheet = ActiveSheet
    curRow = 1
       For Each ws In ActiveWorkbook.Worksheets
        If Not ws.Name = activeWorksheet.Name Then
            ws.Range("5:6").Copy Destination:=activeWorksheet.Range(CStr(curRow) & ":" & CStr(curRow) + 1)

            curRow = curRow + 1
        End If
    Next ws

End Sub
我尝试像这样编写随机代码,但失败了,出现运行时错误1004

Sub test()

    Dim curRow As Integer
    Dim activeWorksheet As Worksheet
    Set activeWorksheet = ActiveSheet
    curRow = 1
    rndnum = Int((50 - 30 + 1) * Rnd + 1)
    For Each ws In ActiveWorkbook.Worksheets
        If Not ws.Name = activeWorksheet.Name Then
            ws.Range("(rndnum):(rndnum+1)").Copy Destination:=activeWorksheet.Range(CStr(curRow) & ":" & CStr(curRow) + 1)

            curRow = curRow + 1
        End If
    Next ws

End Sub

如果要使用范围内的变量,请执行以下操作:

'if you only want to use Rows
Range(var1 & ":" & var2)
'if you want to refer to a cell
Range(Cells(varRow,varColumn))

你很接近。一个行引用正在工作(尽管CStr转换是不必要的);另一个是畸形的

Sub test()
    Dim curRow As Long, rndNum As Long, ws As Worksheet

    With ActiveSheet
        curRow = 1
        rndNum = Int((50 - 30 + 1) * Rnd + 1)
        For Each ws In .Parent.Worksheets
            If Not ws.Name = .Name Then
                ws.Range(rndNum & ":" & rndNum + 1).Copy _
                    Destination:=.Range(curRow & ":" & curRow + 1)
                curRow = curRow + 2
            End If
        Next ws
    End With

End Sub

我还添加了一个,以减少对分配给的var的冗余调用。
ws
var应该已经声明。

我只想让它调出一个随机数,并将该随机数复制到一行,但是每当我尝试将一个随机数分配给一个变量并使用它时,它就会不断抛出此错误。将变量从ws.range中的字符串中取出只是为了添加可以将copy/paste语句缩减为
ws.Rows(rndNum)。调整大小(2)。复制目标:=.Rows(curRow)
。而且最有可能的
curRow
应该增加2,以避免覆盖在上一次迭代中粘贴的第二行这两个优点;特别是在增量上的捕获。非常感谢。(编辑应用)