Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Программирование, связанное с MS Office > Обращение к объединенным ячейками


Автор: ИгнатьевАлексей 22.12.2007, 18:01
Друзья! Кто сталкивался с проблемой?

У меня есть стандартный документ, изменять его форму нельзя. В нем есть объединенные ячейки. Например, объеднены ячейки A1 и А2. В этой объединенной ячейке записано выражение, например "Vingrad the best". При помощи метода .offset я обращаюсь раздельно к ячейкам А1 и А2. При чтении из А1 я получаю  "Vingrad the best", а при чтении из А2 получаю ""(пустоту). Но, блин, логика документа подразумевает,   что и в А2 стоит "Vingrad the best". 
Как тут быть? Как обойтись малой кровью?  smile 

Заранее благодарен!

Автор: Naghual 22.12.2007, 19:03
Как мне помнится, именно так и должно быть!
ОДНО значение на объединенные ячейки. 

Автор: ИгнатьевАлексей 22.12.2007, 21:07
Naghual,  а как же человечество живет с этим?  smile 

Похоже, при объединении ячеек, если что-то было в одной ячейке, это что то приобретает адрес левой верхней ячейки. В других ячейках при программном обращении - пустота. 
У меня только вертикальные объединения. Навешивать дополнительную фунуцию, которая ползет вверх по ячейкам, пока не найдет первую непустую, что ли? Ужас как неэлегантно, имхо!  smile 

как же быть?   smile 

Автор: ИгнатьевАлексей 22.12.2007, 23:01
Немного подразобрался сам, было время. Может, кому и интересно.  smile 

Набросал функцию. Не очень элегантно, но работает.
Код

Function MergeCellVal(ByRef funRange As Range) As String
    If funRange.MergeCells Then
         Dim funRange_2 As Range
         Set funRange_2 = funRange.MergeArea
         MergeCellVal = funRange_2.Cells(1, 1).Value
         Set funRange_2 = Nothing
    Else
         MergeCellVal = funRange.Value
    End If
   End Function


Может кто попроще решение знает? А то теперь мне каждую ячейку документа придется через эту функцию читать!  smile   smile 

Автор: Naghual 23.12.2007, 23:27
А в чем фишка функции?  Возвращает единственное значение.
Может конечно в контексте вашей задачи это и необходимо... Незнаю.

Автор: ИгнатьевАлексей 24.12.2007, 11:18
Naghual, как я понял работу любимого екселя, то происходит так:
Ячейка A1-пустая, ячейка A2-"Солома", ячейка A3-пустая. Юзер объединяет ячейки A1:A3, подразумевая, что "Солома" относится ко всем 3-м ячейкам (визуально так и получается). Однако, после объединения  эксель присваивает значение "Солома" первой ячейке объединенного диапазона, то есть A1. Что получается, визуально "Солома" стоит во всех 3-х ячейках, а при программном обращении (чтении) получается: A1- "Солома" , A2-пусто, A3-пусто. 
Я задал вопрос общественности, но, как ни странно, никто ничего не посоветовал. Хотя я уверен, что это популярные грабли.
Функция эту проблему решает.
И еще...есть у меня смутные сомнения, что когда то я делал что то, и в аналогичном случае в объединенной ячейке у меня со всех составных ячеек читались одинаковые значения.

Автор: Akina 24.12.2007, 12:33
Цитата(ИгнатьевАлексей @  22.12.2007,  19:01 Найти цитируемый пост)
логика документа подразумевает,   что и в А2 стоит "Vingrad the best". 

нет

Цитата(ИгнатьевАлексей @  24.12.2007,  12:18 Найти цитируемый пост)
Ячейка A1-пустая, ячейка A2-"Солома", ячейка A3-пустая. Юзер объединяет ячейки A1:A3, подразумевая, что "Солома" относится ко всем 3-м ячейкам (визуально так и получается). Однако, после объединения  эксель присваивает значение "Солома" первой ячейке объединенного диапазона, то есть A1. Что получается, визуально "Солома" стоит во всех 3-х ячейках, а при программном обращении (чтении) получается: A1- "Солома" , A2-пусто, A3-пусто. 
Я задал вопрос общественности, но, как ни странно, никто ничего не посоветовал. Хотя я уверен, что это популярные грабли.

Это не грабли и не косяк. Это именно так и есть. 

Подумай, что идентифицирует объединенную ячейку? координата левого верхнего угла и количество объединяемых ячеек по каждому измерению. Все. Далее - к какому из этих параметров может быть привязано содержимое (и все остальное - заливка, границы и пр.)? только к координате левого верхнего угла. Что мы собсно и наблюдаем.

Автор: ИгнатьевАлексей 24.12.2007, 13:41
Akina, под фразой "логика документа" я имел ввиду того человека, который этод документ составлял. Он не программист. Он видит, что для группы ячеек имеется идентичное значение - взял и объединил. А я, программист (юный), работаю с этим документом и имею (имел) проблему. Вот суть моего вопроса.

Akina, еще раз спасибо за разъяснение! Задача решена, но я до сих пор не уверен в рациональности своего решения.

Автор: Akina 24.12.2007, 14:27
Цитата(ИгнатьевАлексей @  24.12.2007,  14:41 Найти цитируемый пост)
под фразой "логика документа" я имел ввиду того человека, который этод документ составлял. Он не программист.

Конечно. Раз он делал отчет (читай - текстовый документ) в Экселе (читай - табличном процессоре) - то он ламер (хотя на самом деле надо выразиться намного грубее).

Автор: ИгнатьевАлексей 24.12.2007, 15:12
Akina. Посмотри, плз, на вид документа. Мне бы было интересно, в каком редакторе его удобнее было выполнить, чтобы:
1. Удобно построить документ и удобно работать с ним. У всех он был (редактор). Ремарка - таких листов в книге десятки.
2. Удобно писать макросы-утилиты по автоматизации производства документов, то есть на основе подобных листов генерируются схемы.

Простите за  smile .

Добавлено через 37 секунд
Забыл вложение

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)