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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.11.2010, 00:37   #1
tae1980
Форумчанин
 
Регистрация: 02.02.2009
Сообщений: 842
По умолчанию Вписать значение в первую свободную колонку

Стоит простая задача: вписать значение в первую справа свободную колонку. Колонки заполняются последовательно, начиная с первой, возможна ситуация когда строка будет полностью пустая (вписывается первое значение).
Пытаюсь решить задачу вот таким методом
Код:
Rows(11).End(xlToRight).Column
Все хорошо когда в строке заполнено первые две колонки. Но если заполнена только одни или вообще нет значений код возвращает значение 256. Что я делаю не так? Или сегодня уже просто поздно? "Утро вечера мудренее" (с)
С уважением, Алексей.
tae1980 вне форума Ответить с цитированием
Старый 29.11.2010, 05:20   #2
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Код
Код:
x = [IV11].End(xlToLeft).Column
вернет номер последнего заполненного столбца в строке 11 (но не первого свободного).
Примечание: этот метод будет корректно работать, если ячейка последнего столбца пуста.
Если же заполненная строка имеет пустые ячейки, и Вам требуется определить номер столбца именно первой пустой ячейки в строке (в примере это строка 11), то можно воспользоваться кодом:
Код:
x = Rows(11).SpecialCells(xlCellTypeBlanks).Cells(1, 1).Column
Если же требуется записать значение в эту ячейку, то отдельно вычислять номер столбца не следует. Можно так:
Код:
[IV11].End(xlToLeft).Offset(, 1) = "Пишем_сюда"
или так:
Код:
Rows(11).SpecialCells(xlCellTypeBlanks).Cells(1, 1) = "Пишем_сюда"
в зависимости от Вашей задачи.
Чем шире угол зрения, тем он тупее.

Последний раз редактировалось SAS888; 29.11.2010 в 07:11.
SAS888 вне форума Ответить с цитированием
Старый 29.11.2010, 07:18   #3
tae1980
Форумчанин
 
Регистрация: 02.02.2009
Сообщений: 842
По умолчанию

Цитата:
Сообщение от SAS888 Посмотреть сообщение
Код
Код:
[IV11].End(xlToLeft).Column
вернет номер последнего заполненного столбца в строке 11 (но не первого свободного).
Примечание: этот метод будет корректно работать, если ячейка последнего столбца пуста.
Спасибо. Работает.
PS Странно... я экспериментировал с заменой направления, но результат был отрицательный. Наверное точно нужно было выспаться.
С уважением, Алексей.
tae1980 вне форума Ответить с цитированием
Старый 12.12.2010, 03:02   #4
tae1980
Форумчанин
 
Регистрация: 02.02.2009
Сообщений: 842
По умолчанию

Цитата:
Сообщение от SAS888 Посмотреть сообщение
Код
Код:
x = [IV11].End(xlToLeft).Column
вернет номер последнего заполненного столбца в строке 11 (но не первого свободного).
Как бы не смешно звучало снова воюю с этой же проблемой.
Задача: есть лист на котором построчно содержится информация, ее размер не известен (от 0 до 256), у листа есть кодовое имя. Нужно: обработать (я заношу строки в комбобокс, но для опыта подойдет просто вывести номер последнего столбца) всю информацию для строки в которой находиться курсор.
Вторая задача: дописать новую информацию в конец.
Пример листа:
___A___B__C
1| 111 222
2| 111
3| 111 222 333
4| 111
5| 111 222
6|
7| 111 222 333
8| 111
9| 111 222

Как всегда использую цикл for n=1 to ПоследнийСтолбец
Команда ПоследнийСтолбец = Path.Rows(Selection.Row).End(xlToLe ft).Column
Всегда возвращает 1. Если заменить "xlToLeft" на "xlToRight" то если заполнено 2 и более столбцов - возвращается правильное значение, если заполнено 0 или 1 столбец - возвращается 256.

Что я снова делаю нет так?
Вложения
Тип файла: rar Книга1.rar (8.2 Кб, 12 просмотров)
С уважением, Алексей.
tae1980 вне форума Ответить с цитированием
Старый 12.12.2010, 03:22   #5
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

Path.cells(Selection.Row, columns.count).End(xlToLeft).Column
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 12.12.2010, 09:38   #6
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Метод End имеет опции xlUp, xlDown, xlToLeft и xlToRight. И работает он относительно указанной ячейки. Результат работы этого метода эквивалентен действию:
Выделить ячейку и одновременно нажать клавиши "End" и стрелку соответствующего направления. Поэкспериментируйте, и вопросов у Вас не будет.
Чем шире угол зрения, тем он тупее.

Последний раз редактировалось SAS888; 12.12.2010 в 10:48.
SAS888 вне форума Ответить с цитированием
Старый 12.12.2010, 10:53   #7
tae1980
Форумчанин
 
Регистрация: 02.02.2009
Сообщений: 842
По умолчанию

Цитата:
Сообщение от IgorGO Посмотреть сообщение
Path.cells(Selection.Row, columns.count).End(xlToLeft).Column
Спасибо. Вечером попробую.
С уважением, Алексей.
tae1980 вне форума Ответить с цитированием
Старый 12.12.2010, 10:57   #8
tae1980
Форумчанин
 
Регистрация: 02.02.2009
Сообщений: 842
По умолчанию

Цитата:
Сообщение от SAS888 Посмотреть сообщение
Метод End имеет опции xlUp, xlDown, xlToLeft и xlToRight. И работает он относительно указанной ячейки.
Как я понимаю в этом и проблема, так как у меня указана только строка. Но тогда почему xlToRight, работает почти правильно?
С уважением, Алексей.
tae1980 вне форума Ответить с цитированием
Старый 12.12.2010, 11:50   #9
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

фраза:
Цитата:
xlToRight, работает почти правильно
сказанная в адрес макроса - означает "ни фига он не работает!!!"
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 13.12.2010, 23:30   #10
tae1980
Форумчанин
 
Регистрация: 02.02.2009
Сообщений: 842
По умолчанию

Цитата:
Сообщение от IgorGO Посмотреть сообщение
фраза:сказанная в адрес макроса - означает "ни фига он не работает!!!"
Аминь! :)))
Твой вариант работает.
С уважением, Алексей.
tae1980 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как в Delphi 7 в объекте типа TDBGrid сделать первую колонку фиксированной? grh БД в Delphi 3 26.09.2010 14:32
вписать в треугольник окружность stimswall Помощь студентам 3 21.03.2009 03:15
Вписать в ячейку формулу. tae1980 Microsoft Office Excel 7 18.03.2009 18:19
как вписать сферу в паскале Melok Помощь студентам 1 16.11.2007 21:56
Как вписать строки в файл Master-Skull Общие вопросы Delphi 17 07.09.2007 14:45