0

以下のコードを使用してワークブックを開き、開いたワークブック (nb) の行からすべての重複を削除する必要があります。

Dim nb As Workbook, tw As Workbook, ts As Worksheet
 a = Application.GetOpenFilename
 If a = False Or IsEmpty(a) Then Exit Sub
 With Application
   .ScreenUpdating = False
End With
Set tw = ThisWorkbook
Set ts = tw.ActiveSheet
Set nb = Workbooks.Open(a)

これを機能させるためにさまざまな方法を試しましたが、ワークブックでこれを呼び出すための基本的な部分が欠けているようです。424 Object Required エラーが発生します。

'Remove duplicates
Dim r As Range
c = nb.ActiveSheet.UsedRange.Rows.Count
LR = c - 1

Set r = nb.ActiveSheet.Range("A8:H" & LR)
r.RemoveDuplicates Columns:=Array(1), Header:=xlNo

エラー (424 オブジェクトが必要) が表示される行は、次のとおりです。

r.RemoveDuplicates Columns:=Array(1), Header:=xlNo

rが範囲だからだと思いますが、特定のワークブックに設定されていないので、

オブジェクト r を見ると、間違ったワークブックのシートにシートになっています。ここでrを外部ワークブックとして明示的にマークしているため、理由がわかりません

    Set r = nb.ActiveSheet.Range("A8:H" & LR)
4

2 に答える 2

0

使わないActivesheet→目が痛い。

シートに名前を付けてから、それらを呼び出します

LR = nb.sheets('somesheet').Range("A1:H" & LR)

プログラム全体のバグが少ないことに気付くでしょう。範囲を設定する前に、ワークブックとシートを明示的にアクティブ化してください。

編集 2 番目の問題に基づいて、デバッグする必要があります。

1) 使用範囲の確認

Dim oRange as excel.range 

nb.sheets("NAMEYOURSHEET").activate 
set oRange = nb.sheets("NAMEYOURSHEET").UsedRange

すぐに表示されるウィンドウで次のように入力します: oRange.select + 'Enter key'.
ここのどこかでバグが発生した場合、問題がどこにあるのかがわかります。

于 2013-10-23T08:40:44.763 に答える
0

問題はマージされたセルでした。重複している範囲にマージされたセルがある場合、VBAコードは何をすべきかわかりません。

以下は、外部ワークブックを開くためのサブであり、ワークシート1から範囲内の重複を削除しました

Sub remDup3()
Dim nb As Workbook, tw As Workbook, ts As Worksheet
 a = Application.GetOpenFilename
 If a = False Or IsEmpty(a) Then Exit Sub
 With Application
 .ScreenUpdating = False
 End With
 Set tw = ThisWorkbook
 Set ts = tw.ActiveSheet
 Set nb = Workbooks.Open(a)

LR = nb.Sheets(1).UsedRange.Rows.Count

        With nb.Sheets(1)
        Set Rng = Range("A9:H" & LR)
        Rng.RemoveDuplicates Columns:=Array(4), Header:=xlNo
    End With
End Sub
于 2013-10-23T11:03:37.430 に答える