2016-04-18 9 views
1

Wk1、Wk2 Wk3などの名前のワークシートがあります。このExcel VBAコードは機能しません。数式で名前付き範囲を更新する必要があります

すべての名前付き範囲には、シートの名前で始まる名前があります。たとえばWk1シート上にはWk1TotalWeightという名前の範囲があります。

私は更新することシート上式で、私は名前付き範囲をしたいWkので始まる名前で新しいワークシートを追加するたびに、私は、各sheet.eg = Wk1TotalWeight * 2

にこれらの名前付き範囲を参照する数式を持っています親シートの名前から始めます。例:formaulaがWk2のWk1TotalWeight * 2である場合式をWk2TotalWeightに更新したい* 2

私はこのコードを試しましたが動作しません。

Sub ChangeWkNamesInFormulasOnNewWksheet() 

    Dim ws As Worksheet 
    Dim r As Range 

    For Each ws In Worksheets 
     If InStr(1, ws.Name, "Wk", 1) > 0 Then 
      For Each r In ws.Range("C118:I119") 
       r.Formula = Replace(r.Formula, "Wk1", r.Parent.Name) 
      Next r 

      For Each r In ws.Range("C166:J170") 
       r.Formula = Replace(r.Formula, "Wk1", r.Parent.Name) 
      Next r 


     End If 
    Next ws 

    MsgBox "Done" 
    End Sub 
+0

これは私のために働く。文字列 "Wk1"がC166:J170で見つかることは確かですか? – noumenal

+0

"新しいワークシートを追加するたびに"。これはばかげた提案かもしれませんが、エディタからコードを実行しましたか? – noumenal

+1

私が間違っていたことをHeres。私はシートWk1、Wk2とWk3を持っていたし、Wk4シートを加えた。私はWk3シートからWk4に数式をコピーしましたが、私はWk1からWk4に数式をコピーしました。私はWk3からWk4にコピーしたので、式にはWk3で始まるnmaed範囲が含まれていました。それがMAcroが機能しなかった理由です。私に考えさせてくれてありがとうnoumenal – frustrationmultiplied

答えて

2

を使用してはいけません。

シートWk1、Wk2、Wk3があり、Wk4シートが追加されました。

私はWk3シートの式をWk4にコピーしましたが、Wk1からWk4までの式をコピーしたはずです。

私はWk3からWk4にコピーしたので、式にはWk3で始まる名前付き範囲が含まれていました。言い換えれば、文字列 "Wk1"は範囲に存在しませんでした。これらの名前付き範囲は、コードを動作させるためにWk1から始める必要がありました。

これがコードが機能しなかった理由です。上記ポストのコメントのヌーメールに感謝

0

は、なぜあなたはHERESに私が間違って何をやっていただけでr.Formula = Replace(r.Formula, "Wk1", ws.Name)

+0

これは後で試してみるとうまくいくのですか?私が間違っていたことについての上記の記事のコメントを見てください – frustrationmultiplied

関連する問題