2016-07-21 11 views
0

ダッシュボードシートに複数のハイパーリンクを持つExcelを作成しています。 1つのリンクをクリックすると、レコードがフィルタリングされた別のシートが開き、フィルタがリセットされます。Excelのハイパーリンクマクロエラーランタイム1004アプリケーション定義またはオブジェクト定義のエラー

いくつかのリンクで動作し、エラーが発生しても何も起こらない間に動作します。実行時1004アプリケーション定義またはオブジェクト定義エラー。

リンク作業:セルI11、I14 リンクスローエラー:B11、E11。

Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)  
    Dim rngOpenTickets As Range 
    Dim rngMaxAge As Range 
    Dim rngPlannedFuture As Range 
    Dim rngTotalFuture As Range 

    Set rngOpenTickets = Range("TicketsOpen") 
    Set rngMaxAge = Range("TicketMaxAge") 
    Set rngPlannedFuture = Range("FuturePlanned") 
    Set rngTotalFuture = Range("TotalFuture") 

If Target.Range.Name = rngPlannedFuture.Name Then 
    ApplyFilter 5, "<>" 
ElseIf Target.Range.Name = rngMaxAge.Name Then 
    ApplyFilter 10, rngMaxAge.Text 
ElseIf Target.Range.Name = rngTotalFuture.Name Or Target.Range.Name = rngOpenTickets.Name Then 
    RemoveFilter 
    End If 
End Sub 

Sub RemoveFilter() 
    If ActiveSheet.FilterMode Then 
     ActiveSheet.ShowAllData 
    End If 
End Sub 

Sub ApplyFilter(field As Integer, criteria As String) 
    Selection.AutoFilter 
    Selection.AutoFilter field:=field, Criteria1:=criteria 
End Sub 

これを解決するためのいくつかの助けが必要:

https://drive.google.com/open?id=0B-gwvoyXA0G0aUJZU3pIM3ZtVWM はサンプルマクロは、以下のコードを参照するために

を得意と有効です。ヘルプをよろしくお願いいたします。

+0

質問に関連するコードを掲載してください。 –

+0

あなたのコードはどの行でエラーになりますか?いくつかの推測:1) 'Target'は有効な名前付き範囲参照ですか? 'Selection'は常に有効なものですか? – user3598756

+0

クリックしたリンクがrngOpenTicketsの範囲であっても、If Target.Range.Name = rngPlannedFuture.Nameでエラーとなります。それは範囲rngPlannedFutureとrngTotalFutureのために働く – Arihant

答えて

0

細胞I11のリンクとの間の差、B11I14は、次のようにE11である:I11

I14リンクが最初に設定した後、細胞I11:J11I14:J14を合併しました。

B11,E11セルB11:C11,E11:F11が最初にマージされ、結合されたセルにリンクが設定されました。 I11で、I14リンクTargetは、単一のセルである一方、

B11:C11でそう

E11:F11リンクTargetはマージされた範囲です。その理由はTarget.Range.NameB11:C11E11:F11で失敗する理由です。

代わりにTarget.Range.Item(1).Nameを受け取った場合、それはマージされたセルリンクターゲットとシングルセルリンクターゲットの両方で動作します。

If Target.Range.Item(1).Name = rngPlannedFuture.Name Then 
    ApplyFilter 5, "<>" 
    ElseIf Target.Range.Item(1).Name = rngMaxAge.Name Then 
    ApplyFilter 10, rngMaxAge.Text 
    ElseIf Target.Range.Item(1).Name = rngTotalFuture.Name Or Target.Range.Item(1).Name = rngOpenTickets.Name Then 
    RemoveFilter 
    End If 
+0

素晴らしい、おかげでソリューションは完璧に動作します – Arihant

関連する問題