ブックが外部参照していると、取込時にエラーになってしまうソフトを使っています。
事前にEXCELマクロでブック内のリンクの状態の取得することで、エラーを回避できればと思っています。
外部参照、リモート参照ともに更新せずにブックを開くのは下記の方法でできそうなのですが、そこから先の方法が解らず困っています。
Workbooks.Open Filename:="C:\My Documents\リンク元.xls",UpdateLinks:=0
=[リンク先.xls]Sheet1!$A$1+[リンク先.xls]Sheet1!$A$2
条件1:このリンク先は「パス」も「ファイル名」も変動します。
条件2:無条件で値貼り付けはできません。
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
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 メソッド]が私の望んでいたものでした。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルのマクロについて教えてください。 2 2023/02/21 13:29
- Excel(エクセル) 【困っています】VBA 追加処理の記述を教えてください。 1 2022/08/25 22:54
- Visual Basic(VBA) 【困っています2】VBA 追加処理の記述を教えてください。 2 2022/08/26 11:42
- Visual Basic(VBA) マクロVBA 1シートをまとめる 閉じ方 初心者 SOS! 1 2022/06/17 14:54
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/01/27 13:15
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/02/21 11:19
- Visual Basic(VBA) 【前回の続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/16 16:44
- Excel(エクセル) フォルダ内の全ブックのシート名を変更したい 7 2022/09/22 21:34
- その他(プログラミング・Web制作) pythonでクラスで複数のメソッドを利用する方法 2 2022/04/15 04:17
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/02/07 09:58
このQ&Aを見た人はこんなQ&Aも見ています
-
新NISA制度は今までと何が変わる?非課税枠の拡大や投資対象の変更などを解説!
少額から投資を行う人のための非課税制度であるNISAが、2024年に改正される。おすすめの銘柄や投資額の目安について教えてもらった。
-
Excel VBAでリンク切れをチェックしたい。
Excel(エクセル)
-
リンクをアップデートするしないの自動化
Excel(エクセル)
-
エクセル 一括リンクの解除
Excel(エクセル)
-
-
4
エクセルVBAでセルに入力したパスでブックを開く
Excel(エクセル)
-
5
ダウンロードダイアログをVBAから操作するには?
Visual Basic(VBA)
-
6
EXCEL VBA セルに既に入力されている文字に文字を追加する
Excel(エクセル)
-
7
VBAでユーザーフォームにセル値を表示させるには
Visual Basic(VBA)
-
8
【ExcelVBA】外部データの更新をセルに即時反映する方法
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルでの作業計算方法について
-
はがきについて。
-
エクセル 文字を増やしたい。
-
セルの内容表示が邪魔になる
-
Microsoft365に変えたのですが...
-
エクセルの計算
-
Microsoft1Officeの互換ソフト...
-
【マクロ】その時、その時で変...
-
【マクロ】読取専用のファイル...
-
エクセル初心者です 関数の入れ...
-
Excel ピボットテーブルで日付...
-
【関数】適切な文字数の数字を...
-
LOOKUP関数を使えばいいのでし...
-
Aというブックの1というシート...
-
エクセル関数を教えてください
-
Excelのチェックボックスの使い...
-
エクセル 白黒印刷で白線を印刷...
-
時間によってファイル名が変わ...
-
WPS OFFICEでの縦書きについて
-
エクセルの条件付き書式につい...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel 2019 のピボットテーブル...
-
[関数得意な方]教えて下さい・...
-
Excelにてある膨大なデータを管...
-
[関数について]わかる方教えて...
-
Excel初心者です。 詳しい方、...
-
excelの不要な行の削除ができな...
-
エクセル関数に詳しい方教えて...
-
INDIRECTを使わず excelで複数...
-
[オートフィルタ]で抽出された...
-
エクセルの神よ、ご回答を! エ...
-
エクセル関数に詳しい方、教え...
-
各ページの1番上の表示について
-
Excelで写真のような表を作った...
-
エクセルで不等号記号(≠)が上に...
-
数学 Tan(θ)-1/Cos(θ)について...
-
Excel 2019 は、SPILL機能があ...
-
Excelで全角を半角にしたいので...
-
条件付き書式を教えてください
-
Excel フィルターを掛けた状態...
-
[オートフィルタ]の適用範囲の...
おすすめ情報