[[20150707081559]] 『リンクの自動更新が無効にされましたと出る原因』(くろ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『リンクの自動更新が無効にされましたと出る原因』(くろ)

[[20150706094748]] の質問なのですが、上手く伝わらなかったので再度あげさせてもらいます。
名前の定義をしているシートを含む複数シートを新しいブックに保存して、
新しいブックだけを開くと「リンクの自動更新が無効にされました」と出る原因は何ですか?
元のブックも一緒に開くと出ないです。
名前の定義の参照は上手くいってます。
原因・回避方法など教えて欲しいです。

< 使用 Excel:Excel2010、使用 OS:Windows7 >


 >>上手く伝わらなかったので再度あげさせてもらいます。

 いや、伝わっていますよ。
 でも、こちらでは再現しないんです。

 具体的には、どのような条件をセットしていますか? また、ブック(シート)はどんなやり方でコピーしましたか?

 こちらで、コピー後、単独でそのブックを開いてもリボンとセル領域の間に、そのメッセージがでず、
 また、条件付書式も機能していると報告していますが、以下の手順です。

 1.まず、Sheet1とSheet2がある新規ブックの Sheet2のA1:A10 にブックレベルで"リスト"という名前を付けました。
 2.Sheet1 の A1:A10を選んで条件付書式、数式が =ISNUMBER(MATCH(A1,リスト,0)) 、書式で背景色を赤。
 3.いったん、これで、この新規ブックを名前を付けて保存。
 4.Sheet1,Sheet2を選択して、右クリックから、移動またはコピー。移動先を新規ブック、コピーを作成するにチェック。
 5.こうしてできた新規ブックを別の名前にして保存。
 6.いったんブックをすべて閉じてエクセルを終了。
 7.上記の5.で保存したブックを開く。

 これで、全く問題なく(エラーメッセージなしで)開くことができています。

(β) 2015/07/07(火) 08:37


 ふと思いついて。

 名前定義であるとか、条件付書式であるとか、そういった部分ではなく、コピーしたシートのどこかに
 外部参照リンクがあるということはないですか?

 シートを表示して、データタブの接続グループ、その中の「リンクの編集」が選べるようになっていたら
 外部参照があるということですから、それをクリックしてどこに何が設定されているのかを確かめてみてはいかがでしょう。

http://www.helpforest.com/excel/1_book/ex010029.htm

(β) 2015/07/07(火) 09:08


(β)さん

回答ありがとうございます。

>>名前定義であるとか、条件付書式であるとか、そういった部分ではなく、コピーしたシートのどこかに

 外部参照リンクがあるということはないですか?

自分ではリンクして作ったつもりは無いので、あるとしたら条件付き書式を名前の定義を使ってるからかと思ったのですが、違うのかもしれないですね。
リンク削除すればいいだけかが判断できないので、原因を知りたいです。
お手数ですが、私の作ったマクロみてもらっていいですか?

Worksheets("設定") :名前を定義「祝日:A6:B28」
WorkSheets("勤務") :元の書式(文字や罫線や数式などあり)
WorkSheets("車両") :元の書式(文字や罫線や数式などあり)

ブックを開くと書式設定。
勤務と車両をボタンを押すとそれぞれ日付の入った書式を1年分保存。

Private Sub Workbook_Open()
書式設定
End Sub

【標準モジュール3】
Sub 書式設定()

Application.EnableEvents = False

    With Sheets("勤務")

          .Range("A4").NumberFormatLocal = "ggge年m月"
          .Range("A8:A38").NumberFormatLocal = "d"
          .Range("B8:B38").NumberFormatLocal = "aaa"

        With .Range("$A8:$Q38")
                    .FormatConditions.Delete
                    .FormatConditions.Add Type:=xlExpression, Formula1:= _
                         "=AND($A8<>"""",OR(WEEKDAY($A8)=1,WEEKDAY($A8)=7))"
                    With .FormatConditions(1).Interior
                         .ColorIndex = 15
                    End With
                    .FormatConditions.Add Type:=xlExpression, Formula1:= _
                        "=COUNTIF(祝日,$A8)=1"
                    With .FormatConditions(2).Interior
                         .ColorIndex = 15
                    End With
        End With
   End With

   With Sheets("車両")

          .Range("A4").NumberFormatLocal = "ggge年m月"
          .Range("A8:A38").NumberFormatLocal = "d"
          .Range("B8:B38").NumberFormatLocal = "aaa"
          '.Range("F39").Formula = "=N49"
          .Range("F39").NumberFormatLocal = "m月d日"
          .Range("H39").NumberFormatLocal = "#,###"
          .Range("H39").ShrinkToFit = True
          .Range("J39").Formula = "=SUM(H40-H39)"
          .Range("J39").NumberFormatLocal = "#,###"
          .Range("J39").ShrinkToFit = True
          .Range("K39").Formula = "=SUM(K8:M38)"
          .Range("K39").NumberFormatLocal = "#,###"
          '.Range("F40").Formula = "=N67"
          .Range("F40").NumberFormatLocal = "m月d日"
          .Range("H40").NumberFormatLocal = "#,###"
          .Range("H40").ShrinkToFit = True
          .Range("N42").Formula = "=IF(J42="""",0,ROUND((K39/J42)*J41,0))"
          .Range("N42").NumberFormatLocal = "#,###"
          .Range("N49").NumberFormatLocal = "ggge年m月d日"
          .Range("N67").NumberFormatLocal = "ggge年m月d日"

        With .Range("$A8:$Q38")
                    .FormatConditions.Delete
                    .FormatConditions.Add Type:=xlExpression, Formula1:= _
                         "=AND($A8<>"""",OR(WEEKDAY($A8)=1,WEEKDAY($A8)=7))"
                    With .FormatConditions(1).Interior
                         .ColorIndex = 15
                    End With
                    .FormatConditions.Add Type:=xlExpression, Formula1:= _
                        "=COUNTIF(祝日,$A8)=1"
                    With .FormatConditions(2).Interior
                         .ColorIndex = 15
                    End With
        End With
   End With
 Worksheets("設定").Select

Application.EnableEvents = True
End Sub

【標準モジュール 1】

Sub 勤務報告書()
Application.ScreenUpdating = False
勤務
保存
Application.ScreenUpdating = True
End Sub

Sub 勤務()
Dim i As Integer
Dim e As Integer
Dim 日数 As Integer
Dim 月 As Integer
Dim r As Integer
Dim myDate As Date
Dim z As Integer
Dim w As Integer
Dim sh_name As String
Dim myFlag As Boolean
Dim myFlag2 As Boolean
Dim sh As Worksheet

i = 4
myDate = Worksheets("設定").Range("A6")

For w = 1 To 12

  If i > 12 Then e = 1
  If i > 12 Then i = 1

    '作成する月のシートがあるか否かの存在確認
     sh_name = i & "月"
    myFlag2 = False
    For Each sh In ThisWorkbook.Worksheets
        If sh.Name = sh_name Then
            myFlag2 = True
        End If
    Next sh
    '月のシートが無かったらカレンダー原紙をコピーして作成する
    If myFlag2 = False Then
        Worksheets("勤務").Copy after:=Worksheets(Worksheets.Count)
        ActiveSheet.Name = sh_name
    End If

With Worksheets(i & "月")

 .Range("A4").Value = Year(myDate) + e & "年" & i & "月"

月 = Month(.Range("A4"))
日数 = 0
.Range("M3").Value = Worksheets("設定").Range("B1")
.Range("M4").Value = Worksheets("設定").Range("B2")
.Range("B41").Value = Worksheets("設定").Range("A3")
.Range("B42").Value = Worksheets("設定").Range("A4")

For r = 8 To 38
.Cells(r, 1).Formula = "=$A$4+" & 日数 '日付の位置
.Cells(r, 2).Value = Format(Cells(r, 1), "aaa")
日数 = 日数 + 1
If 月 <> Month(.Range("A4") + 日数) Then Exit For
Next
i = i + 1
End With
Next w

End Sub

Sub 保存()

    Dim FileName As String
    Dim myDate As Date

    Worksheets(Array("設定", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月", "1月", "2月", "3月")).Copy

    FileName = ThisWorkbook.Path & "\" & Format(DateAdd("m", -3, myDate), "ge年度勤務報告書") & ".xlsx"
    With ActiveWorkbook
        myDate = .Sheets(2).Range("A4")
        Sheets("設定").Visible = False
        FileName = ThisWorkbook.Path & "\" & Format(DateAdd("m", -3, myDate), "ge年度勤務報告書") & ".xlsx"
        Application.DisplayAlerts = False   '同名ブックあれば無条件上書き→閉じる
        .SaveAs FileName
        .Close
    End With
    Worksheets(Array("4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月", "1月", "2月", "3月")).Delete  '無条件に削除
        Application.DisplayAlerts = True
    Worksheets("設定").Select
 End Sub

【標準モジュール  2】

Sub 車両走行距離報告書()
Application.ScreenUpdating = False
車両
保存2
Application.ScreenUpdating = True
End Sub

Sub 車両()
Dim i As Integer
Dim e As Integer
Dim 日数 As Integer
Dim 月 As Integer
Dim r As Integer
Dim myDate As Date
Dim z As Integer
Dim w As Integer
Dim sh_name As String
Dim myFlag As Boolean
Dim myFlag2 As Boolean
Dim sh As Worksheet
'Dim s As Worksheet
i = 4
myDate = Worksheets("設定").Range("A6")

For w = 1 To 12

  If i > 12 Then e = 1
  If i > 12 Then i = 1

    '作成する月のシートがあるか否かの存在確認
     sh_name = i & "月"
    myFlag2 = False
    For Each sh In ThisWorkbook.Worksheets
        If sh.Name = sh_name Then
            myFlag2 = True
        End If
    Next sh
    '月のシートが無かったらカレンダー原紙をコピーして作成する
    If myFlag2 = False Then
        Worksheets("車両").Copy after:=Worksheets(Worksheets.Count)
        ActiveSheet.Name = sh_name
    End If

With Worksheets(i & "月")

 .Range("A4").Value = Year(myDate) + e & "年" & i & "月"

月 = Month(.Range("A4"))
日数 = 0
.Range("M3").Value = Worksheets("設定").Range("B1")
.Range("M4").Value = Worksheets("設定").Range("B2")
.Range("F39").Value = .Range("A4")
.Range("F40").Value = DateSerial(Year(.Range("A4")), Month(.Range("A4")) + 1, 0)
.Range("E47").Value = Worksheets("設定").Range("B2")
.Range("N49").Value = .Range("A4")
.Range("N67").Value = DateSerial(Year(.Range("A4")), Month(.Range("A4")) + 1, 0)

For r = 8 To 38
.Cells(r, 1).Formula = "=$A$4+" & 日数 '日付の位置
.Cells(r, 2).Value = Format(Cells(r, 1), "aaa")
日数 = 日数 + 1
If 月 <> Month(.Range("A4") + 日数) Then Exit For
Next
'If i <> 4 Then
'Set s = Worksheets(i & "月")

    's.Range("H39").Formula = "=" & s.Previous.Name & "!H40"
'End If
i = i + 1
End With
Next w

End Sub

Sub 保存2()

    Dim FileName As String
    Dim myDate As Date

    Worksheets(Array("設定", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月", "1月", "2月", "3月")).Copy

    FileName = ThisWorkbook.Path & "\" & Format(DateAdd("m", -3, myDate), "ge年度車両走行距離報告書") & ".xlsx"

    With ActiveWorkbook
        myDate = .Sheets(2).Range("A4")
        Sheets("設定").Visible = False
        FileName = ThisWorkbook.Path & "\" & Format(DateAdd("m", -3, myDate), "ge年度車両走行距離報告書") & ".xlsx"
        Application.DisplayAlerts = False   '同名ブックあれば無条件上書き→閉じる
        .SaveAs FileName
        .Close
    End With
    Worksheets(Array("4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月", "1月", "2月", "3月")).Delete  '無条件に削除
        Application.DisplayAlerts = True
    Worksheets("設定").Select
 End Sub

(くろ) 2015/07/07(火) 11:00


 こちらでも、このコードをxl2010で実行してみます。何かわかれば連絡します。

 ところで、本題とは関係ありませんが、よく、マクロ内で、書式等を設定するコードをみかけます。
 そのたびに、なぜなのかなと思いますね。

 設定する場所や設定する内容が、可変である場合は、マクロ処理で、おかしくないわけですが
 このマクロは何度も動かすんでしょうね。で、そのたびに決まった場所に同じ書式設定を行う?
 前回の処理ですでに設定されていますよね。

 最初の処理なら、わからないでもないですが、でも、決まりきった場所の決まりきった書式ですから
 この原本ブックであるマクロブックのそれぞれのシートに手作業で設定しておけば、マクロでの設定が
 一切不要なんですが?

 マクロ処理しておられる理由、後学のために教えていただけませんか?

(β) 2015/07/07(火) 15:31


(β) さん

お手数おかけしますが、宜しくお願いします。

このブックを社員に配布します。パソコンが苦手な上司などが
計算式を消したりするんですが、本人は消したことを無自覚なんです。
その度に連絡がくるのでそれを回避するためです。すいません。
(くろ) 2015/07/07(火) 17:54


 原本をコピーして配布するということには、何も疑問をもっていません。
 まぁ、相手先で数式や書式をうっかり消さないように、セル保護、シート保護をかけておくという別の考慮点はあろうかとおもいますが。

 申し上げているのは、その配布前の原本、これにあらかじめ書式設定しておけば、配布時にマクロ内で
 書式設定することはないでしょ? ということです。

(β) 2015/07/07(火) 19:36


 報告だけです。

 新規ブックにアップされたコードを貼り付け、実行。
 シート要件(レイアウトなど)が不明なので、いたるところでエラーになりましたが、都度、対応しながら
 とにかくコピーを保存。

 それを開きましたが、なんのエラーも表示されず開くことができました。

 やはり、コードの範囲ではなく、この原本のシートのどこかに、外部参照があるような気がします。
 原本ブックのすべてのシートで、データタブの接続グループのリンクの編集で外部参照有無を確かめてみられましたか?

(β) 2015/07/07(火) 20:38


(β)さん

>>申し上げているのは、その配布前の原本、これにあらかじめ書式設定しておけば、配布時にマクロ内で

 書式設定することはないでしょ? ということです。

このブック(原本)を配布して使ってもらう予定です。
まだ書式設定でできる部分があるということですね、現段階の私には思いつきませんでした。

>>やはり、コードの範囲ではなく、この原本のシートのどこかに、外部参照があるような気がします。

 原本ブックのすべてのシートで、データタブの接続グループのリンクの編集で外部参照有無を確かめてみられましたか?

全てのシートで、データタブを確認しましたがありません。

色々試してみて気付いたのですが、配布を予定してるので設定シートにフォームコントロールで作ったボタンにマクロを登録してます。これが原因ですか?これを削除して実行するとエラーになりません。

でも、ボタンを残したままで名前の定義部分だけコピーしても同様のエラーになります。その時の新しいブックの名前の定義がうまくいきません。
新しいブックの定義を新しくしようとすると、「入力した名前は既に存在します。一意の名前を入力してください。」とでます。コピーのやり方があるのでしょうか?

(くろ) 2015/07/07(火) 21:24


 >>フォームコントロールで作ったボタンにマクロを登録してます

 原因はこれですね。

 ボタン付きのままコピーされたブックの、このボタンを右クリックしてマクロの登録を選んでみてください。
 ボタンに登録されているマクロ名が、元ブックのパス付になっていますね。
 このために、外部リンク云々のメッセージが出ます。
 コピー前でもコピー後でもいいですが、ボタンを削除しましょう。

 >>でも、ボタンを残したままで名前の定義部分だけコピーしても同様のエラーになります。その時の新しいブックの名前の定義がうまくいきません。 
 >>新しいブックの定義を新しくしようとすると、「入力した名前は既に存在します。一意の名前を入力してください。」とでます。コピーのやり方があるのでしょうか? 

 ごめんなさい。意味がよくわかりません。「でも」というところが特に。
 ボタンを残したままではリンクエラーはなくなりませんのでボタンは削除しましょう。

 それと、名前の定義は別物です。すでに名前定義がなされたブックになってますね。
 そこで同じ名前の定義をしようとしても、これはできません。
 なにも、コピーしたからということではなく、たとえば新規ブックで名前定義をする。
 で、同じブックで、同じ名前を使って名前定義をしようとすると、このメッセージがでて、定義はできませんよね。
 エクセル仕様です。

(β) 2015/07/07(火) 21:37


(β) さん

ありがとうございます。
おかげで原因がわかりました。

>>ごめんなさい。意味がよくわかりません。「でも」というところが特に。

 ボタンを残したままではリンクエラーはなくなりませんのでボタンは削除しましょう。

でも、というのはボタンの部分をコピーしなければOKなのかと思いました。(名前の定義部分のみコピー)
ボタンがあるだけでダメなんですね。勉強になりました。これで前に進めます。

>>それと、名前の定義は別物です。すでに名前定義がなされたブックになってますね。

 そこで同じ名前の定義をしようとしても、これはできません。
 なにも、コピーしたからということではなく、たとえば新規ブックで名前定義をする。
 で、同じブックで、同じ名前を使って名前定義をしようとすると、このメッセージがでて、定義はできませんよね。
 エクセル仕様です。

一度使った名前定義の名前は使えないんですね。勉強不足でした。
(くろ) 2015/07/07(火) 22:27


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.