
ブックが外部参照していると、取込時にエラーになってしまうソフトを使っています。
事前にEXCELマクロでブック内のリンクの状態の取得することで、エラーを回避できればと思っています。
外部参照、リモート参照ともに更新せずにブックを開くのは下記の方法でできそうなのですが、そこから先の方法が解らず困っています。
Workbooks.Open Filename:="C:\My Documents\リンク元.xls",UpdateLinks:=0
=[リンク先.xls]Sheet1!$A$1+[リンク先.xls]Sheet1!$A$2
条件1:このリンク先は「パス」も「ファイル名」も変動します。
条件2:無条件で値貼り付けはできません。
No.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
>条件2:無条件で値貼り付けはできません。
これは「値貼り付け」で計算式を値にすると他の処理に影響がでるのでできないという意味でした。表現が悪くてすみませんでした。
まさに[LinkSources メソッド]が私の望んでいたものでした。
ありがとうございました。
No.1
- 回答日時:
こんばんは。
以前、そういうコードは考えたことがあるのですが、プログラマブルには取れなかったと思います。だから、物理的に変更するしかないと思います。
>事前に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
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
リンクをアップデートするしないの自動化
Excel(エクセル)
-
EXCEL2000VBAでハイパーリンクの有無を調べたい。
Excel(エクセル)
-
Excel VBAでリンク切れをチェックしたい。
Excel(エクセル)
-
-
4
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
5
Excel VBA:リンクの更新
Excel(エクセル)
-
6
メッセージボックスのOKボタンをVBAでクリックさせたい
Visual Basic(VBA)
-
7
VBA プロシージャの名前の取得
その他(Microsoft Office)
-
8
エクセル2013vbaで、見えない名前の定義の「_xlfn.IFERROR」を削除したい
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
表計算ソフトでの様式の呼称
-
vba テキストボックスとリフト...
-
エクセルのVBAで集計をしたい
-
【マクロ】数式を入力したい。...
-
【マクロ】実行時エラー '424':...
-
【マクロ】元データと同じお客...
-
【マクロ】左のブックと右のブ...
-
他のシートの検索
-
【画像あり】オートフィルター...
-
【マクロ】【配列】3つのシー...
-
Office2021のエクセルで米国株...
-
【マクロ】【相談】Excelブック...
-
エクセルでフィルターした値を...
-
【画像あり】【関数】指定した...
-
エクセルのリストについて
-
エクセルに写真が貼れない(フ...
-
エクセルのライセンスが分かり...
-
エクセルの複雑なシフト表から...
-
【関数】=EXACT(a1,b1) a1とb1...
-
エクセルシートの見出しの文字...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【マクロ】元データと同じお客...
-
エクセルの関数について
-
【画像あり】オートフィルター...
-
エクセルのVBAで集計をしたい
-
エクセルのリストについて
-
【マクロ】数式を入力したい。...
-
【マクロ】【相談】Excelブック...
-
Office2021のエクセルで米国株...
-
【マクロ】実行時エラー '424':...
-
他のシートの検索
-
エクセルの複雑なシフト表から...
-
【マクロ】【配列】3つのシー...
-
vba テキストボックスとリフト...
-
【マクロ】左のブックと右のブ...
-
【マクロ】変数に入れるコード...
-
エクセルシートの見出しの文字...
-
【マクロ】別ファイルへマクロ...
-
【関数】同じ関数なのに、エラ...
-
Amazonでマイクロソフトオフィ...
-
ページが変なふうに切れる
おすすめ情報