エクセルで幽霊リンク?を探してます。
BOOKを開く際に、「リンクを更新しますか?」とは聞かれませんが、メニューの編集、「リンクの設定」には表示されます。
、「リンクを更新しますか?」と聞いてこないので、セルの数式が他BOOKを参照してるのではないと思いますが、一応、セル内の数式も\マークを検索してチェック済みです。
「名前の定義」も下記のコードでチェックしました。
Sub Names_Check()
Set Sh = ActiveWorkbook.Worksheets.Add
For Each na In ActiveWorkbook.Names
i = i + 1
Sh.Cells(i, 1) = na.Name
Sh.Cells(i, 2) = Mid(na.RefersTo, 2)
Next
End Sub
残されたのは貼り付けた図形やボタン等のオブジェクトが他BOOKのセルを参照しているか、リンク先に他BOOKのセルを指定しているか、他BOOKのマクロを設定してあるかだと思います。しかし、オブジェクトのリンクを取得するコードがわかりません。
ご教示くださいますようお願いいたします。
No.4ベストアンサー
- 回答日時:
> マクロを設定してあるDrawingObjectsを調べたい
勘違いしてるかもしれませんが....こういうことでしょうか?
Dim obj As Object
Dim sAction As String
On Error Resume Next
For Each obj In ActiveSheet.DrawingObjects
sAction = ""
sAction = obj.OnAction
If Len(sAction) > 0 Then
Debug.Print "Obj Name:=" & obj.Name;
Debug.Print " Action:=" & sAction
End If
Next
ありがとうございます!出来ました!
以下のようにやってみました。
Sub Link_check() 'オブジェクトのリンク一覧
Dim sh As Worksheet, st As Worksheet
Dim sp As Object
Dim i As Long
Set sh = ActiveWorkbook.Worksheets.Add
For Each st In ActiveWorkbook.Sheets
st.Activate
For Each sp In ActiveSheet.DrawingObjects
i = i + 1
On Error Resume Next
sh.Cells(i, 1) = sp.Name
sh.Cells(i, 2) = sp.Formula
sh.Cells(i, 3) = st.Name & "-" & sp.TopLeftCell.Address
sh.Cells(i, 4) = sp.Width
sh.Cells(i, 5) = sp.Height
sh.Cells(i, 6) = sp.LinkedCell
If Len(sp.OnAction) > 0 Then
sh.Cells(i, 7) = " Action:=" & sp.OnAction
End If
On Error GoTo 0
Next sp
Next st
End Sub
No.5
- 回答日時:
こんにちは。
以前、幽霊リンクの削除のマクロは作ったことがありますが、今回の問題は、私の経験してきたものは違うし、状況をいまだに把握していません。オートシェイプなどOnAction で、別のブックにリンクして、リンクがなければ、エラーが出ます。しかし、マクロで、OnAction は取れます。しかし、コントロールツールは、別のブックのマクロにつけるということは、Call しなければ、基本的にありませんし、また、コピーすれば、そのまま、親オブジェクトがすげ替わるはずです。
Excel2000 で、編集-リンクの設定 で出てくる問題は、主に二つあって、ひとつは非表示のオートシェイプと、もう一つは失われたブックへのリンクで、Excel2000では、修正できないのでトラブルとして扱われています。
Excel2000 で、該当しないリンクが出てくる場合は、通常の方法では消せないものがあったと思います。
以下のようなものに該当するのではありませんか?
http://support.microsoft.com/default.aspx?scid=k …
[XL2000]ブック間のリンクを変更する方法および解除する方法
http://hp.vector.co.jp/authors/VA016119/kitan01. …
幽霊リンクバスターズ (芳坂氏のサイト)
何度もありがとうございます。
下記#5のコードで確認の結果、予想通りオブジェクトに設定された他BOOKのマクロを発見しました。
これを削除したところ、編集-「リンクの設定」は消滅しました。
お手数をおかけしました。
No.3
- 回答日時:
こんばんは。
>オブジェクトのマクロを設定するのはOnActionですが、これでは取得できないようです。
どうやら、目的が違うようですね。もともと、幽霊リンクを探す目的ではなかったのでしょうか?フォームツールやコントロールツールのコマンドボタン(OLEObject)は、通常、外部から呼び出すということはないと思うのですが……。
オートシェイプには、OnAction は取れますね。
「幽霊リンク」というのは、オブジェクトなどで不明な外部リンク先のことですが、すべてのオブジェクトのリンク先やマクロ名自体を出す話になると、ちょっと、それは、今の私には出来そうにもありませんね。私の経験があるのは、あくまでも、埋め込み型のリンクで、トラブルが生じている時のみです。
> どうやら、目的が違うようですね。もともと、幽霊リンクを探す目的ではなかったのでしょうか?
いいえ、違わないんです。
#2のお礼にも書いたとおり、他BOOKからコピーしてきたシート内に他BOOKのマクロを設定したオブジェクトがあるのではないかと見当をつけたのです。(この場合、BOOKを開く際に、「リンクを更新しますか?」とは聞かれませんが、メニューの「編集」、「リンクの設定」には表示されます。)
No.2
- 回答日時:
こんにちは。
お久しぶりです。> オブジェクトのリンクを取得するコードがわかりません。
オブジェクトが Oval とか TextBox などのことなら、こんな感じでは?
Dim obj As Object
On Error Resume Next
For Each obj In ActiveSheet.DrawingObjects
Debug.Print obj.Formula
Next
グループ化されている図形等は、解除しないとダメかもしれません。
他に考えられるのは...
・入力規則のリストで参照がある
・グラフの要素で参照がある
ぐらいが思いつきました。
どれもこれも確認はしてませんので、ご参考までで。
KenKen_SPさま、ありがとうございます。
入力規則は設定していませんし、グラフもありません。
多分、他ブックのマクロを設定したままになっているんだと思うんです。
というか、他BOOKからシートのコピーでもってきてしまっていると思うんです。
ですからマクロを設定してあるDrawingObjectsを調べたいのですが、DrawingObjectsにマクロがあるかないかの判別方法がわかりません。
よろしくお願いします。
No.1
- 回答日時:
こんにちは。
私は、マクロも作ったことはありますが、マクロではどうにもならないものもあるし、逆に、マクロでないと無理なものもあります。それは一括でということは出来ません。
それと、Excel2000独特の問題もあったような記憶があります。
もっとも原因が高いのが、非表示の図形の中にある数式。
リンク先のなくなったもの。
「名前」は、マクロでは引っかからないものもあります。
それと、Windows フォルダのどこかのTempフォルダに残骸が残っているときも問題になることがあります。
オートシェイプの図形描画の場合:
Sub SearchFomulaShapes()
Dim j As Long
With ActiveSheet
'On Error Resume Next
For j = 1 To .Shapes.Count
With .Shapes(j)
If .DrawingObject.Formula <> Empty Then
If InStr(.DrawingObject.Formula, ".xls") <> 0 Then
MsgBox .Name & "にある"
End If
End If
End With
Next j
On Error GoTo 0
End With
End Sub
ありがとうございます。
わたしも質問した後、なんとかここまでは作ったのです。
でも、マクロが仕込んであるものの取得はわかりませんでした。
Sub Link_check() 'オブジェクトのリンク一覧
Set Sh = ActiveWorkbook.Worksheets.Add
For Each st In ActiveWorkbook.Sheets
st.Activate
For Each sp In ActiveSheet.DrawingObjects
i = i + 1
On Error Resume Next
Sh.Cells(i, 1) = sp.Name
Sh.Cells(i, 2) = sp.Formula
Sh.Cells(i, 3) = st.Name
Sh.Cells(i, 4) = sp.Width
Sh.Cells(i, 5) = sp.Height
Sh.Cells(i, 6) = sp.LinkedCell
Next sp
Next st
End Sub
オブジェクトのマクロを設定するのはOnActionですが、これでは取得できないようです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- PowerPoint(パワーポイント) ExcelのVBAコードについて教えてください。 3 2022/05/25 14:32
- Visual Basic(VBA) エクセル VBA メール本文に指定セルに記載されているURLをリンクとして記載する方法 8 2022/08/08 07:50
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/08/08 15:45
- Excel(エクセル) 指定文字列が該当するA列をアクティブセルにするには 3 2022/08/17 13:18
- Excel(エクセル) B列に文字がはいったらA列に数字が入るマクロードを完成させたい 4 2023/04/21 01:58
- Excel(エクセル) 【マクロ】webアドレスにて指定されたCSVファイル【excelソフト表示】を印刷する件 1 2023/02/15 01:52
- Excel(エクセル) Excelのマクロについて教えてください。 4 2022/05/31 14:07
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/02/02 09:25
- Excel(エクセル) エクセル バーコード作成で他のシートを参照するには? 2 2023/05/03 16:57
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
WPSOffice_マクロの有効化について
-
Excel マクロの編集がグレーに...
-
Excelのマクロでボタンを押すと...
-
エクセル ボタンに設定したマク...
-
エクセルで、「いいね」のよう...
-
VBAについての質問です
-
エクセル マクロ名にブック名...
-
エクセルでマクロ(Excel 4.0)...
-
エクセルの、記録を終了したマ...
-
エクセルで明日の日付を表示す...
-
エクセルマクロで、別のブック...
-
コピーしたデータを2行ずつに貼...
-
LDPlayerのマクロの編集方法を...
-
マクロを組んだエクセルの動作...
-
Ctrl+Zが使えない
-
エクセルの表を複数枚印刷した...
-
複数のマクロボタンをまとめて...
-
マクロをマクロを使ってコピー...
-
別シートのマクロボタンをマク...
-
エクセルマクロVBAコピー領域と...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel マクロの編集がグレーに...
-
WPSOffice_マクロの有効化について
-
Excelのマクロでボタンを押すと...
-
エクセル ボタンに設定したマク...
-
エクセルで、「いいね」のよう...
-
エクセルの表を複数枚印刷した...
-
エクセル マクロ名にブック名...
-
エクセルの、記録を終了したマ...
-
複数のマクロボタンをまとめて...
-
VBAについての質問です
-
エクセルマクロで、別のブック...
-
別シートのマクロボタンをマク...
-
Excelマクロで、稼働中のマクロ...
-
エクセルでマクロ(Excel 4.0)...
-
マクロをマクロを使ってコピー...
-
(Excel VBA)シートコピー時マ...
-
Excel:マクロを消す方法教えて...
-
LDPlayerのマクロの編集方法を...
-
EXCELのマクロが他のパソコンで...
-
なぜマクロの記録がなくなって...
おすすめ情報