我要说的是我对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'但仍然没有运气。
答案 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
不包含有效的范围地址。