0

現在、ワークブックとワークシート固有の名前付き範囲を含むワークシートをコピーしています。ワークシート固有の参照はそのままにする必要があり、ワークブックの参照はハードコーディングする必要があります。外部参照を含むすべての名前付き範囲を修正する方法を探しています。

私の現在のコードは次のようになりますが、実際には私が求めているものではありません:

Sub HardcodeValuesInExternalNamedRanges(wb As Workbook, ws As Worksheet)
Dim namCur As Name

For Each namCur In wb.Names
    If (InStr(1, namCur.RefersTo, ThisWorkbook.Name) > 0) Then
        namCur.RefersTo = "=" & ws.Evaluate(namCur.RefersTo)
    End If
Next namCur
End Sub

値を適切に固定する方法が見つかりませんでした。現在の方法である程度は機能しますが、名前付き範囲ベースだけでなく、セル内で値が適切に変換されていることをお勧めします。

別のオプションは、すべてのセルをループして、名前付き範囲が含まれているかどうかを確認することですが、これは時間がかかりすぎると思います。

より効率的に行う方法はありますか?

4

1 に答える 1

1

セルをループするのではなく、.FindNextこのようにループするのはどうですか?

Do
    rng.Value = rng.Value 'Hardcodes the value
    Set rng = .FindNext(What:=ThisWorkbook.Name Lookin:=xlFormulas) 'finds the next Value to be hardcoded
Loop While Not Rng Is Nothing
于 2015-03-23T20:53:49.177 に答える