我是一名IT菜鸟,我们的任务是创建一个Excel宏,它将员工编号从一个工作表交叉引用到另一个工作表。找到匹配的员工编号后,需要复制该员工的信息(姓名等),最后将其带到结果页面并粘贴信息。
这是我第一次制作VBA宏,或者编程一般,所以请耐心等待。
Sub Macro2()
'
' Macro2 Macro
' 1st attempt
'
Dim DataObj As New MSForms.DataObject
Dim S As String
DataObj.GetFromClipboard
S = DataObj.GetText
For x = 1 To 10
Sheets("ad").Select
Cells(11 + x, 7).Select
Selection.Copy
Sheets("sp").Select
Cells.Find(What:=S, After:=ActiveCell, LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False, SearchFormat:=False).Activate
ActiveCell.Offset(0, -1).Range("Table_GetJobs4[#Headers]").Select
ActiveCell.Offset(0, 1).Range("Table_GetJobs4[[#Headers],[Company_Code]]"). _
Activate
Application.CutCopyMode = False
Selection.Copy
Sheets("adtospresult").Select
ActiveCell.Offset(0, -2).Range("A1").Select
Cells.Find(What:="33620", After:=ActiveCell, LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False, SearchFormat:=False).Activate
ActiveCell.Offset(0 + x, -9).Range("A1").Select
ActiveSheet.Paste
ActiveCell.Offset(0, 2).Range("A1").Select
Next x
End Sub
很简单,我还没有能够让剪贴板找到工作的功能。任何帮助/指示都将非常感谢,谢谢。
答案 0 :(得分:0)
您可以将范围的值传递给s
,而不是尝试将剪贴板信息传递给S
,而不是:
s = Cells(11 + x, 7).Value
当你将它复制到另一个工作表时将其反转。
some_range = s
此外,您不需要选择任何完全有效的工作表或单元格:
Sheets("sp").found_range = Sheets("ad").Cells(11 + x, 7).Value
找到的范围是您想要粘贴第一张工作表值的另一个工作表中的范围。
仅供参考,http://www.techrepublic.com/blog/software-engineer/train-users-to-follow-best-practices-when-writing-vba-code/这将有助于阅读以学习编写代码的最佳实践。当你不得不回去试图破解你在以后的代码中所做的事情时,它将在未来拯救你。