Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Сфера Microsoft » Microsoft Office (Word, Excel, Outlook и т.д.) » 2007 - Microsoft Excel - общие вопросы

Ответить
Настройки темы

Аватара для Pliomera

Технолог


Сообщения: 819
Благодарности: 117

Профиль | Отправить PM | Цитировать


Вложения
Тип файла: zip Книга1.zip
(10.6 Kb, 2 просмотров)

iam_alex, решение на VBA см. в приложенном файле. Выполнение макросов - разрешить в настройках безопасности. Вкратце: в модуль рабочего листа добавить следующий код:
Код: Выделить весь код
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Row = 15 And Target.Column = 3 Then
        Select Case Cells(15, 3).Value
            Case "Период1"
                Range(Cells(5, 3), Cells(9, 6)).Sort Range(Cells(5, 4), Cells(9, 4)), xlAscending
            Case "Период2"
                Range(Cells(5, 3), Cells(9, 6)).Sort Range(Cells(5, 5), Cells(9, 5)), xlAscending
            Case "Период3"
                Range(Cells(5, 3), Cells(9, 6)).Sort Range(Cells(5, 6), Cells(9, 6)), xlAscending
        End Select
        Range(Cells(5, 3), Cells(9, 3)).Copy
        Range(Cells(16, 3), Cells(20, 3)).PasteSpecial xlPasteValues
        Range(Cells(5, 3), Cells(9, 6)).Sort Range(Cells(5, 3), Cells(9, 3)), xlAscending
        Target.Activate
    End If
End Sub
Это сообщение посчитали полезным следующие участники:

Отправлено: 16:24, 21-08-2009 | #21


Пользователь


Сообщения: 121
Благодарности: 7

Профиль | Отправить PM | Цитировать


Добрый день. Есть документик в эксель, в нем некоторое множество листов. Нужно, чтобы на первом листе (допустим) в ячейке А1 отображалось содержимое ячейки А1 с одного из листов (второго, третьего и т.д.). Подразумевается что при наличии заполненной ячейки А1 на одном из листов, эту же ячейку на другом листе заполнять не будут!!!

Единственный вариант который пришел в голову это функция "или", но пока не получается ничего, подскажите кто что может?!

PS: в идеале, после создания формулы, первый лист надо вообще запретить редактировать (но при этом данные при редактировании других листов все равно автоматом должны отображаться на первой странице)

Отправлено: 17:03, 04-09-2009 | #22



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для Sionnain

Ветер


Сообщения: 588
Благодарности: 71

Профиль | Отправить PM | Цитировать


=Лист1!A1 Вместо Лист1 подставляете любой лист с ячейкой-источником данных

-------

Авторские обои участников форума | Лучшие темы оформления для Windows XP | Мой блог


Отправлено: 17:16, 04-09-2009 | #23


Аватара для Pliomera

Технолог


Сообщения: 819
Благодарности: 117

Профиль | Отправить PM | Цитировать


Цитата Sionnain:
=Лист1!A1 Вместо Лист1 подставляете любой лист с ячейкой-источником данных »
Насколько я понимаю это не решит проблему. Данные могут быть на любом листе, а отображаться должны на первом. Причем редактировать формулу нельзя. Количество листов заранее видимо тоже не известно.
Я бы решил задачу так: В редакторе VBA в модуль рабочей книги записал следующую процедуру:

Код: Выделить весь код
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Sheets("Лист1").Cells(Target.Row, Target.Column).Value = Target.Value
End Sub
Теперь при любом изменении ячеек на листах, кроме первого листа (имеющего имя Лист1) соответствующие изменения будут отображаться на первом листе.

P.S. Формул на первом листе не будет, только значения.
Это сообщение посчитали полезным следующие участники:

Отправлено: 17:44, 04-09-2009 | #24


Пользователь


Сообщения: 121
Благодарности: 7

Профиль | Отправить PM | Цитировать


Pliomera Огромное спасибо за помощь, данная штука работает.

можно попросить помочь чуток усовершенствовать?

1) Сделать так чтобы первый лист был заблокирован, но при этом на него могла производиться запись с остальных листов. На данный момент при блокировке листа при заполнении другого листа выскакивает ошибка о том что запись невозможна. может быть можно как то в код забить подстановку пароля?

2) Организовать какую нибудь проверочку на предмет того что определенная ячейка на первом листе заполнена, чтобы эксель выдавал сообщение и просил записать в другую ячейку?
поясню, например я заполнил ячейку А1 на втором листе, она автоматом откопировалась на первый лист, после чего я заполняю ячейку А1 на третьем листе, а эксель говорит мне что ячейка уже занята и предлагает перенести на другую ячейку. что нибудь в этом роде. А то на данный момент он переносит в эту ячейку то что я набираю на следующем листе, с заменой того что там было... это так сказать защита от дурака.

Отправлено: 11:30, 07-09-2009 | #25


Модератор


Moderator


Сообщения: 16855
Благодарности: 3248

Профиль | Сайт | Отправить PM | Цитировать


Цитата anatoly_neo:
1) Сделать так чтобы первый лист был заблокирован, но при этом на него могла производиться запись с остальных листов »
Перед записью на заблокированный лист введите в макрос функцию
Код: Выделить весь код
ActiveSheet.Unprotect
После записи, соответственно
Код: Выделить весь код
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
Только учтите, лист, с которого снимается защита, должен быть активным. Если вас это не устраивает, замените ActiveSheet на Worksheets("Название листа")

-------
При заполнении сведений о конфигурации компьютера не забудь поставить флажок: отображать - "Да"
-------------------------------------------------------------------------------------------
Ассоциация VirusNet - помощь и обучение борьбе с вирусами. Некоторые вопросы загрузки в моем блоге

Это сообщение посчитали полезным следующие участники:

Отправлено: 11:49, 07-09-2009 | #26


Пользователь


Сообщения: 121
Благодарности: 7

Профиль | Отправить PM | Цитировать


спасибо местным гуру за огромную помощь. осталось только второй пунктик про проверку забацать и усе

Отправлено: 15:59, 07-09-2009 | #27


Модератор


Moderator


Сообщения: 16855
Благодарности: 3248

Профиль | Сайт | Отправить PM | Цитировать


Как-то так
Код: Выделить весь код
Private Sub Worksheet_Change(ByVal Target As Range)
For Each c In Worksheets(1).Range(1, 100)
If c = "" Then c = Target.Value: Exit For
Next
End Sub

-------
При заполнении сведений о конфигурации компьютера не забудь поставить флажок: отображать - "Да"
-------------------------------------------------------------------------------------------
Ассоциация VirusNet - помощь и обучение борьбе с вирусами. Некоторые вопросы загрузки в моем блоге

Это сообщение посчитали полезным следующие участники:

Отправлено: 16:17, 07-09-2009 | #28



Компьютерный форум OSzone.net » Сфера Microsoft » Microsoft Office (Word, Excel, Outlook и т.д.) » 2007 - Microsoft Excel - общие вопросы

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Разное - Microsoft .NET Framework .:[ общие вопросы ]:. Captain Nemo Microsoft Windows 2000/XP 518 01-02-2018 10:46
Общие вопросы по коду Prisoner Вебмастеру 439 12-06-2015 16:22
Интернет - ICQ .:[ все вопросы ]:. Evil Программное обеспечение Windows 712 06-09-2012 17:32
Прочее - Сервер общие вопросы амброзий Сетевые технологии 7 15-07-2008 11:33




 
Переход