Работаю в excel 2007, в скриптах особо не шарю, но разбираюсь быстро. Помогите, суть вопроса следующая: Оператор имеет файлик excel только для чтения, открывает его, вносит данные на листе "Заявка", запускает скрипт скрывающий пустые строки на других 3 листах в книге. Далее координатор проверяет и вносит исправления и пересылает мне, я вношу данные в свою рабочую программу.
Нам надо сделать так, чтобы после запуска скрипта скрывающего пустые строки - на листе "Заявка" включилось "выделение исправлений"(можно и на всю книгу, не имеет значения) и важно чтобы была пометка с временем исправления. Таким образом, когда файл приходит ко мне, у меня будет видно, что было создано изначально, а что исправлено координатором. какие строки мне надо вставить в скрипт?
если хоть как то поможет вот все мои скрипты(писал сам не смейтесь, главное работает)
[vba]
Код
Sub MAKROS() MAKROS1 MAKROS2 MAKROS3 End Sub
Sub MAKROS1() Sheets("Пекарня").Activate Dim i& For i = 3 To 60 If Range("D" & i).Value = "0" Then Rows(i).EntireRow.Hidden = True Else: Rows(i).EntireRow.Hidden = False ' End If Next End Sub
Sub MAKROS2() Sheets("Кулинария").Activate Dim i& For i = 3 To 100 If Range("D" & i).Value = "0" Then Rows(i).EntireRow.Hidden = True Else: Rows(i).EntireRow.Hidden = False ' End If Next End Sub
Sub MAKROS3() Sheets("Кондитерская").Activate Dim i& For i = 3 To 90 If Range("D" & i).Value = "0" Then Rows(i).EntireRow.Hidden = True Else: Rows(i).EntireRow.Hidden = False ' End If Next End Sub
[/vba]
P.S. не критично, но всё же хотелось бы, чтобы не возникло кофликтов, если координатор повторно запустит скрипт скрывающий пустые строки после внесения своих изменений. (если с этим проблемы, тогда выведу оператору отдельную кнопку для запуска скрипта на выделение исправлений)
когда включено выделение исправлений изменять скрипты нельзя, но запускать уже созданные можно, проверял.
Работаю в excel 2007, в скриптах особо не шарю, но разбираюсь быстро. Помогите, суть вопроса следующая: Оператор имеет файлик excel только для чтения, открывает его, вносит данные на листе "Заявка", запускает скрипт скрывающий пустые строки на других 3 листах в книге. Далее координатор проверяет и вносит исправления и пересылает мне, я вношу данные в свою рабочую программу.
Нам надо сделать так, чтобы после запуска скрипта скрывающего пустые строки - на листе "Заявка" включилось "выделение исправлений"(можно и на всю книгу, не имеет значения) и важно чтобы была пометка с временем исправления. Таким образом, когда файл приходит ко мне, у меня будет видно, что было создано изначально, а что исправлено координатором. какие строки мне надо вставить в скрипт?
если хоть как то поможет вот все мои скрипты(писал сам не смейтесь, главное работает)
[vba]
Код
Sub MAKROS() MAKROS1 MAKROS2 MAKROS3 End Sub
Sub MAKROS1() Sheets("Пекарня").Activate Dim i& For i = 3 To 60 If Range("D" & i).Value = "0" Then Rows(i).EntireRow.Hidden = True Else: Rows(i).EntireRow.Hidden = False ' End If Next End Sub
Sub MAKROS2() Sheets("Кулинария").Activate Dim i& For i = 3 To 100 If Range("D" & i).Value = "0" Then Rows(i).EntireRow.Hidden = True Else: Rows(i).EntireRow.Hidden = False ' End If Next End Sub
Sub MAKROS3() Sheets("Кондитерская").Activate Dim i& For i = 3 To 90 If Range("D" & i).Value = "0" Then Rows(i).EntireRow.Hidden = True Else: Rows(i).EntireRow.Hidden = False ' End If Next End Sub
[/vba]
P.S. не критично, но всё же хотелось бы, чтобы не возникло кофликтов, если координатор повторно запустит скрипт скрывающий пустые строки после внесения своих изменений. (если с этим проблемы, тогда выведу оператору отдельную кнопку для запуска скрипта на выделение исправлений)
когда включено выделение исправлений изменять скрипты нельзя, но запускать уже созданные можно, проверял.a2katD
a2katD, для наибольшей ясности постановки задачи, рекомендую приложить файл-пример. Пока могу предложить, к тем ячейкам, в которые были внесены изменения создавать примечания и в нём оставлять предыдущий вариант, или несколько предыдущих вариантов с датой правки.
a2katD, для наибольшей ясности постановки задачи, рекомендую приложить файл-пример. Пока могу предложить, к тем ячейкам, в которые были внесены изменения создавать примечания и в нём оставлять предыдущий вариант, или несколько предыдущих вариантов с датой правки.Roman777
Много чего не знаю!!!!
Сообщение отредактировал Roman777 - Суббота, 16.12.2017, 12:14
Пока могу предложить, к тем ячейкам, в которые были внесены изменения создавать примечания и в нём оставлять предыдущий вариант, или несколько предыдущих вариантов с датой правки.
вроде звучит неплохо, на дело пока не могу представить что это значит =) тут еще главное, чтобы ячейки как то помечались, что примечание есть.
Пока могу предложить, к тем ячейкам, в которые были внесены изменения создавать примечания и в нём оставлять предыдущий вариант, или несколько предыдущих вариантов с датой правки.
вроде звучит неплохо, на дело пока не могу представить что это значит =) тут еще главное, чтобы ячейки как то помечались, что примечание есть.a2katD
a2katD, Вот что-то типа такого я предлагаю: Есть публичная переменная [vba]
Код
Type m mas2() As String End Type Public tabl() As m
[/vba] При открывании книги у Вас срабатывает макрос в модуле книги:
[vba]
Код
Private Sub Workbook_Open() Dim sh As Worksheet, TWB As Workbook Dim i_n As Long Dim k As Long Dim cel() As String Set TWB = ThisWorkbook ReDim tabl(1) For Each sh In TWB.Sheets If sh.Name = "Лист2" Then k = k + 1 ReDim Preserve tabl(k) i_n = sh.UsedRange.Find("*", , xlValues, xlWhole, xlByRows, xlPrevious).Row ReDim cel(4, i_n) For i = 1 To i_n For j = 1 To 4 'записываем до 4-го столбца cel(j, i) = sh.Cells(i, j) Next j Next i tabl(k).mas2 = cel End If Next sh End Sub
[/vba]
В данном случае, макрос записывает все данные из листа 2 в переменную tabl (которая является массивом массивов значений ячеек) Ну а далее по запуску Вашего скрывающего макроса
[vba]
Код
Sub MAKROS1() Sheets("Лист2").Activate Dim i&, j&, i_n& i_n = ActiveSheet.UsedRange.Find("*", , xlValues, xlWhole, xlByColumns, xlPrevious).Row For i = 3 To i_n For j = 1 To 4 If tabl(1).mas2(j, i) <> ActiveSheet.Cells(i, j) Then With ActiveSheet.Cells(i, j) If .Comment Is Nothing Then .AddComment End If .Comment.Visible = True .Comment.Text Text:="Предыдущая версия: " & Chr(10) & """" & tabl(1).mas2(j, i) & """" & Chr(10) & Now 'Дата будет считаться по исполнению этого макроса .Comment.Shape.DrawingObject.Height = 35 .Comment.Shape.DrawingObject.Width = 100 End With End If Next j If Range("D" & i).Value = "0" Then Rows(i).EntireRow.Hidden = True Else: Rows(i).EntireRow.Hidden = False ' End If Next End Sub
[/vba]
вы проверяете данные на листе 2 с записанными в переменную m, и если не сходятся, добавляете комментарии (с, ато мб комментарии уже были). [p.s.]Возможно я не правильно понял... и не с того листа данные записывал изначально)[/p.s.]
a2katD, Вот что-то типа такого я предлагаю: Есть публичная переменная [vba]
Код
Type m mas2() As String End Type Public tabl() As m
[/vba] При открывании книги у Вас срабатывает макрос в модуле книги:
[vba]
Код
Private Sub Workbook_Open() Dim sh As Worksheet, TWB As Workbook Dim i_n As Long Dim k As Long Dim cel() As String Set TWB = ThisWorkbook ReDim tabl(1) For Each sh In TWB.Sheets If sh.Name = "Лист2" Then k = k + 1 ReDim Preserve tabl(k) i_n = sh.UsedRange.Find("*", , xlValues, xlWhole, xlByRows, xlPrevious).Row ReDim cel(4, i_n) For i = 1 To i_n For j = 1 To 4 'записываем до 4-го столбца cel(j, i) = sh.Cells(i, j) Next j Next i tabl(k).mas2 = cel End If Next sh End Sub
[/vba]
В данном случае, макрос записывает все данные из листа 2 в переменную tabl (которая является массивом массивов значений ячеек) Ну а далее по запуску Вашего скрывающего макроса
[vba]
Код
Sub MAKROS1() Sheets("Лист2").Activate Dim i&, j&, i_n& i_n = ActiveSheet.UsedRange.Find("*", , xlValues, xlWhole, xlByColumns, xlPrevious).Row For i = 3 To i_n For j = 1 To 4 If tabl(1).mas2(j, i) <> ActiveSheet.Cells(i, j) Then With ActiveSheet.Cells(i, j) If .Comment Is Nothing Then .AddComment End If .Comment.Visible = True .Comment.Text Text:="Предыдущая версия: " & Chr(10) & """" & tabl(1).mas2(j, i) & """" & Chr(10) & Now 'Дата будет считаться по исполнению этого макроса .Comment.Shape.DrawingObject.Height = 35 .Comment.Shape.DrawingObject.Width = 100 End With End If Next j If Range("D" & i).Value = "0" Then Rows(i).EntireRow.Hidden = True Else: Rows(i).EntireRow.Hidden = False ' End If Next End Sub
[/vba]
вы проверяете данные на листе 2 с записанными в переменную m, и если не сходятся, добавляете комментарии (с, ато мб комментарии уже были). [p.s.]Возможно я не правильно понял... и не с того листа данные записывал изначально)[/p.s.]Roman777
пока вставить в мой файл не получилось, ругается на значение tabl, но у меня есть Ваш файл в котором это срабатывает, а значить на выходных(в будни работы оч много) поковыряюсь, разберусь какое значение за что отвечает, и думаю пойму как это применить в моем случае =)
пока вставить в мой файл не получилось, ругается на значение tabl, но у меня есть Ваш файл в котором это срабатывает, а значить на выходных(в будни работы оч много) поковыряюсь, разберусь какое значение за что отвечает, и думаю пойму как это применить в моем случае =)a2katD