2013-12-19 1 views
0
Function LinkedSheet(rgCell As Range) As Worksheet 
'Returns the worksheet that the cell formula references 
'Returns nothing if there's no formula 
    Dim strFormula As String 

    strFormula = rgCell.Cells(1, 1).Formula 

    If (strFormula <> "") Then 
     'Return the sheet that this range is linked to 
    End If 
End Function 

Может ли кто-нибудь помочь мне выполнить эту функцию? Имейте в виду, что это должно работать для внутренних ссылок, внешних ссылок, а также ссылки на листы с пробелом в имени как «Лист 1»Как получить таблицу, на которую ссылается формула ячейки

Edit: В ответ на Сиддхарт Rout, я уже пытался

Function LinkedSheet(rgCell As Range) As Worksheet 
'Returns the worksheet that the cell formula references 
'Returns nothing if there's no formula 
    Dim strFormula As String, sheetName As String 

    strFormula = rgCell.Cells(1, 1).Formula 

    If (strFormula <> "") Then 
     'Return the sheet that this range is linked to 
     sheetName = Mid(strFormula, 2, InStr(1, strFormula, "!") - 2) 
     Set LinkedSheet = ThisWorkbook.Worksheets(sheetName) 
    End If 
End Function 

, который не подходит для листов с пробелом в названии. Тем не менее, я не хотел публиковать это, потому что я считаю, что должен быть лучший, более эффективный способ решения проблемы, и я не хотел туннелировать мысли людей в том же направлении, в котором я пошел.

+2

Пожалуйста, сообщите нам, что вы пробовали? Вопросы, требующие кода, должны демонстрировать минимальное понимание проблемы, которую нужно решить. Включите попытки решения, почему они не работают и ожидаемые результаты. См. Также: [Контрольный список вопросов переполнения стека] (http://meta.stackexchange.com/questions/156810/stack-overflow-question-checklist) –

+1

http://www.vbaexpress.com/forum/showthread.php?19348 -Расширенное разделение-все-адреса-в-формуле & p = 142863 # post142863 –

+0

как бы мимолетная мысль: найдите значение '!' В формуле String – Barranka

ответ

1

Вот мое решение

Function LinkedSheet(rgCell As Range) As Worksheet 
'Returns the worksheet that the cell formula references 
'Returns nothing if there's no formula 
    Dim strFormula As String, sheetName As String 

    strFormula = rgCell.Cells(1, 1).Formula 

    If (strFormula <> "") Then 
     'Return the sheet that this range is linked to 
     If (InStr(1, strFormula, "='") = 0) Then 
      sheetName = Mid(strFormula, 2, InStr(1, strFormula, "!") - 2) 
     Else 
      sheetName = Mid(strFormula, 3, InStr(1, strFormula, "!") - 4) 
     End If 
     Set LinkedSheet = ThisWorkbook.Worksheets(sheetName) 
    End If 
End Function 

Я не совсем доволен. Я все еще думаю, что могут быть лучшие подходы, но это работает.

+0

@andy Не было бы этого, если бы имя листа имело апостроф типа «Энди Лист»? – Ben

+0

Вы правы. Я удалил свой комментарий. FWIW, Excel автоматически ускользает от апострофа в имени листа (с другим апострофом), поэтому просто замена их не будет работать. –

Смежные вопросы