|
Компьютерный форум OSzone.net » Сфера Microsoft » Microsoft Office (Word, Excel, Outlook и т.д.) » 2007 - [решено] Внешние связи Excel 2007 |
|
|
2007 - [решено] Внешние связи Excel 2007
|
Новый участник Сообщения: 6 |
Профиль | Отправить PM | Цитировать Возникла следующая проблема:
Существует основной фаил "1" Excel (в виде календаря) и ежедневно формирующийся фаил "2" (в виде цифровой таблицы), задача сделать связь, обновляющую данные в календаре из ежедневных фаилов "2", соответствующих конкретному дню месяца. Сложность заключается в том что при обновлении связей, например при закрытии фаила "1" или открытии фаила "2", данные по предыдущим дням обнуляются. Вопрос: Есть ли способ задать условие, при выполнении которого будет обновляться конкретная группа ячеек ? или может другой хитрый способ Существующая связь построена с использованием: =СЦЕПИТЬ(ссылка на фаил "2") =ЕСЛИОШИБКА(ДВССЫЛ(А1);0) |
|
Отправлено: 16:49, 31-05-2013 |
Модератор Сообщения: 16848
|
Профиль | Сайт | Отправить PM | Цитировать |
------- Отправлено: 20:18, 31-05-2013 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 6
|
Профиль | Отправить PM | Цитировать Вот кусок файла "1" при одном открытом файле "2", как видно на скрине данные из сегодняшнего файла "обнулены". пока у меня мысли работают в направлении переместить данные из КВ1 в КВ3 при значении КВ1 не равном нулю, но в тоже время так что бы при обнулении КВ1 данные в КВ3 сохранялись, в таком случае не придется постоянно удерживать связь с по сути однодневными файлами
|
Отправлено: 10:03, 01-06-2013 | #3 |
Модератор Сообщения: 16848
|
Профиль | Сайт | Отправить PM | Цитировать В любом случае вам нужно либо вручную, либо макросом разрывать связь и сохранять только значения, а не формулы.
|
------- Отправлено: 10:15, 01-06-2013 | #4 |
Новый участник Сообщения: 6
|
Профиль | Отправить PM | Цитировать Вобщем в конечном итоге, на скорую руку, получилось сделать следующим макросом:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) Application.ScreenUpdating = False Sheets("Календарь").Select If Range("V27") = 0 Then GoTo Lastline Columns("V:Z").Select Selection.Copy Columns("AJ:AN").Select Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _ xlNone, SkipBlanks:=False, Transpose:=False Application.CutCopyMode = False Lastline: Application.ScreenUpdating = True End Sub |
|
Отправлено: 17:45, 01-06-2013 | #5 |
Модератор Сообщения: 16848
|
Профиль | Сайт | Отправить PM | Цитировать |
------- Последний раз редактировалось okshef, 01-06-2013 в 20:24. Отправлено: 20:04, 01-06-2013 | #6 |
Новый участник Сообщения: 6
|
Профиль | Отправить PM | Цитировать не знаю, я только вчера узнал что такое VBA, делал при помощи "Запись макроса" потом корректировал
спасибо за поправку : ) |
Отправлено: 09:43, 02-06-2013 | #7 |
Модератор Сообщения: 16848
|
Профиль | Сайт | Отправить PM | Цитировать Цитата Vison:
Еще одно замечание. Для сокращения кода параметры, которые и так установлены по-умолчанию, вписывать не обязательно. Я вот о чем: .PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _ xlNone, SkipBlanks:=False, Transpose:=False |
|
------- Отправлено: 11:43, 02-06-2013 | #8 |
Новый участник Сообщения: 6
|
Профиль | Отправить PM | Цитировать Цитата okshef:
вобщем вот чего в итоге получилось: Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) Application.ScreenUpdating = False Sheets("Календарь").Select Dim X1, X2, Y1, Y2 X1 = "V" X2 = "Z" X11 = "AJ" X21 = "AN" Y1 = 27 Y2 = 33 110: If Range(X1 & Y1) = "x" Then GoTo 120 Range(X1 & Y1 & ":" & X2 & Y2).Copy Range(X11 & Y1 & ":" & X21 & Y2).PasteSpecial Paste:=xlPasteValuesAndNumberFormats Application.CutCopyMode = False 120: If Y1 >= 523 Then GoTo 130 Y1 = Y1 + 16 Y2 = Y2 + 16 GoTo 110 130: Range("A1").Select Application.ScreenUpdating = True End Sub |
|
Последний раз редактировалось okshef, 02-06-2013 в 20:39. Отправлено: 15:31, 02-06-2013 | #9 |
Модератор Сообщения: 16848
|
Профиль | Сайт | Отправить PM | Цитировать Vison, я, конечно, не корифей VBA, но не понимаю, зачем использовать переменные вместо констант. Как вам такой код:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) Application.ScreenUpdating = False With Sheets("Календарь") For irow = 27 To 523 Step 16 If .Range("V" & irow) <> "x" Then .Range("V" & irow).Resize(7, 5).Copy .Range("AJ" & irow).PasteSpecial (xlPasteValuesAndNumberFormats) End If Next .Range("A1").Select End With Application.ScreenUpdating = True End Sub |
------- Последний раз редактировалось okshef, 02-06-2013 в 22:07. Отправлено: 20:37, 02-06-2013 | #10 |
|
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
2007 - Вылетает Excel 2007 | chebyrek | Microsoft Office (Word, Excel, Outlook и т.д.) | 6 | 02-04-2013 08:46 | |
2007 - примечания excel 2007 | dreammk | Microsoft Office (Word, Excel, Outlook и т.д.) | 3 | 24-04-2012 20:45 | |
2007 - excel 2007 диаграммы | forest66 | Microsoft Office (Word, Excel, Outlook и т.д.) | 2 | 21-12-2011 08:25 | |
2007 - Текст в Excel 2007 | jazzanova | Microsoft Office (Word, Excel, Outlook и т.д.) | 5 | 12-04-2011 22:25 | |
V. 2007 - [решено] Не приходят внешние письма Exchange 2007 | workprobe | Microsoft Exchange Server | 10 | 16-07-2010 16:24 |
|