私はVBAをかなり新しくしていますので、私のコードの多くはインターネットで調査してまとめたものです。私が達成しようとしていることの少し背景: -オブジェクト必要なランタイムエラー異なるワークブックを検索するときのVBA
私は同じレイアウトを持つ2つの作品の本があります。 1つのワークブックはVBAコードが保持され、もう1つはオーバーレイ文書の一種です。オーバーレイにコードがある列があり、そのコードが見つかった場合は元のワークブールの同じ列を検索してオーバーレイから元の行にコピーし、元の行を削除する必要があります。元の行をコピーするだけです。
私は実行時エラーを取得していたコードの行がある: -
以下Set rngFound = Workbooks("OverLay").Worksheets("Overlay").Range("G:G").Find(What:=r.Value, LookIn:=xlValues, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False)
は、私が使用していたコードの抜粋です。
Dim sht1 As Worksheet 'Current active worksheet (original version)
Dim sht2 As Worksheet 'Worksheet in OverLay
Dim rngFound As Range
Set sht2 = Workbooks("Overlay").Worksheets("Overlay")
With Workbooks("Original").Worksheets("Formatted")
lastRow = .Range("G" & .Rows.Count).End(xlUp).Row
End With
With sht2
For Each Row In .Range("G:G")
Set rngFound = Workbooks("OverLay").Worksheets("Overlay").Range("G:G").Find(What:=r.Value, LookIn:=xlValues, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False)
If Not rngFound Is Nothing Then
rngFound.Copy
Workbooks("Original").Worksheets("Formatted").Range(rngFound).PasteSpecial
End If
Next
End With
ブックを参照するときに、拡張子を使用してください。例えば'Set rngFound = Workbooks(" OverLay.xlsx ")....'。ワークブックをアクティブにし、イミディエイトウィンドウで '?activeworkbook.name'を使用すると、正しい名前を得ることができます。 – Jeeped
@Jeepedあなたが示唆したように私は修正案を作成しましたが、私はまだそのエラーを取得しています – user3088476
あなたの "価値"を見つけようとしている 'r'は何ですか? 'Row'と入力されたように見える – user3598756