Модераторы: mihanik
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Архив значения в Excel!!! В заданное поле приходит, значение, как сделать архив этих значени 
:(
    Опции темы
slang
Дата 13.7.2005, 18:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 455
Регистрация: 7.3.2004

Репутация: нет
Всего: 0



В заданном поле перманентно меняется значение (приходит из другой программы), как сделать архив этих значений на другом листе.
Подскажите, от чего отттолкнутся, хотя-бы!
Заранее спасибо.


--------------------
Запчасти на иномарки www.avtograd55.ru.
Если есть время - зайдите и посоветуйте что исправить и что доработать.
PM MAIL WWW ICQ   Вверх
Staruha
Дата 13.7.2005, 20:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1292
Регистрация: 1.2.2004
Где: Казань

Репутация: 13
Всего: 27



Запросто smile
Код

Private Sub Worksheet_Change(ByVal Target As Range)
If Range("A1").Value > 0 Then
For x = 1 To 10
  If Лист2.Range("A" & x).Value = "" Then
       Лист2.Range("A" & x).Value = Range("A1").Value
   Exit For
      Range("A1").Value = ""
     End If
   Next
 End If
End Sub



--------------------
Возмездие настигнет
PM MAIL   Вверх
likhobory
Дата 13.7.2005, 22:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 466
Регистрация: 17.5.2005
Где: Москва

Репутация: 10
Всего: 20



+ еще один из возможных вариантов
Код
Private Sub Worksheet_Change(ByVal Target As Range)
LastRow = лист2.Range("A1").SpecialCells(xlLastCell).Row
If Range("A1") > 0 Then _
   лист2.Cells(LastRow + 1, 1) = Range("A1")
End Sub



--------------------
PM MAIL   Вверх
Staruha
Дата 13.7.2005, 22:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1292
Регистрация: 1.2.2004
Где: Казань

Репутация: 13
Всего: 27



Цитата
SpecialCells(xlLastCell).Row

вот здесь пожалуйста поподробнее.Это что метод какой?
Цитата
еще один из возможных вариантов

вариантов действительно тьма smile


--------------------
Возмездие настигнет
PM MAIL   Вверх
slang
Дата 13.7.2005, 22:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 455
Регистрация: 7.3.2004

Репутация: нет
Всего: 0



Сам скрипт работает, т.е. инфа из поля Лист1.А1 вставляется в Лист2.А1, только вот скрипт не работает постоянно, т.е. ошибка в первой строке.
Не могу найти в книжке (здоровая книжка на столе "Office XP разработка приложений") какое имя макросу дать, чтобы он выполнялся при смене инфы в поле Лист1.А1.
Как я понял в этом скрипте менятся поле на втором листе, если мы на нем находимся. Как "замутить", чтобы на втором листе менялась информация не зависимо от того где мы находимся в данный момент на другом листе данной книги, в другой книге или Excel, вообще свернут.


--------------------
Запчасти на иномарки www.avtograd55.ru.
Если есть время - зайдите и посоветуйте что исправить и что доработать.
PM MAIL WWW ICQ   Вверх
Staruha
Дата 13.7.2005, 22:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1292
Регистрация: 1.2.2004
Где: Казань

Репутация: 13
Всего: 27



Так мы находимся на первом листе. В ячейку А1 вводим значение происходит событие Change.В первый лист надо код вставлять.
А значение можно ввести программно
Книга.Лист1.Range("A1")



--------------------
Возмездие настигнет
PM MAIL   Вверх
likhobory
Дата 14.7.2005, 00:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 466
Регистрация: 17.5.2005
Где: Москва

Репутация: 10
Всего: 20



Цитата(Staruha @ 13.7.2005, 23:30)
SpecialCells(xlLastCell)....Это что метод какой?

метод объекта Range, возвращает диапазон ячеек, соотв. определенному типу, в данном случае - последнюю ячейку




--------------------
PM MAIL   Вверх
slang
Дата 14.7.2005, 12:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 455
Регистрация: 7.3.2004

Репутация: нет
Всего: 0



Все-таки немного не та строчка
Код

Private Sub Worksheet_Change(ByVal Target As Range)

Это событие не происходит при изменении значения в ячейке, если это значение поступает от сторонней программы через DDE
Какое событие происходит в моем случае?
Выяснил:
Код

Private Sub Worksheet_Calculate()


Это сообщение отредактировал(а) slang - 14.7.2005, 12:35


--------------------
Запчасти на иномарки www.avtograd55.ru.
Если есть время - зайдите и посоветуйте что исправить и что доработать.
PM MAIL WWW ICQ   Вверх
Staruha
Дата 14.7.2005, 19:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1292
Регистрация: 1.2.2004
Где: Казань

Репутация: 13
Всего: 27



likhobory
А что этот метод охватывает только указанный столбец или диапазон до первого пустого столбца?


--------------------
Возмездие настигнет
PM MAIL   Вверх
likhobory
Дата 14.7.2005, 19:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 466
Регистрация: 17.5.2005
Где: Москва

Репутация: 10
Всего: 20



определяем последнюю заполненную ячейку на ЛИСТЕ
LastCell = Activesheet.Range("A1").SpecialCells(xlLastCell)
-------------------------------
думаю, есть смысл выложить несколько примеров из закромов;
выражаю очередную признательность автору и надеюсь, что он не будет в обиде smile
Авторы:
-pashulka- (www.pashulka.nm.ru) - примеры 1-3,5-7
?????????? - пример 4

-------------------------------

Вариант I.

Для поиска последней заполненной ячейки можно воспользоваться методом SpecialCells и специальной константой xlLastCell

Пример определения адреса последней заполненной ячейки, а также номера её строки и столбца.
Код
iAddress = Range("A1").SpecialCells(xlLastCell).Address 
iRow = Range("A1").SpecialCells(xlLastCell).Row 
iClm = Range("A1").SpecialCells(xlLastCell).Column


Вариант II.

Для поиска последней заполненной ячейки можно воспользоваться свойством UsedRange об'екта Worksheet

Пример определения номера строки и столбца последней заполненной ячейки.
Код
iRow = ActiveSheet.UsedRange.Row + ActiveSheet.UsedRange.Rows.Count - 1 
iClm = ActiveSheet.UsedRange.Column + ActiveSheet.UsedRange.Columns.Count 
- 1

Код
With ActiveSheet.UsedRange 
iRow = .Row + .Rows.Count - 1 
iClm = .Column + .Columns.Count - 1 
End With

Код
Set iList = ActiveSheet 
iRow = iList.UsedRange.Row + iList.UsedRange.Rows.Count - 1 
iClm = iList.UsedRange.Column + iList.UsedRange.Columns.Count - 1

Код
Set iDiapazon = ActiveSheet.UsedRange 
iRow = iDiapazon.Row + iDiapazon.Rows.Count - 1 
iClm = iDiapazon.Column + iDiapazon.Columns.Count - 1

Комментарий :
Так как свойство UsedRange принадлежит об'екту Worksheet, то использование ссылки на этот об'ект обязательно.

Примечание :
Все вышеприведённые примеры определяют последнюю ячейку в активном рабочем листе. Естественно, что мы можем ссылаться и на другие рабочие листы, используя при этом их имя, номер (индекс) или имя в среде VBA ()

Вариант III.

Для определения количества заполненных ячеек в смежном диапазоне можно воспользоваться свойством CurrentRegion об'екта Range

Пример определения количества строк и столбцов в смежном с ячейкой диапазоне, а также адрес этого диапазона.
Код
iRow = Columns("A").CurrentRegion.Rows.Count 
iClm = Rows(1).CurrentRegion.Columns.Count 
iAddr = Range("A1").CurrentRegion.Address

Примечание :
Особенностью свойства CurrentRegion является то, что он возвращает весь диапазон, но только состоящий из смежных ячеек.

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

Вариант IV.

Для определения номера последней заполненной ячейки в конкретной строке или столбце, а также для определения последней заполненной ячейки можно использовать функцию Find

Пример определения номера последней заполненной ячейки в конкретной строке и столбце.
Код
On Error Resume Next
iRow = Columns("C").Find(What:="*", SearchDirection:=xlPrevious, 
SearchOrder:=xlByRows).Row 
iClm = Rows(10).Find(What:="*", SearchDirection:=xlPrevious, 
SearchOrder:=xlByColumns).Column


Пример определения номера строки и столбца последней заполненной ячейки.
Код
On Error Resume Next
iRow = Cells.Find(What:="*", SearchDirection:=xlPrevious, 
SearchOrder:=xlByRows).Row 
iClm = Cells.Find(What:="*", SearchDirection:=xlPrevious, 
SearchOrder:=xlByColumns).Column

Примечание :
Вышеупомянутый синтаксис может вызвать ошибку, если указанный диапазон не содержат данных. Для того, чтобы этого избежать во всех примерах использован "режим отложенной ошибки" On Error Resume Next
Однако можно использовать и другой синтаксис, например :
Код
Set iLastCell = Cells.Find(What:="*", SearchDirection:=xlPrevious, 
SearchOrder:=xlByRows) 
If Not iLastCell Is Nothing Then 
iRow = iLastCell.Row 
End If


Вариант V.

Для определения номера последней заполненной ячейки в конкретной строке или столбце можно воспользоваться свойством End об'екта Range и специальными константами xlToRight, xlDown

Пример определения номера последней заполненной ячейки в конкретной строке и столбце.
Код
iRow = Columns(3).End(xlDown).Row 
iRow = Columns("C").End(xlDown).Row 
iClm = Rows(10).End(xlToRight).Column

Комментарий :
важно Этот вариант будет корректно работать только при условии, что данные в строке, или столбце начинаются с самой первой ячейки и не содержат пустых ячеек.

Вариант VI.

Тот же самый способ, что и предыдущий, но с небольшими изменениями.

Пример определения номера последней заполненной ячейки в конкретной строке и столбце.
Код
iRow = Cells(65536, 3).End(xlUp).Row 
iRow = Cells(65536, "C").End(xlUp).Row 
iClm = Cells(10, 256).End(xlToLeft).Column


В зависимости от Вашего кода можно применять различные подварианты, например:
Код
iRow = Columns(3).Rows(65536).End(xlUp).Row 
iRow = Columns("C").Rows(65536).End(xlUp).Row

Комментарий :
важно Этот вариант будет работать при любых условиях.

Вариант VII.
Некоторые люди используют для определения последней заполненной строки в определённом столбце стандартную функцию рабочего листа СЧЁТЗ

Пример определения номера последней заполненной ячейки в конкретном столбце.
Код
iRow = Application.CountA(Columns(3)) 
iRow = Application.CountA(Columns("C")) 
iRow = WorksheetFunction.CountA(Columns(3)) 
iRow = Application.WorksheetFunction.CountA(Columns("C"))

Комментарий :
важно Так как функция СЧЁТЗ считает количество непустых ячеек, то этот вариант будет корректно работать только при условии, что данные в столбце начинаются с самой первой ячейки и не содержат пустых ячеек.

Важно : Если быть абсолютно точным, то в первых четырёх случаях мы определяем последнюю ячейку, которая вовсе не обязательно должна быть заполнена, так эта ячейка расположена на пересечении последней строки и последнего столбца.


Это сообщение отредактировал(а) likhobory - 14.7.2005, 19:55


--------------------
PM MAIL   Вверх
Staruha
Дата 14.7.2005, 20:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1292
Регистрация: 1.2.2004
Где: Казань

Репутация: 13
Всего: 27



Цитата
важно Этот вариант будет корректно работать только при условии, что данные в строке, или столбце начинаются с самой первой ячейки и не содержат пустых ячеек.

Да уж.Поэтому применяю CurrentRegion.Классная вещь просто тащусь smile



--------------------
Возмездие настигнет
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Программирование, связанное с MS Office"
mihanik staruha

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами



  • Несанкционированная реклама на форуме запрещена
  • Пожалуйста, давайте своим темам осмысленный, информативный заголовок. Вопль "Помогите!" таковым не является.
  • Чем полнее и яснее Вы изложите проблему, тем быстрее мы её решим.
  • Оставляйте свои записи в "Книге отзывов о работе администрации"
  • А вот тут лежит FAQ нашего подраздела


Если Вам понравилась атмосфера форума, заходите к нам чаще!
С уважением mihanik и staruha.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Программирование, связанное с MS Office | Следующая тема »


 




[ Время генерации скрипта: 0.0918 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.