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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.11.2021, 12:28   #1
Bufallo81
Пользователь
 
Регистрация: 30.08.2021
Сообщений: 36
По умолчанию Задача Exel VBA

Добрый день. Помогите пожалуйста написать правильно код. Выдает ошибку.
Есть программа для расчета электроэнергии за сутки с вводом данных в пустые ячейки соответственно. Расчет ведет правильно (написан самый первый код вверху).Как сделать так чтоб программа сохраняла введенные данные, т.е. мы вводим значения в ячейки "Настоящее" и "Предыдущее". Надо сделать так, чтоб при закрытии программы и листа EXEL или самой книги, значения сохранялись, причем при открытии программы, данные из колонки "Настоящее" перенеслись в колонку "Предыдущее". Тем самым пользователь может вводить при следующем открытии программы только в колонку "Настоящее" новые значения, а в колонке "Предыдущее" значения должны быть сохранены уже.
Вот скрины
https://ibb.co/xgBRnkB
https://ibb.co/Z2rCXhF

И код
Код:
Private Sub CommandButton1_Click()
    Me.TextBox25 = CDbl(Me.TextBox1 - Me.TextBox2) * 20000 + CDbl(Me.TextBox3 - Me.TextBox4) * 20000 + CDbl(Me.TextBox5 - Me.TextBox6) * 20000 + CDbl(Me.TextBox7 - Me.TextBox8) * 20000 + CDbl(Me.TextBox9 - Me.TextBox10) * 8000 + CDbl(Me.TextBox11 - Me.TextBox12) * 8000 + CDbl(Me.TextBox13 - Me.TextBox14) * 8000 + CDbl(Me.TextBox15 - Me.TextBox16) * 8000 + CDbl(Me.TextBox17 - Me.TextBox18) * 20000 + CDbl(Me.TextBox19 - Me.TextBox20) * 20000 + CDbl(Me.TextBox21 - Me.TextBox22) * 20000 + CDbl(Me.TextBox23 - Me.TextBox24) * 20000
    TextBox25 = CInt(Me.TextBox25)
End Sub

Private Sub UserForm_Close()
    Range("H1") = TextBox2
    Range("H2") = TextBox4
    Range("H3") = TextBox6
    Range("H4") = TextBox8
    Range("H5") = TextBox10
    Range("H6") = TextBox12
    Range("H7") = TextBox14
    Range("H8") = TextBox16
    Range("H9") = TextBox18
    Range("H10") = TextBox20
    Range("H11") = TextBox22
    Range("H12") = TextBox24
End Sub

Private Sub UserForm_Activate()
    Me.TextBox2 = Range("G1")
    Me.TextBox4 = Range("G2")
    Me.TextBox6 = Range("G3")
    Me.TextBox8 = Range("G4")
    Me.TextBox10 = Range("G5")
    Me.TextBox12 = Range("G6")
    Me.TextBox14 = Range("G7")
    Me.TextBox16 = Range("G8")
    Me.TextBox18 = Range("G9")
    Me.TextBox20 = Range("G10")
    Me.TextBox22 = Range("G11")
    Me.TextBox24 = Range("G12")
End Sub

Последний раз редактировалось Bufallo81; 28.11.2021 в 13:39.
Bufallo81 вне форума Ответить с цитированием
Старый 28.11.2021, 16:29   #2
Bufallo81
Пользователь
 
Регистрация: 30.08.2021
Сообщений: 36
По умолчанию

Вот файл,нужно вводить числа в полях дробные через запятую. Если поле пустое-значит ноль.
Вложения
Тип файла: rar Расчет электроэнергии.rar (21.0 Кб, 5 просмотров)
Bufallo81 вне форума Ответить с цитированием
Старый 28.11.2021, 20:47   #3
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

при закрытии формы - сохранять значения левых контролов, при открытии - выводить сохраненку в правые контролы
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 29.11.2021, 08:47   #4
Bufallo81
Пользователь
 
Регистрация: 30.08.2021
Сообщений: 36
По умолчанию

А как в коде это осуществить?
Bufallo81 вне форума Ответить с цитированием
Старый 29.11.2021, 09:01   #5
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

кодом VBA
Код:
Private Sub UserForm_Close()
    Range("H1") = TextBox1
...........
Private Sub UserForm_Activate()
     TextBox2 = Range("H1")
............
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 29.11.2021, 13:07   #6
Bufallo81
Пользователь
 
Регистрация: 30.08.2021
Сообщений: 36
По умолчанию

Не выходит, не правильно считает, и не сохраняет. Нужно чтоб программа кроме запоминания и еще выводила визуально значения в колонке "Предыдущее" введенные ранее при запуске программы.
Bufallo81 вне форума Ответить с цитированием
Старый 03.12.2021, 09:54   #7
Matyr
Новичок
Джуниор
 
Регистрация: 03.12.2021
Сообщений: 2
По умолчанию

Меняем

sub UserForm_Close полностью на:
Код:
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
    Range("H1") = TextBox1
    Range("H2") = TextBox3
    Range("H3") = TextBox5
    Range("H4") = TextBox7
    Range("H5") = TextBox9
    Range("H6") = TextBox11
    Range("H7") = TextBox13
    Range("H8") = TextBox15
    Range("H9") = TextBox17
    Range("H10") = TextBox19
    Range("H11") = TextBox21
    Range("H12") = TextBox23
End Sub

В самой книге пишем:
Код:
Private Sub Workbook_Open()
    Columns("H").Copy Columns("G")
    Columns("H").ClearContents
End Sub
Вложения
Тип файла: 7z Расчет электроэнергии.7z (21.3 Кб, 1 просмотров)
Matyr вне форума Ответить с цитированием
Старый 04.12.2021, 10:52   #8
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

Код:
' и вот такую простынь
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
    Range("H1") = TextBox1
    Range("H2") = TextBox3
    Range("H3") = TextBox5
    Range("H4") = TextBox7
    Range("H5") = TextBox9
    Range("H6") = TextBox11
    Range("H7") = TextBox13
    Range("H8") = TextBox15
    Range("H9") = TextBox17
    Range("H10") = TextBox19
    Range("H11") = TextBox21
    Range("H12") = TextBox23
End Sub
'
' замените на цикл в одну строку
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
  Dim r&
  For r = 1 To 12
    Cells(r, 8) = Me.Controls("TextBox" & r * 2 - 1)
  Next
End Sub
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 04.12.2021, 14:11   #9
Bufallo81
Пользователь
 
Регистрация: 30.08.2021
Сообщений: 36
По умолчанию

Цитата:
Сообщение от Matyr Посмотреть сообщение
Меняем

sub UserForm_Close полностью на:
Код:
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
    Range("H1") = TextBox1
    Range("H2") = TextBox3
    Range("H3") = TextBox5
    Range("H4") = TextBox7
    Range("H5") = TextBox9
    Range("H6") = TextBox11
    Range("H7") = TextBox13
    Range("H8") = TextBox15
    Range("H9") = TextBox17
    Range("H10") = TextBox19
    Range("H11") = TextBox21
    Range("H12") = TextBox23
End Sub

В самой книге пишем:
Код:
Private Sub Workbook_Open()
    Columns("H").Copy Columns("G")
    Columns("H").ClearContents
End Sub
Спасибо Вам огромное, все работает.
Bufallo81 вне форума Ответить с цитированием
Старый 04.12.2021, 15:18   #10
Bufallo81
Пользователь
 
Регистрация: 30.08.2021
Сообщений: 36
По умолчанию

Только не много не понятно, где вторая часть кода, в какой самой книге посмотреть?
Bufallo81 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Диаграммы в VBA Exel sasha27 Microsoft Office Excel 0 22.04.2019 20:47
Срочно! Спасибо VBA Exel! MrMorozko Помощь студентам 1 21.02.2014 06:29
Интерполяция в Exel на VBA Nastyy Помощь студентам 0 14.04.2013 23:49
Exel 2007 и VBA systemmind Microsoft Office Excel 3 19.02.2009 18:03