Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.08.2010, 09:36   #1
transgd
Пользователь
 
Регистрация: 16.04.2009
Сообщений: 37
По умолчанию При удалении строки, нарушается ссылка на нее

Всем доброе время суток!
Что сделать, чтобы при удалении строки, ссылка на ячейку расположенную в этой строке осталась без изменений (и без: #ССЫЛКА!)?
transgd вне форума Ответить с цитированием
Старый 13.08.2010, 10:05   #2
vikttur
Участник клуба
 
Регистрация: 16.05.2010
Сообщений: 1,249
По умолчанию

Тема на соседней странице
http://www.programmersforum.ru/showthread.php?t=109414
vikttur вне форума Ответить с цитированием
Старый 13.08.2010, 10:12   #3
transgd
Пользователь
 
Регистрация: 16.04.2009
Сообщений: 37
По умолчанию

Извините, но в указанной вами теме я не нашел ответа на свой вопрос.
transgd вне форума Ответить с цитированием
Старый 13.08.2010, 11:47   #4
transgd
Пользователь
 
Регистрация: 16.04.2009
Сообщений: 37
По умолчанию

Попробовал давать имена ячейкам - то же самое.
Может кто-то из специалистов все-таки найдет время ответить на мой вопрос?
В поиске по форуму ответ пока найти не удалось.
transgd вне форума Ответить с цитированием
Старый 13.08.2010, 11:53   #5
аналитика
Форумчанин
 
Регистрация: 14.05.2009
Сообщений: 311
По умолчанию

=ДВССЫЛ("A1")
эта формула всегда будет ссылаться на ячейку A1 (даже после удаления 1-ой строки )
аналитика вне форума Ответить с цитированием
Старый 13.08.2010, 12:06   #6
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

см.вложение
Вложения
Тип файла: rar Книга384.rar (3.6 Кб, 47 просмотров)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 13.08.2010, 12:12   #7
transgd
Пользователь
 
Регистрация: 16.04.2009
Сообщений: 37
По умолчанию

аналитика
Спасибо, работает!
А можно автоматизировать замену всех ссылок (их у меня уже больше тысячи) на ДВССЫЛ?
transgd вне форума Ответить с цитированием
Старый 13.08.2010, 13:13   #8
transgd
Пользователь
 
Регистрация: 16.04.2009
Сообщений: 37
По умолчанию

IgorGO
Спасибо за помощь, сейчас проверяю на своих данных!
transgd вне форума Ответить с цитированием
Старый 18.08.2010, 21:18   #9
аналитика
Форумчанин
 
Регистрация: 14.05.2009
Сообщений: 311
По умолчанию

Цитата:
Сообщение от transgd Посмотреть сообщение
А можно автоматизировать замену всех ссылок (их у меня уже больше тысячи) на ДВССЫЛ?
обработки ссылок на целые строки (напр., "2:2") нет!
проверяй на копиях!

Код:
Option Explicit

Sub InDirect_()
   Dim r As Range, c As Range
   Dim sIn As String, sRanges() As String, sNotRanges() As String, k As Integer
   Dim L As Integer, i As Integer
   Dim sChar As String * 1, sOut As String
   Dim bInRange As Boolean
   Dim iBegin As Integer, iEnd As Integer

   On Error Resume Next
   Set r = Selection.SpecialCells(xlCellTypeFormulas, 23)
   If Err <> 0 Then MsgBox "Нет формул в выделенной области!", vbCritical: Exit Sub
   On Error GoTo 0

   For Each c In r

      iBegin = 0: iEnd = 0: k = 0: sOut = ""

      sIn = c.FormulaLocal
      L = Len(sIn)
      For i = 1 To L
         sChar = Mid(sIn, i, 1)

         If Not bInRange Then
            If sChar Like "[A-Z]" Then
               bInRange = True
               iBegin = i

               k = k + 1
               ReDim Preserve sNotRanges(1 To k)
               ReDim Preserve sRanges(1 To k)

               sNotRanges(k) = Mid(sIn, iEnd + 1, iBegin - iEnd - 1)
            End If

         Else
            If sChar Like "[+-/*)&^; ]" Then
               bInRange = False
               iEnd = i - 1


               sRanges(k) = Mid(sIn, iBegin, iEnd - iBegin + 1)
            End If
            If bInRange And (i = L) Then
               bInRange = False
               iEnd = i

               sRanges(k) = Mid(sIn, iBegin, iEnd - iBegin + 1)
            End If
         End If

      Next i

      k = k + 1
      ReDim Preserve sNotRanges(1 To k)
      sNotRanges(k) = Mid(sIn, iEnd + 1)

      For i = 1 To k - 1
         sOut = sOut & sNotRanges(i) & "ДВССЫЛ(""" & sRanges(i) & """)"
      Next i
      sOut = sOut & sNotRanges(k)

      c.FormulaLocal = sOut
   Next c
End Sub
аналитика вне форума Ответить с цитированием
Старый 19.08.2010, 01:14   #10
KL (XL)
Форумчанин
 
Аватар для KL (XL)
 
Регистрация: 04.08.2009
Сообщений: 112
По умолчанию

Надеюсь сами формулы или формулы на них ссылающиеся не тяжеловесные, не работают с массивами и не используют функций поиска (ВПР(), ГПР(), ПОИСКПОЗ(), ПРОСМОТР()), условных подсчетов и суммирований (СУММЕСЛИ() СЧЕТЕСЛИ(), СУММПРОИЗВ(), БДСУММ(), БД...) и т.п., а то ДВССЫЛ() может оказаться "медвежьей услугой" из-за своей летучести :-(

Нелетучий эквивалент для =ДВССЫЛ("A1") при условии, что столбцы удаляться не будут: =ИНДЕКС(A:A;1), ну или так на все случаи жизни: =INDEX(1:65536,1,1).

Хотя как бы лекарство не оказалось хуже болезни :-)
KL [MVP - Microsoft Office Excel]
CPU: Intel Core 2, 2.17GHz | RAM: 3.25GB (4GB) | GPU: nVidia Quadro FX 2500M
OS: Windows 7 Ultimate x64 EN | MSO: 2010 Professional Plus x86 EN
KL (XL) вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Исключение при удалении из std::map arokot Общие вопросы C/C++ 2 11.08.2010 17:36
С++. Ошибка при удалении последней строки из файла _Dis_ Помощь студентам 12 28.08.2009 21:33
ошибка при удалении символа Virus191288 Общие вопросы Delphi 13 15.08.2009 14:50
Ошибка при удалении... JRcoker Общие вопросы Delphi 8 29.07.2008 22:53
Проблемы при удалении файлов Pavel55 Общие вопросы Delphi 7 10.01.2008 00:45