2014-11-28 2 views
0

Я ищу макрос для поиска строки из листа в соответствии с заданными критериями. И он соответствует строке с другого листа и вставляет изображение соответствует этому тексту. если строка не найдена, она должна оставить этот поиск и искать следующий. например, мне нужно сделать строку поиска и преобразовать ее в файл pdf.Нужно создать макрос для поиска строки и сопоставить строку с другим открытым листом и вставить соответствующее изображение.

вот пример кода

Sub EXCELTOPDF() 

    Dim strPath As String 
    Dim strFile, A As String 
    Dim NextRow As Long 

    strPath = "C:\Users\919944\desktop\xyz" 
    If Right(strPath, 1) <> "\" Then strPath = strPath & "\" 
    strFile = Dir(strPath & "*.xls", vbNormal) 
Do While strFile <> "" 

Workbooks.Open strPath & strFile 




    On Error Resume Next 

If (Cells.Find(What:="ABC", After:=ActiveCell, LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ 
     MatchCase:=False, SearchFormat:=False).Activate) Then 
    ActiveCell.Value = ActiveCell.Value() 
    ActiveCell.Select 
    Windows("Image_S.xlsx").Activate 
    Cells.Find(What:="ABC", After:=ActiveCell, LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ 
     MatchCase:=False, SearchFormat:=False).Activate 
    ActiveSheet.Shapes.Range(Array("Picture 123")).Select 
    Selection.Copy 
    Windows(strFile).Activate 
    ActiveCell.Offset(0, 1).Select 
    ActiveSheet.Paste 
End If 



    If (Cells.Find(What:="XYZ", After:=ActiveCell, LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ 
     MatchCase:=False, SearchFormat:=False).Activate) Then 

    ActiveCell.Value = ActiveCell.Value() 
    ActiveCell.Select 
    Windows("Image_S.xlsx").Activate 
    Cells.Find(What:="XYZ", After:=ActiveCell, LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ 
     MatchCase:=False, SearchFormat:=False).Activate 
    ActiveSheet.Shapes.Range(Array("Picture 638")).Select 
    Selection.Copy 
    Windows(strFile).Activate 
    ActiveCell.Offset(0, 1).Select 
    ActiveSheet.Paste 
End if 




If (Cells.Find(What:="EFGH", After:=ActiveCell, LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ 
     MatchCase:=False, SearchFormat:=False).Activate) Then 
     On Error Resume Next 
    ActiveCell.Value = ActiveCell.Value() 
    ActiveCell.Select 
    Windows("Image_S.xlsx").Activate 
    Cells.Find(What:="EFGH", After:=ActiveCell, LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ 
     MatchCase:=False, SearchFormat:=False).Activate 
    ActiveSheet.Shapes.Range(Array("Picture 24")).Select 
    Selection.Copy 
    Windows(strFile).Activate 
    ActiveCell.Offset(0, 1).Select 
    ActiveSheet.Paste 
End If 



If (Cells.Find(What:="PQRS", After:=ActiveCell, LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ 
     MatchCase:=False, SearchFormat:=False).Activate) Then 
    ActiveCell.Value = ActiveCell.Value() 
    ActiveCell.Select 
    Windows("Image_S.xlsx").Activate 
    Cells.Find(What:="PQRS", After:=ActiveCell, LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ 
     MatchCase:=False, SearchFormat:=False).Activate 
    ActiveSheet.Shapes.Range(Array("Picture 23")).Select 
    Selection.Copy 
    Windows(strFile).Activate 
    ActiveCell.Offset(0, 1).Select 
    ActiveSheet.Paste 
End If 

iPtr = InStrRev(ActiveWorkbook.FullName, ".") 
If iPtr = 0 Then 
    sFileName = ActiveWorkbook.FullName & ".pdf" 
    Else 
    sFileName = Left(ActiveWorkbook.FullName, iPtr - 1) & ".pdf" 
End If 

    sFileName = Application.GetSaveAsFilename(InitialFileName:=sFileName, fileFilter:="PDF Files (*.pdf), *.pdf") 

If sFileName = "False" Then Exit Sub 

    ActiveWorkbook.ExportAsFixedFormat Type:=xlTypePDF, filename:=sFileName, Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False 
    strFile = Dir 
Loop 
End Sub 

В приведенном выше примере ABC не найден, то перейти в область поиска следующей строки XYZ. image_s - это рабочий лист, содержащий список изображений, связанных с этим именем. любезно сделайте потребный

+0

привет pnuts, В моем коде выше, если ABC представляет в рабочем листе, то он автоматически ищет и выбирает изображение и вставить его в следующую активную ячейку. но если ABC не существует, это показывает ошибку отладки. Теперь, если я поместил код «on error resume next». он переходит к другому поиску, но он все еще выбирает изображение, относящееся ко всем именам, указанным на листе, и вставляет его в мой рабочий лист любезно, делает нужным – vicky

+0

. Какова цель второго 'Find()' - если вы знаете имя вам нужно копировать, почему бы просто не выбрать это? –

+0

Вы говорите, что вы «ищете макрос». Означает ли это, что вы на самом деле не занимаетесь программированием? Ваш метод, чтобы найти какой-то код, который похож на то, что вы хотите, а затем опубликовать его здесь с указанием того, что вы хотите, и попросить других людей запрограммировать его для вас? –

ответ

0

Составителем но не тестировался:

Sub EXCELTOPDF() 

    Dim strPath As String 
    Dim strFile, A As String 
    Dim NextRow As Long 
    Dim wb As Workbook, shtImg As Workbook 
    Dim f As Range 
    Dim arrFind, arrPic, i 

    'array of values to search for 
    arrFind = Array("ABC", "DEF", "GHI") 
    'array of corresponding shape names 
    arrPic = Array("Picture1", "Picture2", "Picture3") 

    'get a reference tothe sheet with the images 
    Set shtImg = Workbooks("Image_S.xlsx").Sheets("Images") 

    strPath = "C:\Users\919944\desktop\xyz" 
    If Right(strPath, 1) <> "\" Then strPath = strPath & "\" 

    strFile = Dir(strPath & "*.xls", vbNormal) 

    Do While strFile <> "" 

     'open the workbook and get a reference to it 
     Set wb = Workbooks.Open(strPath & strFile) 

     'loop over the array of values to search for 
     For i = LBound(arrFind) To UBound(arrFind) 

      Set f = wb.Sheets(1).Find(What:=arrFind(i), After:=ActiveCell, _ 
             LookIn:=xlFormulas, LookAt:=xlPart) 

      'test to see if value was found (f will not be Nothing) 
      If Not f Is Nothing Then 
       f.Value = f.Value 
       'copy required image... 
       shtImg.Shapes(arrPic(i)).Copy 
       f.Offset(0, 1).PasteSpecial 
      End If 

     Next i 

     'your export code here.... 

     strFile = Dir() 
    Loop 

End Sub 
+0

привет Тиму, спасибо за помощь. но я столкнулся с ошибкой в ​​этой строке «Set f = wb.Sheets (1) .Find (What: = arrFind (i), After: = ActiveCell, _ LookIn: = xlFormulas, LookAt: = xlPart)« любезно выполните необходимо – vicky

+0

Какая ошибка? Я не могу догадаться .... –

+0

http://en.wikipedia.org/wiki/Do_the_needful –