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

我要说,我是VBA新手,这是我的第一个项目,但是我很努力,否则它是手动复制粘贴~200次。

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

编辑为清晰(HOPEFULLY):主要想法是,我需要从下拉列表开始,复制列出的第一个string,然后将该string粘贴到列中。 这改变了右边的数字数据。 然后,我想要select这个新更改的数值数据,然后将其复制并粘贴到列F的第一个空白处的同一工作簿中的不同工作表中。然后,我希望代码遍历下拉列表,然后对所有51string在下拉菜单中。 但是,每次迭代需要粘贴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',但仍然没有运气。

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

显然情况并非总是如此。 在On Error语句中search更多细节,了解如何处理这种情况。

您需要了解如何避免在Excel VBAmacros中使用Select ,并且知道在紧缩循环中的剪贴板操作几乎是您在Excel-VBA中可以做的最慢的事情。


似乎你想要这样的东西:

 Set Range1 = Evaluate(Selection.Validation.Formula1) 

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