【发布时间】:2017-09-22 02:02:31
【问题描述】:
我要先说我对 VBA 很陌生,这是我第一个使用它的项目,但是我正在努力,因为否则它是手动复制粘贴 ~200 次。
不幸的是,对于第一个项目来说,这很困难。
为清晰而编辑(希望如此):主要思想是我需要从下拉列表的开头开始,复制列出的第一个字符串,然后将该字符串粘贴到该列中。这将更改右侧相邻的数值数据。然后我想选择这个新更改的数字数据并将其复制并粘贴到同一工作簿中 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”但仍然没有运气。
【问题讨论】:
-
你觉得你用这条线得到了什么:
List1 = Selection? -
在您的
List1 = Selection行之后使用msgbox List1。作为初学者,msgbox是您的朋友……您可以在程序运行时打印到屏幕上。另外,学习使用调试器......它会让你知道你的变量在做什么以及你的逻辑是如何流动的。我怀疑 List1 没有合适的范围。 -
比
msgbox更进一步的是Immediate、Locals和Watch窗口。它们对于高效调试至关重要。 -
更喜欢
Debug.Print和Debug.Assert调用而不是MsgBox调用... -
@ScottCraner 我在启动子时将 List1 定义为当前选择。因为我希望它从不同的位置开始。这本工作簿有大量数据,我仍在添加,每次添加后,我必须手动更改下拉列表并将粘贴复制到另一张工作表。运行并点击调试并突出显示 List1 后,它会显示所选单元格中的值,这也显示我是否在该行之后放置了
msgbox List1。