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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.12.2010, 11:18   #11
vikttur
Участник клуба
 
Регистрация: 16.05.2010
Сообщений: 1,249
По умолчанию

Картинку забыл
Вложения
Тип файла: rar Новый рисунок.rar (6.8 Кб, 14 просмотров)
vikttur вне форума Ответить с цитированием
Старый 27.12.2010, 11:37   #12
3BEPOBOY
Пользователь
 
Регистрация: 27.12.2010
Сообщений: 82
По умолчанию

vikttur
я немного не понял.
Это вы описали как сохранить данные в книгу?
Меня больше интересует вопрос как отследить, внес полльзователь изменения в файл или нет
3BEPOBOY вне форума Ответить с цитированием
Старый 27.12.2010, 11:51   #13
vikttur
Участник клуба
 
Регистрация: 16.05.2010
Сообщений: 1,249
По умолчанию

Цитата:
Сообщение от 3BEPOBOY Посмотреть сообщение
viktturЭто вы описали как сохранить данные в книгу?
Да, не так понял вопрос.
vikttur вне форума Ответить с цитированием
Старый 27.12.2010, 11:53   #14
VictorM
Старожил
 
Аватар для VictorM
 
Регистрация: 15.05.2008
Сообщений: 2,058
По умолчанию

Цитата:
И еще вопрос, подскажите пожалуйста какой-нибудь сайт
Посмотрите вот ЗДЕСЬ
Конкретные вопросы, такие же ответы.
Есть и справочник и примеры.
Все лаконично, без "воды"
Можно еще посмотреть ЗДЕСЬ и ЗДЕСЬ
"Дайте людям рыбы, и вы накормите их на весь день; научите их ловить рыбу - и вы накормите их на всю жизнь"
"Большое спасибо" - Z261597841314, R208907249777, U447361470499
VictorM вне форума Ответить с цитированием
Старый 27.12.2010, 12:59   #15
3BEPOBOY
Пользователь
 
Регистрация: 27.12.2010
Сообщений: 82
По умолчанию

VictorM спасибо.
А все-таки подскажите кто-нибудь принцип решения моей задачи. Просто я пока ничего умнее чем при помощи UsedRange копировать весь документ в массив или скрытый лист, а затем сравнивать до тех пор пока не обнаружится различие не придумал. Но уверен, есть более короткий метод, так как при выходе Excel спрашивает сохранять изменения в файле или нет, а значит он где-то хранит эту информацию!
3BEPOBOY вне форума Ответить с цитированием
Старый 27.12.2010, 17:42   #16
3BEPOBOY
Пользователь
 
Регистрация: 27.12.2010
Сообщений: 82
По умолчанию

Вот так вобщем корявенько наклепал черновое решение своей задачи
Цитата:
Private Sub Auto_Open()
Filecopy

End Sub

Private Sub Auto_Close()
RecordJournal

End Sub

Private Sub Filecopy()

Dim XL1 As Workbook

Set XL1 = ActiveWorkbook

Dim Sheet1 As Excel.Worksheet

Dim Sheet2 As Excel.Worksheet

Set Sheet1 = XL1.Worksheets(1)

'Set Sheet2 = XL1.Worksheets(2)

Set Sheet2 = XL1.Worksheets.Add()

Sheet2.Name = "Буферный лист" 'Присваиваем ему имя "Буферный лист"

Sheet2.Visible = False

'Sheet2.Visible = True

Dim Nach As String
Dim i, k, m, j As Integer

For i = 1 To 10
For j = 1 To 10
Nach = Sheet1.Cells(i, j).Value
If Nach <> "" Then Exit For
Next
Nach = Sheet1.Cells(i, j).Value
If Nach <> "" Then
k = i
m = j
Exit For
End If
Next

Sheet1.UsedRange.Copy _
Destination:=Sheet2.Cells(k, m)

End Sub

Private Sub RecordJournal()

Dim XL1 As Workbook

Set XL1 = ActiveWorkbook

Dim Sheet1 As Excel.Worksheet

Dim Sheet2 As Excel.Worksheet

Set Sheet1 = XL1.Worksheets(1)

Set Sheet2 = XL1.Worksheets(2)

Dim CC, RC As Integer

CC = Sheet1.UsedRange.Columns.Count

RC = Sheet1.UsedRange.Rows.Count

Dim DA As Boolean
Dim Nach, A1, A2, N As String
Dim i, k, m, j, x, y As Integer

DA = False

For i = 1 To 10
For j = 1 To 10
Nach = Sheet1.Cells(i, j).Value
If Nach <> "" Then Exit For
Next
Nach = Sheet1.Cells(i, j).Value
If Nach <> "" Then
k = i
m = j
Exit For
End If
Next

x = k + RC - 1
y = m + CC - 1

For i = k To x
For j = m To y
A1 = Sheet1.Cells(i, j).Value
A2 = Sheet2.Cells(i, j).Value

If A1 <> A2 Then
DA = True
Exit For
End If
Next
If A1 <> A2 Then Exit For
Next


N = App.EXEName
MsgBox N



If DA Then

Dim nResult As Integer
nResult = MsgBox("ВЫ АКТУАЛИЗИРОВАЛИ ФАЙЛ?", vbYesNo, "Окно сообщения")

Dim XL2 As Workbook
Set XL2 = Workbooks.Open("C:\VBA\SOM.xls")
XL2.Worksheets(1).Visible = True
XL2.Worksheets(1).Cells(2, 2).Value = Environ("username")
XL2.Worksheets(1).Cells(2, 4).Value = Now

If nResult = 6 Then
XL2.Worksheets(1).Cells(2, 3).Value = "ДА"
Else
XL2.Worksheets(1).Cells(2, 3).Value = "НЕТ"
End If

XL2.Save
XL2.Close

End If


Application.DisplayAlerts = False

XL1.Sheets("Буферный лист").Delete

End Sub
Предложите что получше, буду благодарен)

И еще, что-то найти не могу, как дернуть из запущенного Excel файла его название или хотя бы полный путь?))

Последний раз редактировалось 3BEPOBOY; 27.12.2010 в 23:27.
3BEPOBOY вне форума Ответить с цитированием
Старый 27.12.2010, 19:38   #17
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Цитата:
Вот так вобщем корявенько наклепал черновое решение своей задачи
Это точно, а я подумал зайчики зеленые привиделись.

Какой примерно диапазон контроля,меня интересует максимальное количество столбцов.От этого будет зависеть алгоритм
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 27.12.2010, 23:27   #18
3BEPOBOY
Пользователь
 
Регистрация: 27.12.2010
Сообщений: 82
По умолчанию

Цитата:
Сообщение от doober Посмотреть сообщение
Это точно, а я подумал зайчики зеленые привиделись.

Какой примерно диапазон контроля,меня интересует максимальное количество столбцов.От этого будет зависеть алгоритм
я хотел [QUOTE] выделить, но не нашел кнопки, торопился и писать в облом было. Воткнул цвет, вышло классно
Все работает замечательно, правда на маленьких файлах, большие я не смотрел еще. Насколько мне хватает знаний, обращение вида sheets.cells постоянно через сервер идет ил что-то вроде того, поэтому тормозить просто обязано мне кажется. На первой странице EducatedFool с Range наколдовал в своем коде, я вот думаю ничего похожего нельзя замутить? Или хотя бы запись в вариантный массив наверное должна ускорить процесс. Правда как в VBA с памятью я не в курсе пока, впрочем не допетрил и как синтаксически выразить запись диапазона ячеек в массив

doober
файл может быть абсолютно любой. Ну если брать по максимуму... Я больше 100*800 ячеек не видел. Смысл в том что их много, лежат они на открытой папке на компе у начальника, ему их актуализируют сотрудники периодически. А он баклан, не умеет в проводнике сортировать их по дате, сидит и мучается отслеживая изменения.

А вообще я доволен собой, до вчера VBA в глаза не видел, а сегодня уже 1ый макрос готов

Последний раз редактировалось 3BEPOBOY; 27.12.2010 в 23:40.
3BEPOBOY вне форума Ответить с цитированием
Старый 27.12.2010, 23:56   #19
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Как делать запись в лог.
Например изменились ячейки I25,A300,AC111-Лист1,книга Пример.xls
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 28.12.2010, 08:42   #20
3BEPOBOY
Пользователь
 
Регистрация: 27.12.2010
Сообщений: 82
По умолчанию

doober
достаточно изменения одной ячейки. Любой) Я вот еще подумал что у меня для одного листа только все работает, надо наверное их кол-во подсчитать сперва...
И все же главный вопрос на повестке дня - как имя файла дернуть. Что-то гуглю битых пол часа, найти не могу. Нашел только полный адрес, но неохото мутить очередную корявую процедуру по извлечению оттуда названия

Последний раз редактировалось 3BEPOBOY; 28.12.2010 в 08:53.
3BEPOBOY вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как зафиксировать куки? mogul82 PHP 2 22.12.2008 22:28
Как использовать некоторый Active X в своей HTML странице Stilet JavaScript, Ajax 2 08.05.2008 18:13
как зафиксировать ячейку в таблице? Deceased PHP 1 08.05.2008 18:08
Как зафиксировать ячейку? gait HTML и CSS 4 22.11.2007 18:14