2017-02-07 101 views
-3

您好我正在嘗試編寫一個宏,去一個公式中的引用單元格。因此,例如,如果我們有如下的公式:VBA代碼,去參考單元格

=IF(Sheet2!C3="","",Sheet2!C3) 

我想宏帶我到Sheet2 C3。 所以我發現這個代碼,感謝你們:

Dim rLast As Range, iLinkNum As Integer, iArrowNum As Integer 
    Dim stMsg As String 
    Dim bNewArrow As Boolean 
    Application.ScreenUpdating = False 
    ActiveCell.ShowPrecedents 
    Set rLast = ActiveCell 
    iArrowNum = 1 
    iLinkNum = 1 
    bNewArrow = True 
    Do 
     Do 
      Application.Goto rLast 
      On Error Resume Next 
      ActiveCell.NavigateArrow TowardPrecedent:=True, ArrowNumber:=iArrowNum, LinkNumber:=iLinkNum 
      If Err.Number > 0 Then Exit Do 
      On Error GoTo 0 
      If rLast.Address(external:=True) = ActiveCell.Address(external:=True) Then Exit Do 
      bNewArrow = False 
      If rLast.Worksheet.Parent.Name = ActiveCell.Worksheet.Parent.Name Then 
       If rLast.Worksheet.Name = ActiveCell.Parent.Name Then 
        ' local 
        stMsg = stMsg & vbNewLine & Selection.Address 
       Else 
        stMsg = stMsg & vbNewLine & "'" & Selection.Parent.Name & "'!" & Selection.Address 
       End If 
      Else 
       ' external 
       stMsg = stMsg & vbNewLine & Selection.Address(external:=True) 
      End If 
      iLinkNum = iLinkNum + 1 ' try another link 
     Loop 
     If bNewArrow Then Exit Do 
     iLinkNum = 1 
     bNewArrow = True 
     iArrowNum = iArrowNum + 1 'try another arrow 
    Loop 
    rLast.Parent.ClearArrows 
    Application.Goto rLast 
    MsgBox "Precedents are" & stMsg 

    Exit Sub 

Range("stMsg").Select 
Selection.Goto 

而且變量包含單元的名稱。我怎樣才能讓宏達到它?該名稱格式爲 'Sheet2的' $ C $ 3

+0

你有什麼嘗試過。堆棧溢出不是我的代碼或向我展示代碼網站。 –

+0

是的,我知道,我很抱歉。只是真的不知道如何開始。 – tombata

+1

您需要使用Left,Right和/或Mid來解析公式字符串:Selection.Formula,並使用Instr來查找某些字符,例如'!' –

回答

0

如何:

With Range("'Sheet2'!$C$3") 
    .Parent.Activate 
    .Activate 
End With 

你可以用你在找到地址替換'Sheet2'!$C$3你的宏。

+0

該變量是stMsg,但這不會將我發送到Sheet2單元格C3 。 – tombata

+1

它確實寄給我:) –

0

對於這種情況,在具體:

Dim rng As Range 
Dim tmp As String 

tmp = Right(Selection.Formula, Len(Selection.Formula) - InStrRev(Selection.Formula, ",")) 
Set rng = Range(Left(tmp, Len(tmp) - 1))