【问题标题】:Creating a dynamic start and end point in a range to paste into在要粘贴的范围内创建动态起点和终点
【发布时间】:2021-03-02 17:31:46
【问题描述】:

我对 VBA 还很陌生。

我有一段代码将 K 列中包含数字数据的所有行从一个电子表格复制到另一个电子表格。这将在多个电子表格上运行,这些电子表格具有不同的练习名称和工作编号。

作为作业编号的练习仅出现在原始工作表的一个单元格中,这就是为什么它在 If 语句的单独代码行中检查值是否为数字。

我让带数字的行先进入。然后我将练习和作业编号添加到 S 和 R 列中。我的初始代码工作正常,除了范围被给出为 .range("R2:2" & lastrow).Value 所以虽然它确实复制了我想要它复制的内容它总是从 R2 开始粘贴,所以练习 1 的所有行现在都是练习 2。每次我复制任何内容时都会发生这种情况。

然后我尝试定义 firstrow 和 lastrow,但我得到 error1004。

这是我覆盖的原始代码:

'Import job number and exercise  
Dim jobnumber As String  
Dim exercise As String  
jobnumber = ActiveSheet.Range("S3").Value  
exercise = ActiveSheet.Range("B4").Value  
lastrow = Workbooks("GQE Asana Import").Sheets("Sheet1").Cells(Rows.Count, "K").End(xlUp).Row  
    Workbooks("GQE Asana Import").Sheets("Sheet1").Range("R2:R" & lastrow).Value = jobnumber  
    Workbooks("GQE Asana Import").Sheets("Sheet1").Range("S2:S" & lastrow).Value = exercise  

这是我试图使起始范围即“R2:R”动态的代码,它给出了 1004 错误

'Import job number and exercise  
Dim jobnumber As String    
Dim exercise As String  
Dim firstrowjn As Integer  
Dim firstrowex As Integer  
jobnumber = ActiveSheet.Range("S3").Value  
exercise = ActiveSheet.Range("B4").Value  
lastrow = Workbooks("GQE Asana Import").Sheets("Sheet1").Cells(Rows.Count, "K").End(xlUp).Row  
firstrowjn = Workbooks("GQE Asana Import").Sheets("Sheet1").Cells(Rows.Count, "R").End(xlUp).Row + 1  
firstrowex = Workbooks("GQE Asana Import").Sheets("Sheet1").Cells(Rows.Count, "S").End(xlUp).Row + 1  
    Workbooks("GQE Asana Import").Sheets("Sheet1").Range(firstrowjn & lastrow).Value = jobnumber  
    Workbooks("GQE Asana Import").Sheets("Sheet1").Range(firstrowex & lastrow).Value = exercise  

我已经完成了它,firstrowjn 等都选择了正确的行号。它似乎只是在添加单元格值时中断了。

我尝试在 set 关键字处使用范围而不是整数,我尝试使用 cells() 而不是 range(),但是虽然这不会出错,但它也不会更改值。我试过 Range(Cells...) 但它也不喜欢这样定义。我尝试了 for each 循环,但这需要更长的时间才能完成,而且我无法解决动态定义范围的问题。

如何使起始范围 - “R2:R”像最后一行一样动态?

注意:最后一行在代码中设置得更远,并且是一个整数。我使用 K 列,因为它有第一批数据,所以这就是工作没有/练习需要在 R 和 S 列中的多少时间。宏将用数据用完每张纸,因为数字会有所不同每个月,这就是我使用 activesheet 的原因。

我认为这涵盖了所有内容。提前感谢您的帮助!

【问题讨论】:

    标签: excel vba range


    【解决方案1】:

    您可以在范围函数中使用单元格函数。像这样使用它: range(cells(row1,column1),cells(row2,column2)) 您不能在单元格函数中使用字符,而必须使用数字。 R 的数字是 18,S 的数字是 19(按字母顺序)

    Workbooks("GQE Asana Import").Sheets("Sheet1").Range(Cells(firstrowjn, 18), Cells(lastrow, 18)).Value = jobnumber
        Workbooks("GQE Asana Import").Sheets("Sheet1").Range(Cells(firstrowex, 19), Cells(lastrow, 19)).Value = exercise
    

    【讨论】:

    • 不幸的是,我仍然收到相同的错误代码。不过还是谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-18
    • 1970-01-01
    • 2012-08-21
    • 2011-09-21
    • 1970-01-01
    • 1970-01-01
    • 2016-08-30
    相关资源
    最近更新 更多