4

私は2冊のワークブックを持っています。ソース ワークブックとデスティネーション ワークブック。両方で同じ名前を持つが異なるデータを持つ 1 つのワークシートを除いて、それらは完全に同じです (両方とも約 30 シートを含みます)。私が望んでいたのは、残りの同一のワークシートをソース ワークブックから宛先ワークブックにコピーして、データを延期する 1 つのワークシートを残すことでした。

基本的に、宛先ワークブックに存在する同一のワークシートは、ソース ワークブックのワークシートに置き換える必要があります。ワークシートには、数式と名前付き範囲が含まれています。ワークシートをコピーするための VBA コードを正常に作成できました。ただし、名前付き範囲にはワークブック スコープがあるためです。名前付き範囲は、引き続きソース ワークブック内の場所を参照します。したがって、同じ名前の名前付き範囲が 2 つ取得されます。何かのようなもの:

'The one already present in the destination workbook (from the worksheet which was replaced)
Name=VaccStart , Refers To =Sheet2!$A$2 
'The one due to the copied worksheet.
Name=VaccStart , Refers To =[C:\Users\.....\Source.xls]Sheet2!$A$2 

名前付き範囲をコピーするときに、コピー元のブックではなく、コピー先のブックを参照するようにします。両方のワークブックのすべてのシートが同じであるため、それらを置き換えるだけです。

4

2 に答える 2

1

ソースから移動先のワークブックに移動するときに誤ってリンクが作成されるのを回避する簡単な方法の 1 つは、移動先のワークブックをソースからそれ自体に再リンクすることです。

xl2010 のスクリーンショット

  • 編集 .... リンク
  • 「ソースの変更」を選択し、現在のファイルを新しいソースとして選択します

ここに画像の説明を入力

于 2011-12-07T05:18:01.033 に答える
1

これにより、名前付き範囲が変更され、外部ファイル参照が削除されます。

Sub ResetNamedRanges()
    Dim nm As Name
    Dim sRefersTo As String
    Dim iLeft As Integer
    Dim iRight As Integer

    For Each nm In ActiveWorkbook.Names
        sRefersTo = nm.RefersTo
        iLeft = InStr(sRefersTo, "[")
        iRight = InStr(sRefersTo, "]")
        If iLeft > 1 And iRight > 0 Then
            sRefersTo = Left$(sRefersTo, iLeft - 1) & Mid$(sRefersTo, iRight + 1)
            nm.RefersTo = sRefersTo
        End If
    Next nm
End Sub
于 2011-12-07T04:23:49.920 に答える