Добрый день. Помогите, пожалуйста, написать макрос. Есть массив данных с формулами (n строк и m столбцов). Необходимо чтобы все эти данные сохранялись рядом как значение накопительно (т.е. данные меняются каждый день => кол-во сохраненных массивов должно равняться кол-ву дней изменений). При этом, необходимо чтобы макрос автоматически срабатывал при закрытии файла, но только если появились новые значения
Добрый день. Помогите, пожалуйста, написать макрос. Есть массив данных с формулами (n строк и m столбцов). Необходимо чтобы все эти данные сохранялись рядом как значение накопительно (т.е. данные меняются каждый день => кол-во сохраненных массивов должно равняться кол-ву дней изменений). При этом, необходимо чтобы макрос автоматически срабатывал при закрытии файла, но только если появились новые значенияAdelia
вам нужно помочь чтобы вы смогли написать макрос? тогда в вашем файле нет даже попытки это сделать или вам нужно чтобы кто нибудь написал для вас макрос?
условия несколько не четкие, что вы хотите получить массив всегда одинокового размера? или он меняется?
если задан определенный массив, сохраняете его по определенному адресу, который будет всегда постоянен при закрытии сравниваете данные из массива и данные из адреса, где лежат последние сохраненные, если есть изменения добавляете в накопительную часть и заменяете последние данные
вам нужно помочь чтобы вы смогли написать макрос? тогда в вашем файле нет даже попытки это сделать или вам нужно чтобы кто нибудь написал для вас макрос?
условия несколько не четкие, что вы хотите получить массив всегда одинокового размера? или он меняется?
если задан определенный массив, сохраняете его по определенному адресу, который будет всегда постоянен при закрытии сравниваете данные из массива и данные из адреса, где лежат последние сохраненные, если есть изменения добавляете в накопительную часть и заменяете последние данныеK-SerJC
Условия: - необходимо наличие листа с именем "АрхивТаблицыДляСравнения+" - в макросе заполнить константы своими значениями - первый раз все значения попадут в ваше накопление изменений. Последующие разы будут только изменения
[vba]
Код
Private Sub Workbook_BeforeClose(Cancel As Boolean) Const R = 3 'строка начала таблица изменений Const R_end = 5 'строка конца таблицы изменения Const C = 1 'Столбец начала таблица изменений Const C_end = 2 'Столбец конца таблицы изменения Const C_arhiv = 3 'Столбец начала таблицы архива изменения
Dim S As Worksheet, S1 As Worksheet, T, T1, i%, y%, Ind As Boolean, R_arhiv_end%
Set S = Sheets("Sheet1") Set S1 = Sheets("АрхивТаблицыДляСравнения+") 'супер скрытый лист для хранения таблицы после последнего закрытия файла
For i = 1 To UBound(T, 1) Ind = False For y = 1 To UBound(T, 2) If T(i, y) <> T1(i, y) Then Ind = True Next y If Ind Then R_arhiv_end = S.Cells(S.Rows.Count, C_arhiv).End(xlUp).Row + 1 S.Range(S.Cells(R_arhiv_end, C_arhiv), S.Cells(R_arhiv_end, C_arhiv + C_end - C)).Value = _ S.Range(S.Cells(R + i - 1, C), S.Cells(R + i - 1, C_end)).Value End If Next i S1.Range(S1.Cells(R, C), S1.Cells(R_end, C_end)).Value = T S1.Visible = 2 End Sub
[/vba]
Мои грабли на этот вопрос.
Условия: - необходимо наличие листа с именем "АрхивТаблицыДляСравнения+" - в макросе заполнить константы своими значениями - первый раз все значения попадут в ваше накопление изменений. Последующие разы будут только изменения
[vba]
Код
Private Sub Workbook_BeforeClose(Cancel As Boolean) Const R = 3 'строка начала таблица изменений Const R_end = 5 'строка конца таблицы изменения Const C = 1 'Столбец начала таблица изменений Const C_end = 2 'Столбец конца таблицы изменения Const C_arhiv = 3 'Столбец начала таблицы архива изменения
Dim S As Worksheet, S1 As Worksheet, T, T1, i%, y%, Ind As Boolean, R_arhiv_end%
Set S = Sheets("Sheet1") Set S1 = Sheets("АрхивТаблицыДляСравнения+") 'супер скрытый лист для хранения таблицы после последнего закрытия файла
For i = 1 To UBound(T, 1) Ind = False For y = 1 To UBound(T, 2) If T(i, y) <> T1(i, y) Then Ind = True Next y If Ind Then R_arhiv_end = S.Cells(S.Rows.Count, C_arhiv).End(xlUp).Row + 1 S.Range(S.Cells(R_arhiv_end, C_arhiv), S.Cells(R_arhiv_end, C_arhiv + C_end - C)).Value = _ S.Range(S.Cells(R + i - 1, C), S.Cells(R + i - 1, C_end)).Value End If Next i S1.Range(S1.Cells(R, C), S1.Cells(R_end, C_end)).Value = T S1.Visible = 2 End Sub
devilkurs, спасибо, но к меня работает только если Private Sub Workbook_BeforeClose(Cancel As Boolean) заменить на Sub Workbook_BeforeClose() и тольео через кнопку
devilkurs, спасибо, но к меня работает только если Private Sub Workbook_BeforeClose(Cancel As Boolean) заменить на Sub Workbook_BeforeClose() и тольео через кнопкуAdelia