【发布时间】:2015-08-27 03:34:11
【问题描述】:
我正在为将分发给一组人员的文件创建一个宏;该函数应该能够从另一个单元格(在变量 B 中)中提取该人的姓名,在另一个具有多个工作表(变量 X)的工作簿中搜索该值,如果找到,则将工作簿 X 中的特定单元格范围复制到工作簿 B。
以下代码有问题:
Sub Pull_data_Click()
Dim A As Variant 'defines name from first subroutine
Dim B As Workbook 'defines destination file
Dim X As Workbook 'defines existing report file as source
Dim Destination As Range 'defines destination range of data pulled from report
Dim wb As Workbook
Dim ws As Worksheet
Dim rng As Range
A = Workbooks("filenameB.xlsm").Worksheets("Summary").Range("A1").Value 'constant variable, does not change
Set B = Workbooks("filenameB.xlsm") 'constant variable, does not change
Set X = Workbooks.Open("filenameX.xlsm") 'dependent variable, new name for each new report
Set Destination = Workbooks("filenameB.xlsm").Worksheets("Input").Range("B2:S2") 'Range changes for each iteration, rows increase by 1
'check if name is entered
If A = "" Then
MsgBox ("Your name is not visible; please start from the Reference tab.")
B.Worksheets("Reference").Activate
Exit Sub
End If
With X.Worksheets
For Each ws In X.Worksheets
Set rng = Cells.Find(What:=A, After:=ActiveCell, LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False)
ActiveCell.Activate
ActiveSheet.Range("$A$2:$DQ$11").AutoFilter Field:=1, Criteria1:=A
Range("A7:CD7").Select
Selection.Copy
B.Activate
Destination.Activate
Destination.PasteSpecial Paste:=xlPasteValues
Next ws
End With
Application.ScreenUpdating = False
End Sub
它能够成功编译并且没有运行时错误,并且当它运行时,它似乎正在正确地循环工作表......但它粘贴了错误的信息。这有什么我没有正确设置的吗?
【问题讨论】:
-
'粘贴错误信息' 你希望它粘贴什么信息?实际粘贴了什么?
-
您要粘贴的数据,总是在一行中是吗?范围 A7 到 CD7?
-
我要粘贴的范围内的信息都位于一行中,其中 A 列中的值 = 子变量 A。在使用该值隔离行之后,它应该从 A 列到 CD 复制值(文本和数字),尽管行号可能不同。我仍在尝试弄清楚如何做到这一点。
-
哦哦哦哦,然后你意识到你的目标范围不够宽,无法容纳你的源范围?编辑:82列?哎呀XD
-
/insert Slowpoke meme 我之所以这样设置是因为宏编辑器在我手动操作时记录了它......并且大量列被隐藏并且数据是过滤掉,手动复制/粘贴非常合适。