Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 23.12.2008, 17:28   #11
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Цитата:
Сообщение от EducatedFool Посмотреть сообщение
Пробуй:
Игорь это в модуль надо вставлять, а мне надо в ЭтаКнига
Т. е. я ввел на 1 листе данные, переключился на лист15 и что бы там, уже все было
Смущает
Function СуммаЯчеек(ByVal ......
Хотя можна так:
Run "ЗаполнениеЛиста15"

Последний раз редактировалось valerij; 23.12.2008 в 17:31.
valerij вне форума
Старый 23.12.2008, 17:35   #12
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,858
По умолчанию

Цитата:
Игорь это в модуль надо вставлять, а мне надо в ЭтаКнига
Какая разница? Вставляй куда хочешь.

Цитата:
Смущает Function СуммаЯчеек(ByVal ......
А что тебя смущает? Работает, и ладно
Тебе надо было решить задачу - я её решил. А что там в макросе написано - это, по сути, не так уж и важно.

Цитата:
Т. е. я ввел на 1 листе данные, переключился на лист15 и что бы там, уже все было
В этом случае надо на лист15 программно в ячейки записывать не значения сумм, а формулы.
Можно сделать, но потребуется время...
Неужели тебе сложно на листе 15 поставить кнопочку, которая будет запускать макрос ЗаполнениеЛиста15 ?


Можно сделать еще проще:
В модуль кода Листа15 вставь следующую процедуру:
Код:
Private Sub Worksheet_Activate()
    ЗаполнениеЛиста15
End Sub
Тогда каждый раз при активации Листа15 все значения в нём будут пересчитываться.

PS: Вместо Run "ЗаполнениеЛиста15" можно писать ЗаполнениеЛиста15 - разницы никакой.

Последний раз редактировалось EducatedFool; 23.12.2008 в 17:42.
EducatedFool вне форума
Старый 23.12.2008, 17:46   #13
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Цитата:
Сообщение от EducatedFool Посмотреть сообщение
Тогда каждый раз при активации Листа15 все значения в нём будут пересчитываться.
Да, но это все видно, как бы правильно сказать, ну переключил на 15 лист а там визуальный пересчет идет.

Так получилось нормально, ни чего не видно
В конце программы в ЭтаКнига поставил:
Run "ЗаполнениеЛиста15"

Забыл, что это нигде в лит. не нашел
IIf
valerij вне форума
Старый 23.12.2008, 17:50   #14
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,858
По умолчанию

Цитата:
ну переключил на 15 лист а там визуальный пересчет идет
Ну, если тебе так хочется, могу добавить в макрос тормоза
Тогда результат будет формироваться не за долю секунды, а за полчаса.
Все изменения сможешь визуально отслеживать

А я-то, наивный, думал, что чем быстрее, тем лучше...
EducatedFool вне форума
Старый 23.12.2008, 17:56   #15
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Цитата:
Сообщение от EducatedFool Посмотреть сообщение
А я-то, наивный, думал, что чем быстрее, тем лучше...
Игорь ты меня не понял, уже все ОК, сейчас проверяю, где то ошибка в сложении, разные показания до и после.
Обясни, что это за оператор
IIF
valerij вне форума
Старый 23.12.2008, 18:12   #16
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,858
По умолчанию

Цитата:
Обясни, что это за оператор IIF
Всю необходимую информацию легко найти при помощи яндекса...
Достаточно ввести запрос VB оператор IIF

Почитай здесь, ну или здесь.

Цитата:
где то ошибка в сложении, разные показания до и после
Я забыл, что в ячейках с числами могут встречаться пробелы...
Замени строку v = Worksheets(List).Range(ra).Value: If IsNumeric(v) Then СуммаЯчеек = СуммаЯчеек + Val(v)
на строку v = trim$(Worksheets(List).Range(ra).Va lue): If IsNumeric(v) Then СуммаЯчеек = СуммаЯчеек + Val(v)
EducatedFool вне форума
Старый 23.12.2008, 18:23   #17
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Цитата:
Сообщение от EducatedFool Посмотреть сообщение
Замени строку
Вот тут ошибка
cv = СуммаЯчеек(1, 13, "f" & CStr(41 + 51 * (i - 7)))
MsgBox cv ' Показывает 22, а надо 22,9 -это если Д3, Л1(ЛЕН), ввести 10

Последний раз редактировалось valerij; 23.12.2008 в 20:06.
valerij вне форума
Старый 23.12.2008, 19:00   #18
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,858
По умолчанию

Нашел причину.

Замени СуммаЯчеек = СуммаЯчеек + val(v) на СуммаЯчеек = СуммаЯчеек + CDbl(v)

И убери макрос в модуле Листа15:
Код:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
    Range("C40").Select
    Dim cSum2 As Long, cSum3 As Long
    With Application
        .EnableEvents = False
        For i = 7 To 37
            cSum2 = cSum2 + Cells(i, 2)
            cSum3 = cSum3 + Cells(i, 3)
        Next i
        Cells(38, 2) = cSum2
        Cells(38, 3) = cSum3
        Cells(39, 2) = Cells(38, 2) + Cells(38, 3)
        Cells(39, 3) = Cells(39, 2) - Cells(37, 4)
        Run "Счет"
        .EnableEvents = True
    End With
End Sub
Зачем тебе этот макрос? При запуске моего макроса происходят сотни изменений листа 15, и каждый раз запускается этот обработчик...


Или перепиши мой макрос в таком виде:
Код:
Sub ЗаполнениеЛиста15()
    Application.EnableEvents = False
    Dim sh As Worksheet: Set sh = ThisWorkbook.Worksheets(15)
    sh.Range("d7:i37").ClearContents    ' очистка от прежних данных

    For i = 7 To 37
        cv = СуммаЯчеек(1, 13, "f" & CStr(41 + 51 * (i - 7)))
        If i > 7 Then sh.Cells(i, 4) = sh.Cells(i - 1, 4) + cv Else sh.Cells(i, 4) = cv    ' пишем значение в столбец D
        sh.Cells(i, 5) = cv    ' пишем значение в столбец E

        cv = СуммаЯчеек(1, 8, "h" & CStr(44 + 51 * (i - 7))) + СуммаЯчеек(9, 13, "h" & CStr(41 + 51 * (i - 7)))
        If i > 7 Then sh.Cells(i, 6) = sh.Cells(i - 1, 6) + cv Else sh.Cells(i, 6) = cv    ' пишем значение в столбец F
        sh.Cells(i, 7) = cv    ' пишем значение в столбец G

        cv = СуммаЯчеек(1, 8, "i" & CStr(44 + 51 * (i - 7))) + СуммаЯчеек(9, 13, "i" & CStr(42 + 51 * (i - 7)))
        If i > 7 Then sh.Cells(i, 8) = sh.Cells(i - 1, 8) + cv Else sh.Cells(i, 8) = cv    ' пишем значение в столбец H
        sh.Cells(i, 9) = cv    ' пишем значение в столбец I
    Next i
    Application.EnableEvents = True
End Sub

Последний раз редактировалось EducatedFool; 23.12.2008 в 19:03.
EducatedFool вне форума
Старый 23.12.2008, 19:13   #19
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Цитата:
Сообщение от EducatedFool Посмотреть сообщение
Или перепиши мой макрос в таком виде:
Все ОК!!!!!!!!!!!!!!!!

Последний раз редактировалось valerij; 23.12.2008 в 20:53.
valerij вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сложить матрицу... Zibiv Помощь студентам 7 19.05.2009 15:51
Как сложить текстовые значения? Сергей Яковлевич Microsoft Office Excel 7 10.06.2008 16:57
сложить 2 числа vanDJ Microsoft Office Access 3 20.12.2007 08:57
как сложить 2 числа andrey4623 Общие вопросы C/C++ 9 13.12.2007 17:42
Как сложить 2 значения из разных БД по ключу Nitti БД в Delphi 1 04.05.2007 12:58