2016-04-14 3 views
1

マクロの目的は、情報を再入力しないようにシートから情報を取り出して別のシートに転送することです。私がVBAエディタで実行すると、コードは完全に動作しますが、実行時エラー '1004'になります。ハイパーリンク経由でアプリケーションを実行しようとすると、アプリケーション定義またはオブジェクト定義エラーが発生します。私は、ハイパーリンクが正しいマクロにリンクされていることを知っています。どうしたの?ハイパーリンクをクリックしてもエディタで実行してもコードは動作しません

Sub Insert_PCO_Row() 

    ' Insert_PCO_Row Macro 
    ' Inserts PCO information into COR log if COR number is entered in COR number column in "Sub Pricing" Worksheet. 

    Dim corNum As Range 
    Dim nextOpen As Range 

    Sheets("Sub Pricing").Select 
    Range("C3").Select 

    Set corNum = Sheet6.Range("A1:A1000") 

    Do Until Selection.Offset(0, -1) = "" 
    'Checks if COR # is entered in "Sub Pricing" tab OR if the COR # is already entered in "COR Log" tab. 
    If Selection.Value = "" Or Application.WorksheetFunction.CountIf(corNum, Selection.Value) > 0 = True Then 
     Selection.Offset(1, 0).Select 
    Else 
     Set nextOpen = Sheet6.Range("A9").End(xlDown).Offset(1, 0) 
     Selection.Copy 
      nextOpen.PasteSpecial xlPasteValues 
     Selection.Offset(0, 1).Copy 
      nextOpen.Offset(0, 1).PasteSpecial xlPasteValues 
     Selection.Offset(0, -2).Copy 
      nextOpen.Offset(0, 2).PasteSpecial xlPasteValues 
     Selection.Offset(0, -1).Copy 
      nextOpen.Offset(0, 3).PasteSpecial xlPasteValues 
     Selection.Offset(0, 7).Copy 
      nextOpen.Offset(0, 7).PasteSpecial xlPasteValues 
     Selection.Offset(1, 0).Select 
    End If 

    Loop 

    Sheets("COR Log").Select 

End Sub 

答えて

0

お試しくださいwithout using .Select

Option Explicit 

Sub Insert_PCO_Row() 
    ' Insert_PCO_Row Macro 
    ' Inserts PCO information into COR log if COR number is entered in COR number column in "Sub Pricing" Worksheet. 

    Dim rw As Long, nrw As Long 

    With Worksheets("Sub Pricing") 
     For rw = 3 To .Cells(Rows.Count, 2).End(xlUp).Row 
      With .Cells(rw, 3) 
       If CBool(Len(.Value2)) And _ 
        Not IsError(Application.Match(.Value2, sheet6.Columns(1), 0)) Then 
        nrw = sheet6.Cells(Rows.Count, "A").End(xlUp).Row + 1 
         sheet6.Cells(nrw, 1) = .Value 
         sheet6.Cells(nrw, 2) = .Offset(0, 1).Value 
         sheet6.Cells(nrw, 3) = .Offset(0, -2).Value 
         sheet6.Cells(nrw, 4) = .Offset(0, -1).Value 
         sheet6.Cells(nrw, 8) = .Offset(0, 7).Value 
       End If 
      End With 
     Next rw 
    End With 

    Worksheets("COR Log").Select 

End Sub 

Range .Select方法を使用して、操作のソースとターゲットを識別するためにApplication.SelectionActiveCell性質に依存するが、単純に信頼できるものではありません。同様の方法で、直接値転送はCopy/PasteSpecial、Values操作よりも効率的であり、クリップボードには関係しません。

+0

ありがとう、ジープ。直接値転送の方法は、私のオリジナルのコピー貼り付け方法よりはるかにクリーンです。私はクイックフィードバックを感謝します。 –