难以根据变量设置范围

struggling with setting a range based on a variable

提问人:JR Stroik 提问时间:10/8/2023 最后编辑:B.GriffinJR Stroik 更新时间:10/9/2023 访问量:76

问:

最终用户将从列表框中进行选择,该列表框将他们选择的行输出到 B,2 其值将指示起始行。他们还需要一种方法来输入行数,但我卡在了第一部分。任何帮助将不胜感激

我尝试使用Activecell.Offset()它运行良好,但很快意识到由于以下原因,它不会。计划表是它们开始的地方,但有 6 个页面需要粘贴不同的范围,因此在第一页之后,活动单元格将消失。 我希望做这样的事情: 选择当天的第一个版本,该版本指示起始行。.说 55... 然后是当天计划的 # 构建......比方说 5.
我需要第 57:61 行粘贴到工作表 2/ 56:60 在另一个/ 55:59 在不同的...等等...... 这就是我目前所处的位置。 它回来了“需要 424 个对象”。

Sub Denest()
'
' Denest Macro
'

'
    Sheets("Denest").Select
    Rows("3:" & Rows.Count).ClearContents
    Sheets("Incoming").Select
    Dim var As Variant
    var = Range("B1").Value
    
    Dim nrange As Range
    Set nrange = Range(var, var.Offset(2, 0).Rows("1:5")).EntireRow.Select  <------error here
    Selection.Copy
    Sheets("Denest").Activate
    Sheets("Denest").Rows("3:3").PasteSpecial Paste:=xlPasteAllUsingSourceTheme
    Application.CutCopyMode = False

我显然在这里遗漏了一些东西......

数组 Excel VBA

评论

0赞 JR Stroik 10/9/2023
我需要重复复制、粘贴单独的行,将行从一张纸重新格式化到其他 6 张纸上。假设我们在单元格 B6 中有数字 2,在 C2 中有数字 5 是否可以编写一个宏来复制从第 5 行开始的 8 行,又名 row(6+2),又名第 10 行,进入 sheet2 我的大脑将范围 Row(“6+2”:“12”) 复制到 sheet2 Row(“6+3”:“13”) 到 sheet3 Row(“6+4”:“14”) 到 sheet4 有什么想法吗?

答:

0赞 Black cat 10/8/2023 #1
  • var 在你的代码中是一个数字,但你需要一个对象。
  • 如果要单元格 B1 中第二行之后的五行
    Sheets("Denest").Select
    Rows("3:" & Rows.Count).ClearContents
    Sheets("Incoming").Select
    Dim var As Variant
    Set var = Range("B1")          'edited
    
    Dim nrange As Range
    Set nrange = var.Offset(2,0).Rows("1:5").EntireRow.Select         'edited
    'Set nrange = Range(var, var.Offset(2, 0).Rows("1:5")).EntireRow.Select  <------error here
    Selection.Copy
    Sheets("Denest").Activate
    Sheets("Denest").Rows("3:3").PasteSpecial Paste:=xlPasteAllUsingSourceTheme
    Application.CutCopyMode = False

以上代码只是对发布的代码的更正。

编辑:这是执行以下操作的代码

  • shnames 数组中放置目标工作表名称
  • 将要复制的工作表名称放入 orig
  • 在原始工作表 B2 中,要复制的第一行
  • 在原始工作表 C2 中,行数

结果:

原始工作表的 B2 行的 C2 行数被复制到 shnames 数组工作表中,行的开始从 B2 + 2 开始递增。

Sub multicopy()
 shnames = Array("YY1", "xx1", "zz1")
 Dim orig As Worksheet
 Set orig = Worksheets("to copy")         'edited
 Dim nrange As Range
 
 For i = 0 To UBound(shnames)
   With Sheets(shnames(i))
      .Rows("3:" & Rows.Count).ClearContents
      orig.Rows(orig.Range("B2")).Rows("1:" & orig.Range("C2")).Copy
      .Rows(orig.Range("B2") + 2 + i).PasteSpecial Paste:=xlPasteAllUsingSourceTheme
   End With
 Next i
Application.CutCopyMode = False
End Sub

评论

0赞 JR Stroik 10/9/2023
这只是将数字 12 粘贴到第 3 行中
0赞 Black cat 10/9/2023
@jr stroik 请根据您在问题中的评论检查新版本。
0赞 JR Stroik 10/11/2023
你是个天才!感谢一百万次!该阵列工作正常。需要对电子表格进行一些更改,以便我可以轻松地将 orig.range 移动到方便的地方。另外,我可以添加工作表和其他范围!