【问题标题】:Error copying data to new Excel sheet using a Macro使用宏将数据复制到新 Excel 工作表时出错
【发布时间】:2016-01-28 17:17:46
【问题描述】:

这是我在这里的第一篇文章。

在主工作表中过滤后,我试图将数据从一个工作表复制到同一工作簿中的新工作表。

在复制数据之前,我还必须将工作表模板从模板工作表复制到我要将数据复制到的新工作表中。

这是我的宏中显示的 VBA 代码:

Sub Macro7()
'
' Macro7 Macro
'

'
    Sheets("Template").Select
    Rows("1:3").Select
    Application.CutCopyMode = False
    Selection.Copy
    Dim sSheetName As String
    Sheets.Add After:=Sheets(Sheets.Count)
    sSheetName = ActiveSheet.Name

    ActiveSheet.Paste
    Sheets("Sheet1").Select
    Range("N13").Select
    Range(Selection, Selection.End(xlDown)).Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("sSheetName").Select
    Range("D4").Select
    ActiveSheet.Paste
    Columns("D:D").EntireColumn.AutoFit
    Sheets("Sheet1").Select
    Range("A13").Select
    Range(Selection, Selection.End(xlDown)).Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("sSheetName").Select
    Range("C4").Select
    ActiveSheet.Paste
    Sheets("Sheet1").Select
    Range("D13").Select
    Range(Selection, Selection.End(xlDown)).Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("sSheetName").Select
    Range("E4").Select
    ActiveSheet.Paste
    Sheets("Sheet1").Select
    Range("B13").Select
    Range(Selection, Selection.End(xlDown)).Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("sSheetName").Select
    Range("F4").Select
    ActiveSheet.Paste
    Sheets("Sheet1").Select
    Range("H13").Select
    Range(Selection, Selection.End(xlDown)).Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("sSheetName").Select
    Range("G4").Select
    ActiveSheet.Paste
    Sheets("Sheet1").Select
    Range("F13").Select
    Range(Selection, Selection.End(xlDown)).Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("sSheetName").Select
    Range("I4").Select
    ActiveSheet.Paste
    Range("A4").Select
    Application.CutCopyMode = False
    ActiveCell.FormulaR1C1 = "Fives Cinetic Corp"
    Columns("B:B").Select
    Columns("A:A").ColumnWidth = 17.57
    Range("A4").Select
    Selection.AutoFill Destination:=Range("A4:A5")
    Range("A4:A5").Select
    Range("D10").Select
End Sub

我收到一个错误:运行时错误 9:下标超出范围

猜测它与图纸编号有关,但无法弄清楚它到底是什么。

【问题讨论】:

  • 最好避免使用某些不可靠的函数,例如.select.copy/.paste。我建议查找替代方法并重写您的代码。还可以查看导览并阅读如何提出一个好问题。 stackoverflow.com/tour
  • 嗨乔希,谢谢你的提示。以后我会练习你的建议

标签: excel vba


【解决方案1】:

如果您还没有解决这个问题,请查看我为您修改的代码。在制作新的 VBA 项目时,尝试使用其中一些方法,您会发现它们比以前的版本更快、更可靠。并排比较。

我做了很多假设,所以在运行它之前做一个备份来测试它,并确保一切都在正确的地方。

Sub Macro7()

    Sheets.Add After:=Sheets(Sheets.Count)
    NewSheet = ActiveSheet.Name
    Sheets("Template").Rows("1:3").Copy Destination:=ActiveSheet.Range("A1")

    Sheets("Sheet1").Activate
    Range("N13").Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Copy Destination:=Sheets(NewSheet).Range("D4")

    With Sheets(NewSheet)
        Columns("D:D").EntireColumn.AutoFit
    End With

    Range("A13").Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Copy Destination:=Sheets(NewSheet).Range("C4")

    Range("D13").Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Copy Destination:=Sheets(NewSheet).Range("E4")

    Range("B13").Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Copy Destination:=Sheets(NewSheet).Range("F4")

    Range("H13").Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Copy Destination:=Sheets(NewSheet).Range("G4")

    Range("F13").Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Copy Destination:=Sheets(NewSheet).Range("I4")

    Sheets(NewSheet).Activate
    Range("A4").Value = "Fives Cinetic Corp"
    Columns("A:A").AutoFit
    Range("A4").AutoFill Destination:=Range("A4:A5")
    Range("D10").Select
End Sub

【讨论】:

  • 嗨乔希,我知道我对 VBA 的了解是非常基础的,因为我看到了你的代码。你的看起来更有条理,更容易理解和编辑。感谢您抽出宝贵的时间帮助我解决这个问题。
  • 我想知道您为什么在 Range 中给出 D13、N13 等?我在新工作表的 D4 范围内收到 #Ref 错误。代码的 Reswt 完美运行
  • 我刚刚选择了您在代码中选择的范围,代码是否将公式放入 D4 中?如果是这样,这可能是该公式最初的工作方式。例如,如果公式显示“A1 和 B1 的总和”,然后您将其移至 B1 中没有值的新工作表,则会出现错误。
  • 谢谢乔希。弄清楚了。需要进行细微的更改。它在很大程度上减少了我的工作。另外,您知道我可以通过哪些 VBA 教程或课程来提高我的 VBA 技能吗?
  • 不幸的是,由于 VBA 有一种内置的 UI (Excel),因此非常棘手。学习任何语言的最好方法是通过练习,比如这样 :) 也许找一本好书来教你基础知识,但没有什么比做你不知道怎么做的事情更好的了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多