在宏中设置范围时,VBA运行时错误1004“应用程序定义的或对象定义的错误”

时间:2017-07-12 17:35:14

标签: excel vba excel-vba

我要说的是我对VBA很新,这是我的第一个项目,然而,我正在努力,因为否则它是手动复制粘贴~200次。

不幸的是,对于第一个项目来说,这很困难。

为清晰而编辑(HOPEFULLY):主要思想是我需要从下拉列表的开头开始,复制列出的第一个字符串,然后将该字符串粘贴到列中。这会改变右边的数字数据。然后我想选择这个新更改的数值数据并将其复制并粘贴到F列第一个空白区域中同一工作簿中的不同工作表中。然后我希望代码遍历下拉列表并为所有51执行此操作。下拉列表中的字符串。但是,每次迭代需要将偏移量粘贴3列,以将数据复制到另一张表中的正确列。

到目前为止,这是我的代码

Option Explicit

Sub PtComp()
'
' PtComp Macro
'

'
Dim List1 As String
Dim Range1 As Range
Dim Line1 As Range
Dim i As Integer
Dim Begin As Range


ActiveWorkbook.Sheets("Sample Data Summary").Activate
List1 = Selection
Set Range1 = Evaluate(ActiveSheet.Range(List1).Validation.Formula1)
For Each Line1 In Range1
    Selection.Copy
    ActiveSheet.Range(Selection, Selection.End(xlDown)).Select
    ActiveSheet.Paste
    ActiveCell.Offset(0, 1).Select
    ActiveSheet.Range(Selection, Selection.End(xlDown)).Select
    Application.CutCopyMode = False
    ActiveSheet.Selection.Copy
    ActiveWorkbook.Sheets("Pt Comparison").Activate
    Begin = ActiveSheet.Range("F1").End(xlDown).Offset(-1, 0)
    For i = 0 To 148 Step 3
    Begin.Offset(0, i).Select
    ActiveSheet.PasteSpecial Paste:=xlPasteValues
    Next i
    Next Line1

End Sub

突出显示这一行

Set Range1 = Evaluate(ActiveSheet.Range(List1).Validation.Formula1)

非常感谢任何帮助。对不起,如果我的代码是垃圾,就像我说的那样,第一个计时器希望变得更好。

编辑:此外,我回顾了同样错误的旧问题,并认为这可能是因为我不清楚我试图定义范围的工作表是什么,因此为什么我的代码充满了'ActiveSheet'但仍然没有运气。

1 个答案:

答案 0 :(得分:0)

您的代码假定List1包含有效的范围地址,因此该"Sample Data Summary"工作表上的活动单元格包含有效的范围地址。

显然, 总是案件。有关如何处理这种情况的想法,请搜索错误声明的更多详细信息。

您需要阅读How to avoid using Select in Excel VBA macros,并且知道clipboard operations in a tight loop几乎是您在Excel-VBA中可以做的最慢的事情。

好像你想要这样的东西:

Set Range1 = Evaluate(Selection.Validation.Formula1)

您的代码在Range(List1)上爆炸,因为List1不包含有效的范围地址。