2012-08-08 72 views
0

我每天都会从外部来源输入数据。在一张纸上,我有一个股票代码列表(按字母顺序排列),并在该行中继续显示相应的数据。记录宏(Excel 2003)按行有条件地复制粘贴

在另一张纸上,我有股票按其相应的部门组织,而不是按字母顺序排列。

我试图开发一个宏,使第一张工作表中的信息自动粘贴到第二张工作表中,方法是识别代码并粘贴到相应的行中。

这里是到目前为止所使用的代码,但它没有工作打算的方式:

Dim LSymbol As String 
    Dim LRow As Integer 
    Dim LFound As Boolean 

    On Error GoTo Err_Execute 

    'Retrieve symbol value to search for 
    LSymbol = Sheets("Portfolio Update").Range("B4").Value 

    Sheets("Test").Select 

    'Start at row 2 
    LRow = 2 
    LFound = False 

    While LFound = False 

     'Encountered blank cell in column B, terminate search 
     If Len(Cells(2, LRow)) = 0 Then 
      MsgBox "No matching symbol was found." 
      Exit Sub 

     'Found match in column b 
     ElseIf Cells(2, LRow) = LSymbol Then 

      'Select values to copy from "Portfolio Update" sheet 
      Sheets("Portfolio Update").Select 
      Range("B5:V5").Select 
      Selection.Copy 

      'Paste onto "Test" sheet 
      Sheets("Test").Select 
      Cells(3, LRow).Select 
      Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _ 
      False, Transpose:=False 

      LFound = True 
      MsgBox "The data has been successfully copied." 

     'Continue searching 
     Else 
      LRow = LRow + 1 
     End If 

    Wend 

    On Error GoTo 0 

    Exit Sub 

Err_Execute: 
    MsgBox "An error occurred." 

End Sub 

感谢。

+0

它做什么,而不是按照预期工作? – 2012-08-08 18:40:26

+2

应该是'.Cells(row,col)'不是'.Cells(col,row)' – 2012-08-08 18:54:18

+0

@TimWilliams:这是一个有效的答案;)(提示提示)@EBB:避免使用'.Select'看这个链接http ://stackoverflow.com/questions/10714251/excel-macro-avoiding-using-select – 2012-08-09 01:10:12

回答

0

应该是.Cells(row,col) not .Cells(列,行)`

但是,您可以通过使用find()避免循环 -

Sub Tester() 

    Dim LSymbol As String 

    Dim shtPU As Worksheet 
    Dim shtTest As Worksheet 
    Dim f As Range 
    Dim c As Range 

    Set shtPU = Sheets("Portfolio Update") 
    Set shtTest = Sheets("Test") 

    On Error GoTo Err_Execute 

    For Each c In shtPU.Range("B4:B50").Cells 

     LSymbol = c.Value 'Retrieve symbol value to search for 

     If Len(LSymbol) > 0 Then 
      Set f = shtTest.Columns(2).Find(LSymbol, , xlValues, xlWhole) 
      If Not f Is Nothing Then 
       'was found 
       With c.Offset(0, 1).Resize(1, 21) 
        f.Offset(0, 1).Resize(1, .Columns.Count) = .Value 
       End With 
       c.Interior.Color = vbGreen 
       'MsgBox "The data has been successfully copied." 
      Else 
       'not found 
       c.Interior.Color = vbRed 
       'MsgBox "No matching symbol was found." 
      End If 
     End If 

    Next c 

    Exit Sub 

Err_Execute: 
    MsgBox "An error occurred:" & Err.Description 

End Sub 

编辑 - 通过符号

列表添加循环
+0

蒂姆威廉斯,@SiddharthRout,真棒。感谢您的帮助和迅速回复。我现在无法访问它,但是一旦我做了,我将使用您的建议,并让您知道它是如何发生的。再次感谢。 – EBB 2012-08-09 16:16:17

+0

Tim Williams,@SiddharthRout,我能够测试它,并且宏能够工作,但它只搜索,复制和粘贴第一个代码的数据到'测试'表中。我试图让宏查找所有40个代码并将相应的数据粘贴到“测试”表中。如有任何帮助,我们将不胜感激。 – EBB 2012-08-16 12:07:23

+0

查看我编辑的代码 – 2012-08-16 16:14:58