アプリ版:「スタンプのみでお礼する」機能のリリースについて

ブックが外部参照していると、取込時にエラーになってしまうソフトを使っています。
事前にEXCELマクロでブック内のリンクの状態の取得することで、エラーを回避できればと思っています。
外部参照、リモート参照ともに更新せずにブックを開くのは下記の方法でできそうなのですが、そこから先の方法が解らず困っています。
Workbooks.Open Filename:="C:\My Documents\リンク元.xls",UpdateLinks:=0

=[リンク先.xls]Sheet1!$A$1+[リンク先.xls]Sheet1!$A$2
条件1:このリンク先は「パス」も「ファイル名」も変動します。
条件2:無条件で値貼り付けはできません。

A 回答 (2件)

>事前にEXCELマクロでブック内のリンクの状態の取得することで、エラーを回避できればと思っています。


というのは外部参照しているかどうかが解ればいいのでしょうか?
その場合は[LinkSources メソッド]でリンクソースを取得できます。

>条件2:無条件で値貼り付けはできません。
...というところから推測すると、その外部参照数式だけを値化したいという事でしょうか?
リンクソース取得後、その文字列で検索して該当セルだけ値化、でできると思いますが、
もしxl2002以降限定でも構わないなら[BreakLink メソッド]を使えば簡単です。

それぞれのヘルプを参照してください。
簡単なサンプル。
Sub try()
  Dim astrLinks, Link

  With ActiveWorkbook
    astrLinks = .LinkSources(Type:=xlLinkTypeExcelLinks)
    If Not IsEmpty(astrLinks) Then
      For Each Link In astrLinks
        .BreakLink Name:=Link, Type:=xlLinkTypeExcelLinks
      Next
    End If
  End With
End Sub
    • good
    • 0
この回答へのお礼

>条件2:無条件で値貼り付けはできません。
これは「値貼り付け」で計算式を値にすると他の処理に影響がでるのでできないという意味でした。表現が悪くてすみませんでした。
まさに[LinkSources メソッド]が私の望んでいたものでした。
ありがとうございました。

お礼日時:2009/12/09 22:10

こんばんは。



以前、そういうコードは考えたことがあるのですが、プログラマブルには取れなかったと思います。だから、物理的に変更するしかないと思います。

>事前にEXCELマクロでブック内のリンクの状態の取得することで、エラーを回避できればと思っています。

取得しても、どこかに保存しなくてはならないけれども、こんどは戻すのが面倒ですね。
今、考えたものは、数式を、文字化してしまうという方法です。それを戻すプログラムも書きました。
戻すほうは、ものすごく時間が掛かります。

>条件1:このリンク先は「パス」も「ファイル名」も変動します。
マクロ中は、変動はしないという条件です。

ただ、こんなに簡単ではないかもしれません。オートシェイプや名前定義などの中にもあったりするかもしれません。その場合は、それらの中も書き換えなくてはならないと思います。その時は、また相談してください。


'-------------------------------------------
Sub FormulaChange2Text()
'数式を文字化
  Dim sh As Worksheet
  Dim r As Range
  Dim c As Range
  For Each sh In Worksheets '全シート
    On Error Resume Next
    Set r = sh.UsedRange.SpecialCells(xlCellTypeFormulas)
    On Error GoTo 0
    Application.ScreenUpdating = False
    For Each c In r
      If c.FormulaLocal Like "*[[]*[]]*" Then
        c.Value = "!" & c.FormulaLocal
      End If
    Next c
    Application.ScreenUpdating = True
  Next sh
End Sub
'-------------------------------------------
Sub FormulaRetrival()
'数式を戻す
  Dim sh As Worksheet
  Dim r As Range
  Dim c As Range
  Application.Calculation = xlCalculationManual '計算を手動
  For Each sh In Worksheets
    On Error Resume Next
    Set r = sh.UsedRange.SpecialCells(xlCellTypeConstants, xlTextValues)
    On Error GoTo 0
    Application.ScreenUpdating = False
    For Each c In r
      If c.Value Like "!=*" Then
        c.FormulaLocal = Mid$(c.Value, 2)
      End If
    Next c
    Application.ScreenUpdating = True
  Next sh
  Application.Calculation = xlCalculationAutomatic '計算を自動
End Sub
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています