Здравствуйте! На основании файла "macros", создаются отдельные "калькуляторы" (по шаблону) по каждому подразделению Ежемесячно столбцы в "macros" меняются и приходится переписывать ссылки на столбцы. Например, Range("bd" & otrab(k, 1) + 18).Value = Workbooks(file2).Sheets("svod").Range("u" & i).Value, т.е из столбца"u" переставить данные в "калькулятор" в столбец "bd". И так как вид файла постоянно меняется, приходится переписывать номера столбцов вручную. Если, например, в файле "macros" в строке 7 написать контрольные значения ("C16", "E16", "F16" и т.д.) или кодовые слова, как поменять имена столбцов на адреса в этих ячейках с кодовыми словами, и в дальнейшем только менять эти кодовые слова, чтобы не переписывать макрос? Заранее благодарю!!
Здравствуйте! На основании файла "macros", создаются отдельные "калькуляторы" (по шаблону) по каждому подразделению Ежемесячно столбцы в "macros" меняются и приходится переписывать ссылки на столбцы. Например, Range("bd" & otrab(k, 1) + 18).Value = Workbooks(file2).Sheets("svod").Range("u" & i).Value, т.е из столбца"u" переставить данные в "калькулятор" в столбец "bd". И так как вид файла постоянно меняется, приходится переписывать номера столбцов вручную. Если, например, в файле "macros" в строке 7 написать контрольные значения ("C16", "E16", "F16" и т.д.) или кодовые слова, как поменять имена столбцов на адреса в этих ячейках с кодовыми словами, и в дальнейшем только менять эти кодовые слова, чтобы не переписывать макрос? Заранее благодарю!!bob3
в файле "macros" в строке 7 написать контрольные значения ("C16", "E16", "F16" и т.д.)
Так все-таки, номера столбцов или имена. Если номера то, почему в строке 7 их не прописать, если имена C, E, F то, почему с номером строки 16? Если правильно понял, то наверное так. в В7 пишем имя колонки- bd, в макросе задаем переменную [vba]
Код
Dim k1$ k1=Range("B7")
[/vba]А в коде [vba]
Код
Range("bd" & ko + 18).Value = Workbooks(file2).Sheets("svod").Range("u" & i).Value
[/vba]"bd" меняем на переменную k1 [vba]
Код
Range(k1 & ko + 18).Value = Workbooks(file2).Sheets("svod").Range("u" & i).Value
[/vba]и так для остальных колонок. Меняя в В7 имя колонки, в коде через переменную оно тоже будет меняться. Наверное так.
в файле "macros" в строке 7 написать контрольные значения ("C16", "E16", "F16" и т.д.)
Так все-таки, номера столбцов или имена. Если номера то, почему в строке 7 их не прописать, если имена C, E, F то, почему с номером строки 16? Если правильно понял, то наверное так. в В7 пишем имя колонки- bd, в макросе задаем переменную [vba]
Код
Dim k1$ k1=Range("B7")
[/vba]А в коде [vba]
Код
Range("bd" & ko + 18).Value = Workbooks(file2).Sheets("svod").Range("u" & i).Value
[/vba]"bd" меняем на переменную k1 [vba]
Код
Range(k1 & ko + 18).Value = Workbooks(file2).Sheets("svod").Range("u" & i).Value
[/vba]и так для остальных колонок. Меняя в В7 имя колонки, в коде через переменную оно тоже будет меняться. Наверное так.Wasilich
Сообщение отредактировал Wasilic - Вторник, 17.02.2015, 18:50
Прошу прощения, если что-то не понимаю или плохо объясняю, я пока только учусь. В макросе прописала адреса столбцов, например: Range("c" & otrab(k, 1) + 18).Value = Workbooks(file2).Sheets("svod").Range("b" & i).Value Это значит, что на основании макроса у меня создается отдельный файл "калькулятор", в столбец "с" которого "фио" из столбца "b" в файле "macros" и также аналогично проставляются таб.номер,оклад и т.д. Файл "macros" в ежемесячном режиме меняется, т.е. колонки могут быть в других местах, а не как в этом месяце. Поэтому хотелось бы в файле "macros", например в строке №7 прописать какие-нибудь значения, которые бы соответствовали колонкам "фио", "таб.номер" и т.д., чтобы в дальнейшем, просто эти значения ставить напротив столбцов с новым расположением, но не менять в макросе соответствие. Как-то так...
Фрагмент:
[vba]
Код
Windows(file2).Activate Sheets("svod").Activate Range("b9").Select Range(ActiveCell, ActiveCell.End(xlDown)).Select counter5 = Selection.Rows.Count k = 1 For i = 9 To counter5 + 8 If Range("b" & i).Text Like "*акансия" Or Range("f" & i).Value = 0 Then 'MsgBox ("") i = i + 1 End If Range("g9").Select prova = Right(Range("g" & i).Text, 4) If k = 0 Then Windows(file3).Activate ActiveWorkbook.SaveAs p1 & Left(file3, Len(file3) - 4) & "_" & prova & ".xls" file3 = ActiveWorkbook.Name
[/vba] [moder]Оформляйте коды тегами (кнопка #)[/moder]
Прошу прощения, если что-то не понимаю или плохо объясняю, я пока только учусь. В макросе прописала адреса столбцов, например: Range("c" & otrab(k, 1) + 18).Value = Workbooks(file2).Sheets("svod").Range("b" & i).Value Это значит, что на основании макроса у меня создается отдельный файл "калькулятор", в столбец "с" которого "фио" из столбца "b" в файле "macros" и также аналогично проставляются таб.номер,оклад и т.д. Файл "macros" в ежемесячном режиме меняется, т.е. колонки могут быть в других местах, а не как в этом месяце. Поэтому хотелось бы в файле "macros", например в строке №7 прописать какие-нибудь значения, которые бы соответствовали колонкам "фио", "таб.номер" и т.д., чтобы в дальнейшем, просто эти значения ставить напротив столбцов с новым расположением, но не менять в макросе соответствие. Как-то так...
Фрагмент:
[vba]
Код
Windows(file2).Activate Sheets("svod").Activate Range("b9").Select Range(ActiveCell, ActiveCell.End(xlDown)).Select counter5 = Selection.Rows.Count k = 1 For i = 9 To counter5 + 8 If Range("b" & i).Text Like "*акансия" Or Range("f" & i).Value = 0 Then 'MsgBox ("") i = i + 1 End If Range("g9").Select prova = Right(Range("g" & i).Text, 4) If k = 0 Then Windows(file3).Activate ActiveWorkbook.SaveAs p1 & Left(file3, Len(file3) - 4) & "_" & prova & ".xls" file3 = ActiveWorkbook.Name
Смотрите макрос test в приложенном файле. Вариант конечно не самый надежный, но, при условии, что имена в шапке не будут меняться должен работать. Принцип действия: ищу в шапке ячейку со значением ФИО и запоминаю ее столбик, в примере сделала только для двух строчек (ФИО и табельный номер), результат на листе 2.
В Вашем рабочем макросе нужно будет добавить (это только для ФИО и таб номера, для остальных - по аналогии) [vba]
Попробуйте поменять столбики местами, результат на листе 2 должен быть неизменным.
Смотрите макрос test в приложенном файле. Вариант конечно не самый надежный, но, при условии, что имена в шапке не будут меняться должен работать. Принцип действия: ищу в шапке ячейку со значением ФИО и запоминаю ее столбик, в примере сделала только для двух строчек (ФИО и табельный номер), результат на листе 2.
В Вашем рабочем макросе нужно будет добавить (это только для ФИО и таб номера, для остальных - по аналогии) [vba]
[/vba] Почему бы не обойтись без этих трёх строк, селектов, активаций и stroka? Чем не нравится i? А по фрагменту так это вообще лишнее...
Вместо сотни otrab(k, 1) + 18 можно поместить это в одну переменную и использовать её - и короче, и быстрее. Workbooks(file2).Sheets("svod") тоже можно написать один раз, используя with.
[/vba] Почему бы не обойтись без этих трёх строк, селектов, активаций и stroka? Чем не нравится i? А по фрагменту так это вообще лишнее...
Вместо сотни otrab(k, 1) + 18 можно поместить это в одну переменную и использовать её - и короче, и быстрее. Workbooks(file2).Sheets("svod") тоже можно написать один раз, используя with.Hugo