• ベストアンサー

エクセルで幽霊リンク?探しのVBA

Wendy02の回答

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんばんは。 >オブジェクトのマクロを設定するのはOnActionですが、これでは取得できないようです。 どうやら、目的が違うようですね。もともと、幽霊リンクを探す目的ではなかったのでしょうか?フォームツールやコントロールツールのコマンドボタン(OLEObject)は、通常、外部から呼び出すということはないと思うのですが……。 オートシェイプには、OnAction は取れますね。 「幽霊リンク」というのは、オブジェクトなどで不明な外部リンク先のことですが、すべてのオブジェクトのリンク先やマクロ名自体を出す話になると、ちょっと、それは、今の私には出来そうにもありませんね。私の経験があるのは、あくまでも、埋め込み型のリンクで、トラブルが生じている時のみです。

merlionXX
質問者

お礼

> どうやら、目的が違うようですね。もともと、幽霊リンクを探す目的ではなかったのでしょうか? いいえ、違わないんです。 #2のお礼にも書いたとおり、他BOOKからコピーしてきたシート内に他BOOKのマクロを設定したオブジェクトがあるのではないかと見当をつけたのです。(この場合、BOOKを開く際に、「リンクを更新しますか?」とは聞かれませんが、メニューの「編集」、「リンクの設定」には表示されます。)

関連するQ&A

  • エクセルVBA 「名前の定義」について

    いつもお世話様です。エクセル2000での名前定義に関するVBA操作で疑問がありますのでよろしくお願い申し上げます。 (o。_。)oペコッ 以下のマクロで、あるエクセルのBOOKの名前の定義をすべて書き出してみました。 Sub Names_Check() Dim nm As Object Set sh = ActiveWorkbook.Worksheets.Add For Each nm In ActiveWorkbook.Names i = i + 1 sh.Cells(i, 1) = nm.Name sh.Cells(i, 2) = "'" & nm.RefersTo Next End Sub すると、なかにはセル範囲を参照していない名前の定義がけっこう見つかりました。 それらはよく見ると =○○○.xls!△△マクロ のようなマクロの名前を参照していました。 そんな名前の定義はつけた覚えが無いのですが、これは何でしょうか? なぜそのような名前の定義が出来てしまうのでしょうか? 次にセル範囲を参照していないこれらの名前定義を削除するため下記のマクロを書いてみたところ、「実行時エラー1004 その名前は正しくありません」というエラーがでてしまいます。 どう書いたら削除できるのでしょうか?(もちろん手動では削除できます。) Sub Del_NameRefQuestion() '不明な参照の名前定義削除 Dim nm As Object Dim mystr As String, ans As Integer For Each nm In ActiveWorkbook.Names If InStr(nm.RefersTo, "$") = False Then ans = MsgBox(nm.Name & "/" & nm.RefersTo, vbYesNo + vbQuestion, "削除しますか?") If ans = vbYes Then nm.Delete ’ここでエラー End If Next MsgBox "不明参照の名前定義削除完了", , " ( ̄ー ̄)v" End Sub

  • エクセル外部リンクのセル番地まで知る方法

    エクセル2013です。他のエクセルブックからリンクを張っているとき、以下のマクロで調べることがわかりましたけど、そこでわかるのは、ブック名どまりであって、シートやセル番地はわかりません。わかりたいのは、こっちのブックのどのシートのどのセルが、あっちのブックのどのシートのどのセルとつながっているかです。 わかる方法はないものでしょうか。なお、このマクロは、以下のホームページに書いてあったものです。 https://www.moug.net/tech/exvba/0060039.html Sub GetLinkInfromation() Dim Var As Variant Dim Msg As String Dim i As Integer Var = ActiveWorkbook.LinkSources(xlExcelLinks) For i = 1 To UBound(Var) Msg = Msg & Var(i) & vbCrLf Next i MsgBox Msg End Sub

  • エクセルVBAで別BOOKに「名前の定義」のCopy

    前からあったエクセルのファイルのどこかが壊れたらしく、ときどき作業中に突然エラーとなってエクセル自体が落ちてしまうので、BOOKの複製では意味がないと考え、同じ内容のものを別BOOKに再作成するマクロを以下のとおり作ってみました。(新規作成のBOOKにこのマクロを貼ります) これで、VBAのモジュールを除き、再作成できたのですが、どういうわけか「名前の定義」を行なったセル範囲の一部が反映されません。 調べてみると、他のセルから参照されていない「名前の定義」がすっぽり抜け落ちるようにも思えるのですが、この理解であっているでしょうか? 他のセルから参照していなくとも、マクロで参照しているので抜け落ちるのは困ります。 どうすれば、すべての「名前の定義」が再作成されるでしょうか? Sub Book_Copy() Dim fn As String Dim wb1 As Workbook, wb2 As Workbook Dim ans As Integer, i As Integer Dim nm As Name Dim sh As Worksheet fn = Application.GetOpenFilename("エクセル ファイル (*.xls), *.xls") If fn = "False" Then Exit Sub Application.EnableEvents = False Set wb1 = Workbooks.Open(Filename:=fn, UpdateLinks:=1) Set wb2 = ThisWorkbook ans = MsgBox(wb1.Name & "を " & wb2.Name & " へCopyしますか?", vbYesNo + vbQuestion) If ans = vbNo Then Exit Sub For Each nm In wb2.Names nm.Delete Next nm For Each sh In wb1.Worksheets sh.Cells.Copy i = i + 1 If wb2.Worksheets.Count = i Then wb2.Worksheets.Add After:=Worksheets(i) Application.DisplayAlerts = False wb2.Activate wb2.Worksheets(i).Activate wb2.Worksheets(i).Cells.Select ActiveSheet.Paste wb2.Worksheets(i).Name = sh.Name Application.DisplayAlerts = True Application.CutCopyMode = False End If Next sh wb1.Close (False) Application.EnableEvents = True ActiveWorkbook.ChangeLink Name:=fn, NewName:=wb2.Name, Type:=xlExcelLinks Set wb1 = Nothing Set wb2 = Nothing End Sub

  • VBAで

    VBAで Sub test() '日付から曜日を取得 WEEKDAY(A2) Dim i As Integer For i = 3 To 20 Cells(i, 2) = Weekday(Cells(i, 1)) Next End Sub 横のセルを参照する場合は、上記のようになると思いますが、上のセルを参照するにはどのようにすればいいでしょうか? 例えばA1~T1セルを参照して、A2~T2に反映させると言った具合です。よろしくお願いします。

  • VBAでエラーが出ます

    セルの値を変数に格納して、それをブック保存時に使いたいのですが上手くいきません。 Sub サンプルブック保存() Dim myfile As String myfile = workbooks("サンプル").Worksheets("sheet1").Cells(2, 9) workbooks.Add ActiveWorkbook.SaveAs Filename:="\\C:\フォルダ\" & myFile & ".xls" End Sub エラーメッセージは、 実行時エラー'1004': SaveAs'メソッドは失敗しました'_Workbook'オブジェクト と出ます。 非常に困ってます。 教えてくだされば幸いです。

  • EXCELのリンクが消えません

    Excel2000をwindows98SEで使用しています あるブックの他ブックへのリンクがどうしても消えません。 当然参照式は全てチェック、名前も全て消しました。 最後の手段で既存のワークシートを全て削除してもなお リンクが残っています。 そのブックを開くときにリンクの更新のダイヤログが開かなくなったので、実質的にはリンクは切れているとは思いますが 編集-リンクの設定をみるとやはりリンクが残っているのでやはり気になります。 他にチェックするところがあるのでしょうか? よろしくお願いします。

  • vbaマクロ 実行時エラー '91'について教えてください

    下記のマクロで、ファイル指定保存をする時に "実行時エラー91 オブジェクト変数またはWithブロック変数が設定されていません”がでます。 やりたいのは、選択したセルの1番目をファイル名として 保存をしたいのですが、うまくいきません。 どうしたらよいのでしょうか? Sub Macro1() Dim セル As Object Dim i As Long  i = 1  For Each セル In Selection   Worksheets("Sheet2").Cells(1, i).Value = セル     i = i + 1  Next ActiveWorkbook.SaveAs Filename:="D:\TEST\" & セル & ".xls" End Sub

  • Excel vba 実行エラー1004

    (1)アクティブブックの名前を取得してセルO2に貼り付けた。ex. 1234567b.CSV (2)VBAを使って1234567k.CSV におきかえた。 (3)(2)のセルに入力された内容でブックを開きたいが、エラー1004が出て開けない。 (4)開けたとして、そのブックのA1セルを 元のブックをアクティブにして D1に 貼り付けたい。 (5)またさっきのブックに戻ってF1セルを 元のブックをアクティブにして E1セルに貼り付けたい。 というようなVBAを組みたいと思っています。 現在(1)(2)はできましたが(3)でエラーが出たため止まっていますし、その後もわかりません。 Dim bb As String Dim kb As String bb = ActiveWorkbook.Name Cells(2, "O").Value = ActiveWorkbook.Name Cells(3, "O").Value = ActiveWorkbook.Name Range("O2").Formula = Replace(bb, "b.CSV", "k.CSV") kb = Range("O2") 'シート名を取得する Dim bbs As String bbs = Left(bb, 10) Cells(4, "O").Value = bbs Dim kbs As String kbs = Left(kb, 10) Cells(5, "O").Value = kbs 'コピーして貼り付ける kbn = Cells(2, 15) Workbooks.Open Filename:=kbn Range("F1").Select Range("F1").Copy として作ってるんですが、 Workbooks.Open Filename:=kbn でエラーが出てブックが開けません。 ご指導お願いします。

  • エクセルVBAで SendKeys "{TAB}"

    エクセル2000です。 一つのブックに何枚かシートがあります。 各シートは保護されており、いくつかロックされていないセルがあります。 各シートの最初のロックされていないセル(シートにより異なります)にカーソルを飛ばしたいのですが、下記のようにやってもセルA1が選択されたままで飛んでくれません。 どこが悪いのでしょうか? Sub TEST() Dim sh As Worksheet For Each sh In Worksheets sh.Activate sh.Cells(1, 1).Activate SendKeys "{TAB}" MsgBox ActiveCell.Address Next End Sub なお、 sh.EnableSelection = xlUnlockedCells を挿入すればSendKeys "{TAB}"がなくとも、カーソルが飛びますが、今回はEnableSelection = xlUnlockedCellsしたくないのです。 よろしくおねがいします。

  • Excel VBA でExecuteExcel4Macro("GET.OBJECT(48,

    エクセル2000です。 以前、ワークシートに配置したフォームツールのラベルの参照元を取得するマクロをご教示いただき、以下のTest01は問題なく作動しています。 Sub test01() Dim obj As Object Dim i As Integer Dim obj_n As String 'オブジェクトの名前 With ActiveSheet For Each obj In .Labels i = i + 1 .Cells(i, 2) = obj.Name: obj_n = obj.Name .Cells(i, 3) = obj.TopLeftCell.Address 'GET.OBJECT で、リンクがないものを取ると、False になる .Cells(i, 5) = ExecuteExcel4Macro("GET.OBJECT(48,""" & obj_n & """)") .Cells(i, 6) = obj.OnAction Next End With End Sub 今回、同一シートではなく別シートに表示させようと以下のTest02を書いたのですが、やってみると .Cells(i, 5) はすべて#VALUE!エラーになってしまいました。 ExecuteExcel4Macro("GET.OBJECT(48~がどのようなものかわからずやっているので応用がききません。(そもそも48って?) どのようになおしたらよいのかご教示いただければ幸いです。 Sub test02() Dim obj As Object Dim i As Integer Dim obj_n As String Dim ws As Worksheet, ns As Worksheet Set ws = ActiveSheet Set ns = Worksheets.Add With ns For Each obj In ws.Labels i = i + 1 .Cells(i, 2) = obj.Name: obj_n = obj.Name .Cells(i, 3) = obj.TopLeftCell.Address .Cells(i, 5) = ExecuteExcel4Macro("GET.OBJECT(48,""" & obj_n & """)") .Cells(i, 6) = obj.OnAction Next End With End Sub