【问题标题】:Cut/paste with from one workbook to another从一个工作簿剪切/粘贴到另一个工作簿
【发布时间】:2019-12-09 00:41:17
【问题描述】:

我有一个名为“数据”的工作簿,其中包含“未处理”工作表上的原始数据。

我正在尝试为每个代理创建一个名为“代理”的工作表(这将为每个代理进行更改,但为方便起见,我们现在将其命名为)将原始数据,一次一行,拉到他们的数据工作簿中的工作区。

我需要从“未处理”表中剪切单元格 A2:M2 并粘贴到“代理”表的 A4:M4 中。

我收到“超出范围”错误。我将此 sub 绑定到代理点击的按钮以显示新的数据行。

Sub newcancel_click()
    If Range("M4").Value = "EN" Then 
        MsgBox "You must Complete Previous cancellation.", vbCritical, "Error" 
    Else 
        Sheets("Uncompleted").Select 
        Range("A1:L1").Select 
        Application.CutCopyMode = False 
        Selection.Copy 
        Sheets("Jeremy").Select 
        Range("B4").Select 
        ActiveSheet.Paste 
        Sheets("Uncompleted").Select 
        Rows("1:1").Select 
        Application.CutCopyMode = False 
        Selection.Delete 
        Shift:=xlUp 
        Sheets("Jeremy").Select 
    End If 
End Sub

在此之后,我需要创建一个子程序来将数据从工作区移动到“数据”书上的“已处理”工作表中。我很满意,一旦我第一个工作,我就可以编写这个子。

【问题讨论】:

  • 这是我正在使用的代码,这是从一张类似的表格中提取数据到我目前在“代理”书中的“未处理”表格中。我无法从另一本书中得到这一点
  • 我发布了适用于代理工作簿中包含的工作表的代码。除了使用 Workbooks.Open"\filepath\Data.xlsx 打开它之外,我无法访问其他工作簿。一旦我尝试下一行代码,它就会告诉我超出范围

标签: excel vba


【解决方案1】:

至于您当前的代码,以下应该会更好。

Sub Newcancel_click2()
If ThisWorkbook.Sheets(1).Range("M4").Value = "EN" Then
        MsgBox "You must Complete Previous cancellation.", vbCritical, "Error"
        Else
        Sheets("Jeremy").Range("B4:M4").Value = Sheets("Uncompleted").Range("A1:L1").Value
        Sheets("Uncompleted").Rows(1).EntireRow.Delete shift:=xlUp
End If
End Sub

给你一个有趣的阅读:How to avoid using select in VBA

至于您的问题,“Subscript out of range”可能意味着您的某些范围未正确定义。您的选择可能与复制目标不匹配,或者(很可能)您所指的工作表不存在(错字或您尚未创建)。

要引用另一个工作簿,您可以使用Workbooks("Workbook name").Sheets("Sheet name").Range 等。您可以使用activeworkbook 来引用当前活动的工作簿(不推荐按照上面的链接以避免使用 select),您可以参考您的 VBA 的工作簿代码在 Thisworkbook 中,这比使用两个语句更容易:Workbook("Name for this one")Workbook("Name for the other one")

在你的情况下,这看起来像:

Sub Newcancel_click2()
If ThisWorkbook.Sheets(1).Range("M4").Value = "EN" Then
        MsgBox "You must Complete Previous cancellation.", vbCritical, "Error"
        Else
        Workbook("Agent").Sheets("Jeremy").Range("B4:M4").Value = Thisworkbook.Sheets("Uncompleted").Range("A1:L1").Value
        Thisworkbook.Sheets("Uncompleted").Rows(1).EntireRow.Delete shift:=xlUp
End If
End Sub

(请注意,我对您的大部分工作簿和工作表名称进行了近似,请检查并替换为您的实际名称)

【讨论】:

  • 400 错误通常是您尝试对一组不存在的数据进行计算。因为这不是你在这里做的,所以它哪里出错了并不明显。我建议在按下F8 的同时逐步浏览您的代码并检查哪里出错了。或者,您可以使用On Error Resume Next 来忽略错误,但我不建议将其作为永久解决方案。我现在无法使用 PC,所以在明天之前无法提供更多帮助,抱歉。
  • @JeremyGoyette(还有 Plutian,他对这个网站也比较陌生)。一旦发布了答案,请不要改变您问题的本质。这会使答案无效,并且会使 cmets 中的讨论变得毫无意义。 Stack Overflow 是一个问答存储库 - 这里的内容旨在帮助其他人,而不仅仅是提出问题的人(IOW 这不是“帮助台”。)。我已将编辑回滚到原始代码版本。当您遇到新问题时,请发布新问题,而不是更改原始问题的内容。
猜你喜欢
  • 2013-10-21
  • 1970-01-01
  • 2017-09-08
  • 1970-01-01
  • 2023-03-06
  • 1970-01-01
  • 1970-01-01
  • 2013-11-27
相关资源
最近更新 更多