|
▼スプーン さん:
>どうも始めまして
>初歩的な事かもしれませんがお願いします。
先の回答されているお二方も書かれている通り、簡単ではないです。
なぜ、そうしたいのか?をハッキリさせると別案もあるかもしれません。
>数量などを別ファイルから参照してるのですが
>例えば
>=[在庫表.xls]sheet1!A1
>
>その別ファイルで非表示されてる行を
>参照してる側のファイルでも
>非表示にしたいのです。
興味が湧いたので作ってみました。
参照されているBook(別ファイルと書かれているBookです)に
下記のマクロを記述して先に開いて置くのが前提です。
別のBookを開くときにチェックがかかります。
対象であれば使用している全セルをチェックするので
正直、実用的なサンプルとは言い難いですが・・・
テストでは動作しましたが、バグがあるかもしれません。
自信なしです。お暇なら程度で見てください。
ワークシート分析の参照元のトレース を使ってみました。
リンクのチェックがJakaさんがUPされているマクロをお借りしました。
'ThisWorkBookモジュール
Option Explicit
Dim WithEvents App As Application
Private Sub Workbook_Open()
Set App = Application
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Set App = Nothing
End Sub
Private Sub App_WorkbookOpen(ByVal Wb As Workbook)
Call LinkChk(Wb)
End Sub
'標準モジュール
Option Explicit
Sub LinkChk(Wb As Workbook)
'このBookにLinkされているかチェック
Dim i As Long
Dim LinkBookTB As Variant
LinkBookTB = Wb.LinkSources(Type:=xlLinkTypeExcelLinks)
If Not IsEmpty(LinkBookTB) Then
For i = 1 To UBound(LinkBookTB)
If LinkBookTB(i) = ThisWorkbook.FullName Then
Call Hidden_Link_Hidden(Wb)
Exit Sub
End If
Next i
End If
End Sub
Sub Hidden_Link_Hidden(Wb As Workbook)
'ワークシート分析-参照元のトレース を使用する。
'参照元の行が非表示であれば、参照先も非表示にする。
'NavigateArrow ArrowNumber 1が外部リンクになると仮定。間違ってたらゴメンナサイ
Dim R As Range '参照先Range
Dim R2 As Range '参照元Range
Dim Ws As Worksheet
Dim i As Integer
Application.ScreenUpdating = False
For Each Ws In Wb.Worksheets
For Each R In Ws.UsedRange
R.ShowPrecedents 'ワークシート分析-参照元のトレース
If IsEmpty(R.NavigateArrow(True, 1)) = False Then
i = 0
On Error Resume Next
Do
i = i + 1
Err.Clear
Set R2 = R.NavigateArrow(True, 1, i)
'リンク元Bookとリンク先Bookが同一ならDo終了 次セルへ
If R2.Parent.Parent.Name = R.Parent.Parent.Name Then Exit Do
If Err.Number = 0 And R2.EntireRow.Hidden = True Then
R.EntireRow.Hidden = True
End If
Loop While Err.Number = 0
On Error GoTo 0
End If
R.ShowPrecedents True
Next R
Next Ws
Application.ScreenUpdating = True
Wb.Activate
Wb.Worksheets(1).Activate
End Sub
|
|