Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.94/18: Рейтинг темы: голосов - 18, средняя оценка - 4.94
Заблокирован

Курсы валют и удобный интерфейс (готовое решение)

15.01.2015, 21:15. Показов 4104. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Создав календарь,
я первым делом решил испытать его в своей деловой работе.
Так-что, делюсь новым готовым решением, окно для получение курсов валют



Код тоже напоминает те-же приемы что и в календаре, только там прикольный список
в котором пункты перепрыгивают наверх, если они были выбранны, тоесть из множества валют
при запуске формы, на первом месте будут стоять те, которые были выбранны в предыдущей сессии
получение тоже очень простое, достаточно нажать Ok, и всё

Ссылка.
Вложения
Тип файла: rar Курсы валют.rar (46.8 Кб, 97 просмотров)
2
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
15.01.2015, 21:15
Ответы с готовыми решениями:

Курсы валют
Добрый день Подскажите пожалуйста как реализовать данную задачу: нужно с сайта Национального банка скачивать курсы валют и хранить их...

Курсы валют
Здравствуйте. Есть таблица с курсами валют по отношению к основной валюте Гривня: USD 23 EUR 26 RUB 0.33 Как на основе этой...

Курсы валют
Локальные*минимумы*курсов*валюты* Создать*класс*A.*В*нем*два*статических*метода* static*List<Float>*localMins(float*currency)** ...

13
Заблокирован
16.01.2015, 19:41  [ТС]

Не по теме:

отдельное спасибо модераторам, в частности The trick,
который с пониманием отнесся ко мне, и отредактировал первый пост
признаюсь не спал всю ночь, и под утро начал уже делать ошибки
а правку сделать уже было нельзя.. одна минута на всё про всё..
к тому-же когда я пытался править в этот момент форум несколько раз написал
отказ и 404 ошибку, и я не успел, ну теперь всё позади и можно нормально поспать,
еще раз спасибо :sleep: :sleep: :sleep:



Добавлено через 7 часов 38 минут
Хотелось бы узнать мнения знатоков, в коде есть момент сохранения настроек
я конечно мог-бы этого не делать, ответьте хоть ктонибудь, как вы к этому относитесь
и целесообразно ли их хранить в реестре, или может быть в скрытом листе их хранить
ну скажем создовать при первой инициализации скрытый лист с уникальным названием
и забрасывать в ячейки коды настроек, сейчас в реестре выглядит примерно так
9-1[]10-1[]0-0[]2-0[]1-0 ... и тп, что скажете ?

Добавлено через 3 минуты
Цитата Сообщение от Night Ranger Посмотреть сообщение
9-1[]10-1[]0-0[]2-0[]1-0
надеюсь догадались, девятый пункт - Yes, десятый тоже Yes, нулевой -No

Добавлено через 3 минуты
Пояснение: например есть стартовый список, и число 9 пункт берёться относительно его

Добавлено через 3 часа 19 минут
Не знаю, уместно ли.. если комунибудь понадобиться разработать компонент
для построения диаграммы, или вывода графика по валютам и тп, пишите в личку
кстати, для себя я испытал уже возможность получать также золото и нефть.
0
 Аватар для Sasha_Smirnov
5562 / 1370 / 150
Регистрация: 08.02.2009
Сообщений: 4,109
Записей в блоге: 30
16.01.2015, 20:22
Вообще в ветке ВБА эксселистов не так и много (shanemac51, Teslenko_EA да ikki (любитель), ну ещё, может, Евгений С, так что, Night Ranger, можно и до весны прождать; какой там реестр!..

Я тексты обрабатываю, так Excel для меня такая игрушка для коммерческого директора (кабинет напротив).
2
es geht mir gut
 Аватар для SoftIce
11274 / 4760 / 1183
Регистрация: 27.07.2011
Сообщений: 11,439
16.01.2015, 20:26
Плохо, что кода нет на виду. Чтобы посмотреть нужно скачивать архив.
1
Заблокирован
16.01.2015, 20:28  [ТС]
Цитата Сообщение от SoftIce Посмотреть сообщение
Плохо, что кода нет на виду
сейчазз
0
 Аватар для Sasha_Smirnov
5562 / 1370 / 150
Регистрация: 08.02.2009
Сообщений: 4,109
Записей в блоге: 30
16.01.2015, 20:29
Цитата Сообщение от SoftIce Посмотреть сообщение
нужно скачивать архив
Ну прямо насосная станция необходима!
1
Заблокирован
16.01.2015, 20:31  [ТС]
Для пустой формы
Кликните здесь для просмотра всего текста
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
Option Explicit
'---------------------------------------------------------------------------------------
' Решение       : Курсы валют
' Дата и время  : 15 января 2015  20:49
' Автор         : Night Ranger
'                 Яндекс.Деньги - 410012757639478
'                 [email]Exingsteem@yandex.ru[/email]
'                 [url]https://www.cyberforum.ru/vba/[/url]
' Описание      : Этот пример демонстрирует как легко и просто можно обновить
'                 курсы валют, на любую дату в твоём листе, для этого нужна только пустая форма
'                 а в событии листа нужно только указать ячейки для размещения
'                 полученной информации. Вызываемая форма помнит свои размеры и имеет удобный интерфейс
'---------------------------------------------------------------------------------------
Const maxw& = 110 'Прямоугольник для списка
Const istart& = 5, jstart& = 5 'Стартовые точки
Const gap& = 5 'Разрыв между элементами
Const twip& = 18 'Прямоугольник для объектов
Const SetName = "CurVal" 'Имя для настройки
Const url = "http://www.cbr.ru/scripts/XML_daily.asp?date_req=", lsDel$ = "[]"
Const prom$ = _
"Ошибка загрузки, возможные причины:" & vbCrLf & _
"Нет соединения с интернетом" & vbCrLf & _
"Отсутствует компонент Microsoft XML (msxml.dll)"
Dim WithEvents lsbx As MSForms.ListBox
Dim WithEvents btOk As MSForms.CommandButton
Dim WithEvents btBack As MSForms.CommandButton
Dim WithEvents btDE As MSForms.CommandButton
 
Dim CVTitles$, url_request$, nodeList As Object, strDate$, bConnect As Boolean, IndxDE$
Dim DDoc As Object, a$(), aa$(), StartArr$(), i&, j&, iNext&, jNext&, LsSet$, v, w
Public CurentDate As Date 'Хранение установленной даты
Public ArrayValute As Variant 'Переменная списка полученных валют
Public Event ValuteSelect(ArrayValute As Variant) 'Событие после нажатия Ok
 
Private Function TextCaption$()
    TextCaption = "Курсы валют с запросом  на " & Format(CurentDate, "[$-FC22]d mmmm yyyy")
End Function
 
Private Sub btDE_Click()
    With lsbx
        a = Split(IndxDE, lsDel)
        For i = 0 To .ListCount - 1:
            .Selected(i) = IIf(.List(i) = StartArr(a(0)) Or .List(i) = StartArr(a(1)), 1, 0)
        Next
        lsbx_MouseUp 0, 0, 0, 0
        .ListIndex = 0
    End With
End Sub
 
Public Sub ShowCurVal( _
    Optional ByVal SetDate As Date, _
    Optional ByVal bUpdateTitles As Boolean)
    'ShowCurVal -Процедура вызова с параметрами
    'SetDate -Устанавливает дату запроса
    'bUpdateTitles -Устанавливает возможность обновить список названий валют
    CurentDate = IIf(CDbl(SetDate), SetDate, Date)
    If bUpdateTitles Then Call UpdateTitles
    Me.Caption = TextCaption
    Me.Show
End Sub
 
Private Function TrimDel$(ByVal Value$, Optional ByVal Del = lsDel)
    TrimDel = Mid$(Value, Len(Del) + 1)
End Function
 
Public Sub UpdateTitles()
    'Обновление названий валют
    On Error Resume Next: i = 0
    With DOMDocument: IndxDE = ""
        CVTitles = "": url_request = url & Format(CurentDate, "dd/mm/yyyy")
        bConnect = .Load(url_request)
        If bConnect = False Then MsgBox prom, 48: Unload Me
        For Each v In .selectNodes("*/Valute")
            With v.childNodes: CVTitles = CVTitles & lsDel & .Item(2).Text & " " & .Item(3).Text
                '
                'В этом месте запоминаются индексы в массиве доллара и евро
                '
                If .Item(1).Text = "USD" Or .Item(1).Text = "EUR" Then
                    IndxDE = IndxDE & lsDel & i
                End If: i = i + 1
            End With
        Next
        CVTitles = TrimDel(CVTitles)
        IndxDE = TrimDel(IndxDE)
        SaveSetting "Ms Office", SetName, "IndxDE", IndxDE
        SaveSetting "Ms Office", SetName, "CVTitles", CVTitles
    End With
End Sub
 
Private Sub btOk_Click()
    On Error Resume Next
    With lsbx: LsSet = "": v = ""
        For i = 0 To .ListCount - 1: For j = 0 To UBound(StartArr)
            If .List(i) = StartArr(j) Then LsSet = LsSet & lsDel & j & "-" & Abs(.Selected(i))
        Next j, i
        LsSet = TrimDel(LsSet): SaveSetting "Ms Office", SetName, "List", LsSet
        For i = 0 To .ListCount - 1: If .Selected(i) Then v = v & lsDel & .List(i)
        Next: If v = "" Then Exit Sub
        v = Split(Mid$(v, Len(lsDel) + 1), lsDel)
    End With
    With DOMDocument
        url_request = url & Format(CurentDate, "dd/mm/yyyy")
        bConnect = .Load(url_request)
        If bConnect = False Then MsgBox prom, 48: Exit Sub
        Set nodeList = .selectNodes("ValCurs")
        With nodeList.Item(0).CloneNode(True)
            strDate = "Курсы валют по состоянию на: " & .Attributes(0).Value
        End With
        For Each w In .selectNodes("*/Valute")
            For i = 0 To UBound(v)
                If InStr(1, w.Text, v(i), 1) Then strDate = strDate & lsDel & w.Text: Exit For
            Next
        Next: v = Split(strDate, lsDel)
    End With
    RaiseEvent ValuteSelect(v)
    Me.Hide
End Sub
 
Private Sub btBack_Click()
    a = Split(LsSet, lsDel)
    With lsbx: .Clear
        For i = 0 To UBound(a): aa = Split(a(i), "-")
            .AddItem StartArr(aa(0)): .Selected(i) = aa(1)
        Next
    End With
End Sub
 
Private Sub UserForm_Initialize()
    CurentDate = Date 'По умолчанию вставляется сегодняшняя
    iNext = istart: jNext = jstart
    Set lsbx = Me.Controls.Add("Forms.ListBox.1", "lsbx")
    Set btOk = Me.Controls.Add("Forms.CommandButton.1", "btOk")
    Set btBack = Me.Controls.Add("Forms.CommandButton.1", "btBack")
    Set btDE = Me.Controls.Add("Forms.CommandButton.1", "btDE")
    With lsbx
        .Move jNext, iNext, maxw * 2, maxw
        .ListStyle = fmListStyleOption
        .MultiSelect = fmMultiSelectMulti
        .Clear
        
        LsSet = GetSetting("Ms Office", SetName, "List", vbNullString)
        CVTitles = GetSetting("Ms Office", SetName, "CVTitles", vbNullString)
        IndxDE = GetSetting("Ms Office", SetName, "IndxDE", vbNullString)
        If Len(CVTitles) = 0 Or Len(IndxDE) = 0 Then UpdateTitles
        StartArr = Split(CVTitles, lsDel)
        If Len(LsSet) Then
            btBack_Click
        Else
            For Each v In StartArr: .AddItem v: Next
            btDE_Click
        End If
        iNext = iNext + .Height + gap
    End With
    
    With btOk
        .Move jNext, iNext
        .AutoSize = 1: .Caption = "Ok"
        .ControlTipText = "Запрос, сохранение и выход"
        jNext = jNext + .Width + gap
    End With
    With btBack
        .Move jNext, iNext
        .AutoSize = 1: .Caption = "Откатить"
        .ControlTipText = "К прежним настройкам"
        jNext = jNext + .Width + gap
    End With
    With btDE
        .Move jNext, iNext
        .AutoSize = 1: .Caption = "Только доллар и евро"
        jNext = jNext + .Width + gap
    End With
    iNext = iNext + btOk.Height + gap
    With Me: .Caption = TextCaption
        .Height = iNext + twip * 2
        If Application.Left > -100 Then
            .StartUpPosition = 0
            .Left = GetSetting("Ms Office", SetName, "Left", .Left)
            .Top = GetSetting("Ms Office", SetName, "Top", .Top)
            If .Left <= 0 Or .Left > (Application.Left + Application.Width - 100) Or _
            .Top <= 0 Or .Top > (Application.Top + Application.Height - 100) Then
                'Если сохраненная ранее позиция вышла за предел экрана
                .StartUpPosition = 2
            End If
        End If
    End With
End Sub
 
 
Private Sub lsbx_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    'Выделенные пункты перебрасываются вперёд
    With lsbx
        ReDim a(.ListCount * 2 - 1)
        For i = 0 To .ListCount - 1
            If .Selected(i) Then
                a(i) = .List(i)
            Else: a(.ListCount + i) = .List(i)
            End If
        Next: i = -1
        For j = 0 To UBound(a)
            If Len(a(j)) Then
                i = i + 1: .List(i) = a(j): .Selected(i) = j < .ListCount
            End If
        Next
    End With
End Sub
 
Private Property Get DOMDocument() As Object
    If DDoc Is Nothing Then Set DDoc = CreateObject("Msxml.DOMDocument"): DDoc.async = False
    Set DOMDocument = DDoc
End Property
 
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
    With Me 'Перед закрытием запомнить позицию
        SaveSetting "Ms Office", SetName, "Left", .Left
        SaveSetting "Ms Office", SetName, "Top", .Top
    End With
End Sub




Для листа, чтобы посмотреть как можно использовать, но это только один из вариантов
Кликните здесь для просмотра всего текста
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
Option Explicit
Dim WithEvents mCurVal As CurVal
Dim WithEvents mCalendar As Calendar
 
Private Sub CommandButton1_Click()
    Set mCurVal = CurVal
    CurVal.ShowCurVal Me.[a1]
End Sub
 
Private Sub CommandButton2_Click()
    Set mCalendar = Calendar
    Calendar.ShowCalendar Me.[a1]
End Sub
 
Private Sub mCalendar_DateSelect(ThisDate As Date)
    Me.[a1] = ThisDate
End Sub
 
Private Sub mCurVal_ValuteSelect(ArrayValute As Variant)
    Dim i&, j&
    j = 4
    With Me
        .Columns(j).ClearContents
        For i = 0 To UBound(ArrayValute)
            .Cells(i + 2, j) = ArrayValute(i)
        Next
    End With
End Sub
2
es geht mir gut
 Аватар для SoftIce
11274 / 4760 / 1183
Регистрация: 27.07.2011
Сообщений: 11,439
16.01.2015, 20:34
Цитата Сообщение от Sasha_Smirnov Посмотреть сообщение
Ну прямо насосная станция необходима!
Одно дело когда код перед глазами и никаких телодвижений делать не надо, а другое, когда надо скачивать архив, разархивировать и запустить проект (или открыть документ).
2
 Аватар для Sasha_Smirnov
5562 / 1370 / 150
Регистрация: 08.02.2009
Сообщений: 4,109
Записей в блоге: 30
16.01.2015, 20:39
SoftIce, я «не вам» съязвил: по нику перепутал с Суррогатом:
Цитата Сообщение от Surrogate Посмотреть сообщение
прошу прощения, да я код не смотрел! как не смотрела его и Эсмеральда.
Что до меня, то код выкладывать не люблю: не видно количества его просмотров.

Добавлено через 5 минут
Цитата Сообщение от SoftIce Посмотреть сообщение
разархивировать
Не удержусь: тут машина Тьюринга на 1 МВт как раз подойдёт.
2
Заблокирован
16.01.2015, 20:41  [ТС]
Цитата Сообщение от Sasha_Smirnov Посмотреть сообщение
Что до меня, то код выкладывать не люблю: не видно количества его просмотров.
А что до меня, так мне важнее увидеть что об этом пишут, пусть даже с критической
стороны, это еще больше дисциплтнирует, для SoftIce: код я выкладывал
просто пришлось исправить названия куры валют на курсы валют
правки делать и тп, поэтому пропросил The Trick -а убрать покамист..
0
 Аватар для Sasha_Smirnov
5562 / 1370 / 150
Регистрация: 08.02.2009
Сообщений: 4,109
Записей в блоге: 30
16.01.2015, 20:48
Цитата Сообщение от Night Ranger Посмотреть сообщение
куры валют
Вот в чём дело, а я, дурак, улыбался вашей надполитической шутке!

К трудностям разархивирования архивов:


(Источник: ru.wikipedia.org/wiki/Bombe)
1
Заблокирован
16.01.2015, 21:10  [ТС]
в архиве так-же календарь посвежее, ну поэтому и архив, чтобы заодно увидеть и его тоже

Добавлено через 4 минуты
Ограничения-же.. 100кб
вродебы форум программистов а ограничения по размерам файлов
как для детского сада

Добавлено через 15 минут
Цитата Сообщение от Sasha_Smirnov Посмотреть сообщение
а я, дурак, улыбался вашей надполитической шутке
Ну я хотел было оставить, но на форуме шутников мало, вы и еще пару человек
поэтому пришлось бы доказывать что это точно шутка была а не чтото еще..
0
Заблокирован
18.01.2015, 11:05  [ТС]
Ладно.. в принципе никому то что я выложил особо то и надо,
даже если это тема затеряется, я особо не расстроюсь, наоборот теперь жалею что показал
ко мне по другим каналам стучаться и просят решить буквально это-же,
и не замечают очевидного
меня аж бесит подобная невнимательность..
нет настроения еще чтото показывать
и больше стало появляться идей брать за это деньги.
0
Модератор
10048 / 3894 / 883
Регистрация: 22.02.2013
Сообщений: 5,847
Записей в блоге: 79
18.01.2015, 11:10
Цитата Сообщение от Night Ranger Посмотреть сообщение
в принципе никому то что я выложил особо то и надо
Курс валют
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.01.2015, 11:10
Помогаю со студенческими работами здесь

Курсы валют на Prolog
Здравствуйте! Не сочтите за наглость, а сочтите за безнадежность (скоро экзамен, разобраться во всем нет времени). Помогите решить задачи...

Курсы валют на Delphi
Здравствуйте! Не сочтите за наглость, а сочтите за безнадежность. Помогите решить задачу по Delphi: Надо написать программу: Фондовая...

Вытянуть курсы валют
Есть вот такой скрипт, который вытягивает курсы с сайта Центрального Банка России. Ка его можно переделать под Банк Республики...

Курсы условных валют в организации
Доброго времени суток уважаемые форумчане! Очень много начитался разных статей на тему: &quot;Как создать БД Обмен валюты&quot;, но никак...

Вытянуть с сайта курсы валют
приветствую. Есть пример кода вытягивающий данные валют с сайта нацбанка РФ, а мне надо с сайта нацбанка РБ. using System; using...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru