Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Отображение даты и времени изменения ячейки - Мир MS Excel

Старая форма входа
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Отображение даты и времени изменения ячейки (Макросы/Sub)
Отображение даты и времени изменения ячейки
ArkaIIIa Дата: Четверг, 05.06.2014, 16:34 | Сообщение № 1
Группа: Проверенные
Ранг: Ветеран
Сообщений: 894
Репутация: 115 ±
Замечаний: 0% ±

2010
Господа,

В приложенном файле есть готовый макрос, который показывает в столбце B даты и время изменения соответствующих строк столбца A.
Помогите, пожалуйста, преобразовать его таким образом, чтобы он просматривал столбцы, а не строки. Т.е., чтобы при изменении ячейки A1 - в ячейке A5 отображалась дата и время изменения, при изменении ячейки B1 - в B5 и т.д.
К сообщению приложен файл: __01.xls (40.5 Kb)
 
Ответить
СообщениеГоспода,

В приложенном файле есть готовый макрос, который показывает в столбце B даты и время изменения соответствующих строк столбца A.
Помогите, пожалуйста, преобразовать его таким образом, чтобы он просматривал столбцы, а не строки. Т.е., чтобы при изменении ячейки A1 - в ячейке A5 отображалась дата и время изменения, при изменении ячейки B1 - в B5 и т.д.

Автор - ArkaIIIa
Дата добавления - 05.06.2014 в 16:34
Karbofox Дата: Четверг, 05.06.2014, 16:42 | Сообщение № 2
Группа: Проверенные
Ранг: Участник
Сообщений: 69
Репутация: 16 ±
Замечаний: 0% ±

Excel 2010
Это имелось в виду?
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A1:IV1")) Is Nothing Then
Application.EnableEvents = False
With Target.Offset(4, 0)
If Target <> Old_Value Then
.Value = Now
.EntireColumn.AutoFit
End If
End With
End If
Application.EnableEvents = True
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, Range("A1:IV1")) Is Nothing Then
Old_Value = Target.Value
End If
End Sub
[/vba]


Сообщение отредактировал Karbofox - Четверг, 05.06.2014, 16:43
 
Ответить
СообщениеЭто имелось в виду?
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A1:IV1")) Is Nothing Then
Application.EnableEvents = False
With Target.Offset(4, 0)
If Target <> Old_Value Then
.Value = Now
.EntireColumn.AutoFit
End If
End With
End If
Application.EnableEvents = True
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, Range("A1:IV1")) Is Nothing Then
Old_Value = Target.Value
End If
End Sub
[/vba]

Автор - Karbofox
Дата добавления - 05.06.2014 в 16:42
ArkaIIIa Дата: Четверг, 05.06.2014, 16:44 | Сообщение № 3
Группа: Проверенные
Ранг: Ветеран
Сообщений: 894
Репутация: 115 ±
Замечаний: 0% ±

2010
Karbofox
Да, именно это, спасибо большое!
 
Ответить
СообщениеKarbofox
Да, именно это, спасибо большое!

Автор - ArkaIIIa
Дата добавления - 05.06.2014 в 16:44
Rioran Дата: Четверг, 05.06.2014, 16:53 | Сообщение № 4
Группа: Авторы
Ранг: Ветеран
Сообщений: 903
Репутация: 290 ±
Замечаний: 0% ±

Excel 2013
ArkaIIIa, здравствуйте.

Посмотрите на такую переделку. Принцип:

1). Поменял EntireColumn.AutoFit на EntireRow.Autofit
2). Поменял каждый Range с A1:A100... на B1:AA4 в обоих макросах листа
3). Поменял Target.Offset(0, 1) на Target.Offset(5 - ActiveCell.Row, 0)

***

По скорости ответа меня опередили =) однако замечу, что в моём решении будет проставляться время, если изменена любая из 4-х строк выше ячейки времени.
К сообщению приложен файл: one_way.xls (47.5 Kb)


Сообщение отредактировал Rioran - Четверг, 05.06.2014, 16:55
 
Ответить
СообщениеArkaIIIa, здравствуйте.

Посмотрите на такую переделку. Принцип:

1). Поменял EntireColumn.AutoFit на EntireRow.Autofit
2). Поменял каждый Range с A1:A100... на B1:AA4 в обоих макросах листа
3). Поменял Target.Offset(0, 1) на Target.Offset(5 - ActiveCell.Row, 0)

***

По скорости ответа меня опередили =) однако замечу, что в моём решении будет проставляться время, если изменена любая из 4-х строк выше ячейки времени.

Автор - Rioran
Дата добавления - 05.06.2014 в 16:53
ArkaIIIa Дата: Четверг, 05.06.2014, 17:13 | Сообщение № 5
Группа: Проверенные
Ранг: Ветеран
Сообщений: 894
Репутация: 115 ±
Замечаний: 0% ±

2010
Rioran
Очень здорово. Но возник вопрос. Почему эти макросы (Ваш и Karbofox`а) работают только во вновь созданных книгах?
При переносе на ранее созданную - почему то они не работают :-(
 
Ответить
СообщениеRioran
Очень здорово. Но возник вопрос. Почему эти макросы (Ваш и Karbofox`а) работают только во вновь созданных книгах?
При переносе на ранее созданную - почему то они не работают :-(

Автор - ArkaIIIa
Дата добавления - 05.06.2014 в 17:13
Rioran Дата: Четверг, 05.06.2014, 17:20 | Сообщение № 6
Группа: Авторы
Ранг: Ветеран
Сообщений: 903
Репутация: 290 ±
Замечаний: 0% ±

Excel 2013
ArkaIIIa, у них нет никакого якоря за книгой. В какой лист их вставите - там и будут работать, лишь бы Range, с которым работаем, на самом листе находился где надо.

***

Попробовал продублировать макросы внутри листа два раза - выдает ошибку. Значит, на одном листе в один и тот же момент должны быть только один Worksheet_Change и Worksheet_SelectionChange


Сообщение отредактировал Rioran - Четверг, 05.06.2014, 17:22
 
Ответить
СообщениеArkaIIIa, у них нет никакого якоря за книгой. В какой лист их вставите - там и будут работать, лишь бы Range, с которым работаем, на самом листе находился где надо.

***

Попробовал продублировать макросы внутри листа два раза - выдает ошибку. Значит, на одном листе в один и тот же момент должны быть только один Worksheet_Change и Worksheet_SelectionChange

Автор - Rioran
Дата добавления - 05.06.2014 в 17:20
ArkaIIIa Дата: Четверг, 05.06.2014, 17:28 | Сообщение № 7
Группа: Проверенные
Ранг: Ветеран
Сообщений: 894
Репутация: 115 ±
Замечаний: 0% ±

2010
Rioran
Проблема вот в чем. У меня при помощи макроса, который прописан в модуле, из ячеек A1:A20 (условно) копируются и вставляются в ячейки B1:B20 (условно) данные.
Нужно, чтобы в B21 прописывалась дата и время вставки. Вот если руками менять данные в строке, на которую ссылается Ваш или Karbofox`а макрос - то всё ок, дата и время прописываются ниже. А если эти данные вставляются при помощи макроса - то VBA ругается.


Сообщение отредактировал ArkaIIIa - Четверг, 05.06.2014, 17:32
 
Ответить
СообщениеRioran
Проблема вот в чем. У меня при помощи макроса, который прописан в модуле, из ячеек A1:A20 (условно) копируются и вставляются в ячейки B1:B20 (условно) данные.
Нужно, чтобы в B21 прописывалась дата и время вставки. Вот если руками менять данные в строке, на которую ссылается Ваш или Karbofox`а макрос - то всё ок, дата и время прописываются ниже. А если эти данные вставляются при помощи макроса - то VBA ругается.

Автор - ArkaIIIa
Дата добавления - 05.06.2014 в 17:28
ArkaIIIa Дата: Четверг, 05.06.2014, 17:30 | Сообщение № 8
Группа: Проверенные
Ранг: Ветеран
Сообщений: 894
Репутация: 115 ±
Замечаний: 0% ±

2010
Rioran
Я думал, что макросу все равно, каким образом вносятся изменения в ячейку, и важен сам факт изменения. Но, выходит, что это не так. Почему-то конфликтуют макросы.


Сообщение отредактировал ArkaIIIa - Четверг, 05.06.2014, 17:30
 
Ответить
СообщениеRioran
Я думал, что макросу все равно, каким образом вносятся изменения в ячейку, и важен сам факт изменения. Но, выходит, что это не так. Почему-то конфликтуют макросы.

Автор - ArkaIIIa
Дата добавления - 05.06.2014 в 17:30
ArkaIIIa Дата: Четверг, 05.06.2014, 17:36 | Сообщение № 9
Группа: Проверенные
Ранг: Ветеран
Сообщений: 894
Репутация: 115 ±
Замечаний: 0% ±

2010
Rioran
В общем, если на живом примере, то вот это в модуле:

[vba]
Код
Sub Update_()
     Path_1 = "F:\STALE_APP_REPORT.xls"
     iFileDateTime_1 = FileDateTime(Path_1)
     Cells(27, 11) = iFileDateTime_1
     ActiveWorkbook.UpdateLink Name:= _
         "F:\STALE_APP_REPORT.xls", Type:=xlExcelLinks
     Dim r As Range
     Set r = Sheets(7).Rows(2).Find(Sheets(7).[B1].Text, , xlValues, xlWhole)
     If Not r Is Nothing Then
         Sheets(7).[B3:B140].Copy
         r.Offset(1).PasteSpecial Paste:=xlPasteValues
     End If
End Sub
[/vba]

Т.е.
1) Обновляются связи с исходником
2) Прописывается время обновления исходника
3) Данные из ячеек B3:B140 листа7 копируются в соответствующие ячейки на листе 7 (смотрит время обновления исходника и вставляет в столбец, где указано такое же время)
4) Нужно, чтобы в 141 строке тех столбцов, куда вставляются данные, указывалась дата и время этой вставки.
 
Ответить
СообщениеRioran
В общем, если на живом примере, то вот это в модуле:

[vba]
Код
Sub Update_()
     Path_1 = "F:\STALE_APP_REPORT.xls"
     iFileDateTime_1 = FileDateTime(Path_1)
     Cells(27, 11) = iFileDateTime_1
     ActiveWorkbook.UpdateLink Name:= _
         "F:\STALE_APP_REPORT.xls", Type:=xlExcelLinks
     Dim r As Range
     Set r = Sheets(7).Rows(2).Find(Sheets(7).[B1].Text, , xlValues, xlWhole)
     If Not r Is Nothing Then
         Sheets(7).[B3:B140].Copy
         r.Offset(1).PasteSpecial Paste:=xlPasteValues
     End If
End Sub
[/vba]

Т.е.
1) Обновляются связи с исходником
2) Прописывается время обновления исходника
3) Данные из ячеек B3:B140 листа7 копируются в соответствующие ячейки на листе 7 (смотрит время обновления исходника и вставляет в столбец, где указано такое же время)
4) Нужно, чтобы в 141 строке тех столбцов, куда вставляются данные, указывалась дата и время этой вставки.

Автор - ArkaIIIa
Дата добавления - 05.06.2014 в 17:36
Rioran Дата: Четверг, 05.06.2014, 17:41 | Сообщение № 10
Группа: Авторы
Ранг: Ветеран
Сообщений: 903
Репутация: 290 ±
Замечаний: 0% ±

Excel 2013
ArkaIIIa, Вам нужно чтобы одновременно менялось сразу два значения?

В следующем примере макросы уже, возможно, лишнее и разумнее было бы воспользоваться поиском максимального значения, но машина запущена и сделано макросом, посмотрите =)
К сообщению приложен файл: second_way.xls (42.0 Kb)
 
Ответить
СообщениеArkaIIIa, Вам нужно чтобы одновременно менялось сразу два значения?

В следующем примере макросы уже, возможно, лишнее и разумнее было бы воспользоваться поиском максимального значения, но машина запущена и сделано макросом, посмотрите =)

Автор - Rioran
Дата добавления - 05.06.2014 в 17:41
RAN Дата: Четверг, 05.06.2014, 17:46 | Сообщение № 11
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
если на живом примере,

то это в файле.
Ваша
[vba]
Код
Sub Update_()
[/vba]
сама по себе, а ошибка возникает совсем в другом месте.
 
Ответить
Сообщение
если на живом примере,

то это в файле.
Ваша
[vba]
Код
Sub Update_()
[/vba]
сама по себе, а ошибка возникает совсем в другом месте.

Автор - RAN
Дата добавления - 05.06.2014 в 17:46
Rioran Дата: Четверг, 05.06.2014, 17:46 | Сообщение № 12
Группа: Авторы
Ранг: Ветеран
Сообщений: 903
Репутация: 290 ±
Замечаний: 0% ±

Excel 2013
ArkaIIIa, понял, реальная задача оказалась другой. Подумаем.
 
Ответить
СообщениеArkaIIIa, понял, реальная задача оказалась другой. Подумаем.

Автор - Rioran
Дата добавления - 05.06.2014 в 17:46
ArkaIIIa Дата: Пятница, 06.06.2014, 08:11 | Сообщение № 13
Группа: Проверенные
Ранг: Ветеран
Сообщений: 894
Репутация: 115 ±
Замечаний: 0% ±

2010
RAN
Рабочий файл - очень объемный, и там много конфиденциальной информации. Его очень сложно будет почистить, чтобы выложить для примера :-(

Rioran
Разве вставка новых данных в ячейку (т.е. замещение одних данных другими) - не является её изменением?
Мне важно, чтобы макрос вставлял дату и время обновления любой ячейки, в рамках указанного диапазона в одном столбце. Т.е. у меня данные из B3:B140, вставляются в C3:С140, D3:D140 и т.д.
Макрос уважаемого Karbofox`а корректно работает, если данные не копипастятся, а забиваются вручную. Вы могли бы помочь адаптировать его именно под вставляемые данные?
Либо добавить что-то в эту часть макроса:
[vba]
Код
Dim r As Range
      Set r = Sheets(7).Rows(2).Find(Sheets(7).[B1].Text, , xlValues, xlWhole)
      If Not r Is Nothing Then
          Sheets(7).[B3:B140].Copy
          r.Offset(1).PasteSpecial Paste:=xlPasteValues
      End If
[/vba]
, чтобы после вставки значений, строчкой ниже указывалась дата/время вставки?

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


Сообщение отредактировал ArkaIIIa - Пятница, 06.06.2014, 08:11
 
Ответить
СообщениеRAN
Рабочий файл - очень объемный, и там много конфиденциальной информации. Его очень сложно будет почистить, чтобы выложить для примера :-(

Rioran
Разве вставка новых данных в ячейку (т.е. замещение одних данных другими) - не является её изменением?
Мне важно, чтобы макрос вставлял дату и время обновления любой ячейки, в рамках указанного диапазона в одном столбце. Т.е. у меня данные из B3:B140, вставляются в C3:С140, D3:D140 и т.д.
Макрос уважаемого Karbofox`а корректно работает, если данные не копипастятся, а забиваются вручную. Вы могли бы помочь адаптировать его именно под вставляемые данные?
Либо добавить что-то в эту часть макроса:
[vba]
Код
Dim r As Range
      Set r = Sheets(7).Rows(2).Find(Sheets(7).[B1].Text, , xlValues, xlWhole)
      If Not r Is Nothing Then
          Sheets(7).[B3:B140].Copy
          r.Offset(1).PasteSpecial Paste:=xlPasteValues
      End If
[/vba]
, чтобы после вставки значений, строчкой ниже указывалась дата/время вставки?

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

Автор - ArkaIIIa
Дата добавления - 06.06.2014 в 08:11
ArkaIIIa Дата: Пятница, 06.06.2014, 08:57 | Сообщение № 14
Группа: Проверенные
Ранг: Ветеран
Сообщений: 894
Репутация: 115 ±
Замечаний: 0% ±

2010
Попробовал смоделировать ситуацию на новом пустом файле.
Использовал макрос:
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A1:IV1")) Is Nothing Then
Application.EnableEvents = False
With Target.Offset(4, 0)
If Target <> Old_Value Then
.Value = Now
.EntireColumn.AutoFit
End If
End With
End If
Application.EnableEvents = True
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, Range("A1:IV1")) Is Nothing Then
Old_Value = Target.Value
End If
End Sub
[/vba]
В случае, если копируется-вставляется 1 ячейка - все в порядке.
В случае, если копируется-вставляется более 1 ячейки - появляется меседжбокс с текстом "Run-time Error `13`: Type mismatch". И после этого в данной книге макрос перестает работать, подсвечивая желтым часть кода:
[vba]
Код
If Target <> Old_Value Then
[/vba]
 
Ответить
СообщениеПопробовал смоделировать ситуацию на новом пустом файле.
Использовал макрос:
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A1:IV1")) Is Nothing Then
Application.EnableEvents = False
With Target.Offset(4, 0)
If Target <> Old_Value Then
.Value = Now
.EntireColumn.AutoFit
End If
End With
End If
Application.EnableEvents = True
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, Range("A1:IV1")) Is Nothing Then
Old_Value = Target.Value
End If
End Sub
[/vba]
В случае, если копируется-вставляется 1 ячейка - все в порядке.
В случае, если копируется-вставляется более 1 ячейки - появляется меседжбокс с текстом "Run-time Error `13`: Type mismatch". И после этого в данной книге макрос перестает работать, подсвечивая желтым часть кода:
[vba]
Код
If Target <> Old_Value Then
[/vba]

Автор - ArkaIIIa
Дата добавления - 06.06.2014 в 08:57
Rioran Дата: Пятница, 06.06.2014, 10:38 | Сообщение № 15
Группа: Авторы
Ранг: Ветеран
Сообщений: 903
Репутация: 290 ±
Замечаний: 0% ±

Excel 2013
ArkaIIIa, я попробовал кардинально другой подход.

В области А1:J10 (отгорожено серым в файле) вставляйте оптом и смотрите, как меняются подписи на серой панели.

[vba]
Код
Option Explicit
Public Stopper As Boolean

Private Sub Worksheet_Change(ByVal Target As Range)

Application.ScreenUpdating = False

Dim rngX As Range
Dim X As Long

Set rngX = Selection

If Not Intersect(rngX, Range("a1:j10")) Is Nothing And Stopper = False Then
     Stopper = True
     For X = 1 To rngX.Columns.Count
         rngX.Cells(1, X).Offset(11 - rngX.Cells(1, X).Row).Value = Now
     Next X
     Stopper = False
End If

Application.ScreenUpdating = True

End Sub
[/vba]
К сообщению приложен файл: Detection.xlsm (15.3 Kb)
 
Ответить
СообщениеArkaIIIa, я попробовал кардинально другой подход.

В области А1:J10 (отгорожено серым в файле) вставляйте оптом и смотрите, как меняются подписи на серой панели.

[vba]
Код
Option Explicit
Public Stopper As Boolean

Private Sub Worksheet_Change(ByVal Target As Range)

Application.ScreenUpdating = False

Dim rngX As Range
Dim X As Long

Set rngX = Selection

If Not Intersect(rngX, Range("a1:j10")) Is Nothing And Stopper = False Then
     Stopper = True
     For X = 1 To rngX.Columns.Count
         rngX.Cells(1, X).Offset(11 - rngX.Cells(1, X).Row).Value = Now
     Next X
     Stopper = False
End If

Application.ScreenUpdating = True

End Sub
[/vba]

Автор - Rioran
Дата добавления - 06.06.2014 в 10:38
ArkaIIIa Дата: Пятница, 06.06.2014, 11:03 | Сообщение № 16
Группа: Проверенные
Ранг: Ветеран
Сообщений: 894
Репутация: 115 ±
Замечаний: 0% ±

2010
Rioran
Если руками копирую - вставляю - всё хорошо. Если использую макрос вставки, вот этот:
[vba]
Код
    Dim r As Range
     Set r = Sheets(7).Rows(2).Find(Sheets(7).[B1].Text, , xlValues, xlWhole)
     If Not r Is Nothing Then
         Sheets(7).[B3:B140].Copy
         r.Offset(1).PasteSpecial Paste:=xlPasteValues
     End If
[/vba]
, то выдает ошибку Run-time Error 1004: Method `Intersect` of object`_Global`failed
Т.е. я само-собой меняю указанный в Вашем макросе диапазон "a1:j10" на свой "c28:aj140" и строку с 11 на 141, и при вставке руками - все нормально работает. А вот, когда юзаю макрос вставки - беда.
 
Ответить
СообщениеRioran
Если руками копирую - вставляю - всё хорошо. Если использую макрос вставки, вот этот:
[vba]
Код
    Dim r As Range
     Set r = Sheets(7).Rows(2).Find(Sheets(7).[B1].Text, , xlValues, xlWhole)
     If Not r Is Nothing Then
         Sheets(7).[B3:B140].Copy
         r.Offset(1).PasteSpecial Paste:=xlPasteValues
     End If
[/vba]
, то выдает ошибку Run-time Error 1004: Method `Intersect` of object`_Global`failed
Т.е. я само-собой меняю указанный в Вашем макросе диапазон "a1:j10" на свой "c28:aj140" и строку с 11 на 141, и при вставке руками - все нормально работает. А вот, когда юзаю макрос вставки - беда.

Автор - ArkaIIIa
Дата добавления - 06.06.2014 в 11:03
ArkaIIIa Дата: Пятница, 06.06.2014, 11:14 | Сообщение № 17
Группа: Проверенные
Ранг: Ветеран
Сообщений: 894
Репутация: 115 ±
Замечаний: 0% ±

2010
Rioran
Нет, Вы знаете, видимо конфликт не с макросом вставки. Попробовал сделать на новом файле - все нормально работает. Сейчас более расширенный пример попробую сделать и закинуть.
 
Ответить
СообщениеRioran
Нет, Вы знаете, видимо конфликт не с макросом вставки. Попробовал сделать на новом файле - все нормально работает. Сейчас более расширенный пример попробую сделать и закинуть.

Автор - ArkaIIIa
Дата добавления - 06.06.2014 в 11:14
Rioran Дата: Пятница, 06.06.2014, 11:24 | Сообщение № 18
Группа: Авторы
Ранг: Ветеран
Сообщений: 903
Репутация: 290 ±
Замечаний: 0% ±

Excel 2013
Если использую макрос
то выдает ошибку

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

[vba]
Код
Sub Data_Transition_2()

Range("m1:N3").Copy
Range("F2").Select
Worksheets("Tryal").Paste

End Sub
[/vba]
Файл с кнопкой для теста прилагаю.
К сообщению приложен файл: 2747659.xlsm (22.3 Kb)


Сообщение отредактировал Rioran - Пятница, 06.06.2014, 11:25
 
Ответить
Сообщение
Если использую макрос
то выдает ошибку

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

[vba]
Код
Sub Data_Transition_2()

Range("m1:N3").Copy
Range("F2").Select
Worksheets("Tryal").Paste

End Sub
[/vba]
Файл с кнопкой для теста прилагаю.

Автор - Rioran
Дата добавления - 06.06.2014 в 11:24
ArkaIIIa Дата: Пятница, 06.06.2014, 11:43 | Сообщение № 19
Группа: Проверенные
Ранг: Ветеран
Сообщений: 894
Репутация: 115 ±
Замечаний: 0% ±

2010
Rioran
Прикладываю файл. Голова кругом идет, не знаю, с чем связана ошибка :-(
Попробую еще раз по порядку описать ситуацию на примере файла из приложения.

- Есть файл (файл из приложения), в котороый по связям из другого файла подтягиваются данные. Файл исходник обновляется автоматически каждые полчаса. Таким образом, при каждом обновлении файла из примера раз в полчаса - он подтягивает обновленные данные.
- Есть 2 макроса, засунутых в один модуль:
Первый:
[vba]
Код
Sub Update_()
      Path_1 = "F:\STALE_APP_REPORT.xls"
      iFileDateTime_1 = FileDateTime(Path_1)
      Cells(27, 11) = iFileDateTime_1
      ActiveWorkbook.UpdateLink Name:= _
          "F:\STALE_APP_REPORT.xls", Type:=xlExcelLinks
[/vba]
Прописывает в ячейку K27 время последнего обновления файла-исходника, откуда тянутся данные в файл-пример.
Второй:
[vba]
Код
Dim r As Range
      Set r = Sheets(7).Rows(2).Find(Sheets(7).[B1].Text, , xlValues, xlWhole)
      If Not r Is Nothing Then
          Sheets(7).[B3:B140].Copy
          r.Offset(1).PasteSpecial Paste:=xlPasteValues
      End If
End Sub
[/vba]
Берет данные из ячеек столбца B3:B140, смотрит значение времени, указанное в ячейке B1, находит в строке 2 аналогичное время, и вставляет скопированные данные.
- Нужен третий макрос, который указывал бы строчкой ниже вставленных данных (т.е. 141-ой), дату и время этой вставки.

Ваш макрос (условно назовем его Макрос № 3) работает:
- Если копировать-вставлять руками
- Если копировать-вставлять макросом вставки (№2, из описания выше)
- Но вот если задействовано все 3 макроса - то возникает сообщение: Run-time Error 1004: Method `Intersect` of object`_Global`failed

Я не понимаю, на каком этапе возникает конфликт :-(
К сообщению приложен файл: 11.xlsm (24.4 Kb)


Сообщение отредактировал ArkaIIIa - Пятница, 06.06.2014, 11:44
 
Ответить
СообщениеRioran
Прикладываю файл. Голова кругом идет, не знаю, с чем связана ошибка :-(
Попробую еще раз по порядку описать ситуацию на примере файла из приложения.

- Есть файл (файл из приложения), в котороый по связям из другого файла подтягиваются данные. Файл исходник обновляется автоматически каждые полчаса. Таким образом, при каждом обновлении файла из примера раз в полчаса - он подтягивает обновленные данные.
- Есть 2 макроса, засунутых в один модуль:
Первый:
[vba]
Код
Sub Update_()
      Path_1 = "F:\STALE_APP_REPORT.xls"
      iFileDateTime_1 = FileDateTime(Path_1)
      Cells(27, 11) = iFileDateTime_1
      ActiveWorkbook.UpdateLink Name:= _
          "F:\STALE_APP_REPORT.xls", Type:=xlExcelLinks
[/vba]
Прописывает в ячейку K27 время последнего обновления файла-исходника, откуда тянутся данные в файл-пример.
Второй:
[vba]
Код
Dim r As Range
      Set r = Sheets(7).Rows(2).Find(Sheets(7).[B1].Text, , xlValues, xlWhole)
      If Not r Is Nothing Then
          Sheets(7).[B3:B140].Copy
          r.Offset(1).PasteSpecial Paste:=xlPasteValues
      End If
End Sub
[/vba]
Берет данные из ячеек столбца B3:B140, смотрит значение времени, указанное в ячейке B1, находит в строке 2 аналогичное время, и вставляет скопированные данные.
- Нужен третий макрос, который указывал бы строчкой ниже вставленных данных (т.е. 141-ой), дату и время этой вставки.

Ваш макрос (условно назовем его Макрос № 3) работает:
- Если копировать-вставлять руками
- Если копировать-вставлять макросом вставки (№2, из описания выше)
- Но вот если задействовано все 3 макроса - то возникает сообщение: Run-time Error 1004: Method `Intersect` of object`_Global`failed

Я не понимаю, на каком этапе возникает конфликт :-(

Автор - ArkaIIIa
Дата добавления - 06.06.2014 в 11:43
RAN Дата: Пятница, 06.06.2014, 12:19 | Сообщение № 20
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Ваш файлик как бы поломатый.
К сообщению приложен файл: 3474154.jpg (18.9 Kb)


Сообщение отредактировал RAN - Пятница, 06.06.2014, 12:21
 
Ответить
СообщениеВаш файлик как бы поломатый.

Автор - RAN
Дата добавления - 06.06.2014 в 12:19
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Отображение даты и времени изменения ячейки (Макросы/Sub)
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!