powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / объявление объектной переменной
15 сообщений из 40, страница 2 из 2
объявление объектной переменной
    #33733680
Tommy1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в строке
set me.lst=me.list1
выходит сообщение об ошибке

method or data member not found
...
Рейтинг: 0 / 0
объявление объектной переменной
    #33733685
Tommy1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
до перехода в другую процедуру дело не дошло )), при загрузке формы вышло сообщение об ошибке
...
Рейтинг: 0 / 0
объявление объектной переменной
    #33733696
Tommy1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
на строке set me.lst=me.list1 выходит сообщение об ошибке method or data member not found
...
Рейтинг: 0 / 0
объявление объектной переменной
    #33733775
Melkiades
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы можете свой код выложить? А еще лучше - проект.
...
Рейтинг: 0 / 0
объявление объектной переменной
    #33734263
Фотография Magnus23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да уж. Тут ни FAQ не поможет, ни F1. :)


А зачем, собственно, передавать обьект в процедуру? И вообще зачем там обьектаная переменная? В любом случае это будет та же ссылка на тот же обьект.

Если нужно обратится к контролу на форме из модуля формы, так и пбращайтесь бапрямую. Область видимости позволяет. В чем проблема-то?
Ниче не понимаю.

Magnus
...
Рейтинг: 0 / 0
объявление объектной переменной
    #33734436
Фотография HandKot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Magnus23 А зачем, собственно, передавать обьект в процедуру? И вообще зачем там обьектаная переменная? В любом случае это будет та же ссылка на тот же обьект.
Если нужно обратится к контролу на форме из модуля формы, так и пбращайтесь бапрямую. Область видимости позволяет. В чем проблема-то?
Ниче не понимаю.
Это можно испльзовать в том случае, когда надо сделать однотипные действия с кучей однотипных объектов.


Tommy1 на строке set me.lst=me.list1 выходит сообщение об ошибке method or data member not found
все правильно. В вашем случае "lst" - это переменная. а не метод обэекта "Me" и надо писать так
Код: plaintext
set lst=me.list1
...
Рейтинг: 0 / 0
объявление объектной переменной
    #33734663
Tommy1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
именно так я делаю, но при прохождении строки

set Lst=Me.List1

значение Me.List1="", соответственно и Lst="" и List1 не заполняется, хотя нигде не выходит сообщение об ошибке
...
Рейтинг: 0 / 0
объявление объектной переменной
    #33734705
Melkiades
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Эх... при прохождении этой строки ткните правой педалью мыши на переменную Lst и выберите Add watch. Это так сложно сделать?
...
Рейтинг: 0 / 0
объявление объектной переменной
    #33734737
TIKO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Что именно тебе нжно взять и запихнуть
из List1 в lst

Private Sub Form_Load()
Dim obj As Object
Set obj = List1
Debug.Print obj.Name
Debug.Print obj.Font.Name
End Sub

Melkiades показал что ему нужно вывести имя объетка и имя шрифта

With Me.lst
.Clear
.AddItem "Item 1"
.AddItem "Item 2"
.AddItem "Item 3"

.ListIndex = 1

End With

Konst_One показал как добавить в объект значение

Вопрос смысл создания объект? или ваш код в студию
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
объявление объектной переменной
    #35752673
kurtizANKA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сорри, что реанимирую такую древнюю тему, но вопрос состоит в следующем.
У меня есть на форме 3 группы однотипных (внутри группы) контролов (одна группа комбо, две текст). При изменении любого из этих контролов запускается процедура типа:

Sub CalcSumChange()
Dim maxAdd As Double
Dim maxTake As Double
Dim minChange As Double


maxAdd = txtSumAdd.Value
maxTake = txtSumTaking.Value
minChange = Worksheets("Параметры счетов").Range("g23").Value

'выполнение проверки сумм пополнения / снятия условиям
'присвоение "знака" движения сумм по счету
If cbx1 = "Пополнение" And Len(txtSum1) > 0 Then
If Abs(txtSum1.Value) > maxAdd Then
txtSum1.Value = Format(Abs(maxAdd), "standard")
MsgBox "Сумма пополнения не должна превышать " & Format(Abs(maxAdd), "standard")
ElseIf Abs(txtSum1.Value) < minChange Then
MsgBox "Минимальная сумма пополнения " & Format(minChange, "standard")
txtSum1.Value = Format(minChange, "standard")
Else: txtSum1.Value = Format(Abs(txtSum1), "standard")
End If
ElseIf Len(cbx1) > 0 And Len(txtSum1) > 0 Then
If Abs(txtSum1.Value) > maxTake Then
txtSum1.Value = Format(-Abs(maxTake), "standard")
MsgBox "Сумма cнятия не должна превышать " & Format(Abs(maxTake), "standard")
ElseIf Abs(txtSum1.Value) < minChange Then
MsgBox "Минимальная сумма снятия " & Format(minChange, "standard")
txtSum1.Value = Format(-minChange, "standard")
Else: txtSum1.Value = Format(-Abs(txtSum1), "standard")
End If
Else: txtSum1.Value = Format(0, "standard")
End If

If cbx2 = "Пополнение" And Len(txtSum2) > 0 Then
If Abs(txtSum2.Value) > maxAdd Then
txtSum2.Value = Format(Abs(maxAdd), "standard")
MsgBox "Сумма пополнения не должна превышать " & Format(Abs(maxAdd), "standard")
ElseIf Abs(txtSum2.Value) < minChange Then
MsgBox "Минимальная сумма пополнения " & Format(minChange, "standard")
txtSum2.Value = Format(minChange, "standard")
Else: txtSum2.Value = Format(Abs(txtSum2), "standard")
End If
ElseIf Len(cbx2) > 0 And Len(txtSum2) > 0 Then
If Abs(txtSum2.Value) > maxTake Then
txtSum2.Value = Format(-Abs(maxTake), "standard")
MsgBox "Сумма cнятия не должна превышать " & Format(Abs(maxTake), "standard")
ElseIf Abs(txtSum2.Value) < minChange Then
MsgBox "Минимальная сумма снятия " & Format(minChange, "standard")
txtSum2.Value = Format(-minChange, "standard")
Else: txtSum2.Value = Format(-Abs(txtSum2), "standard")
End If
Else: txtSum2.Value = Format(0, "standard")
End If

If cbx3 = ..... 'и так для всех 6 комбобоксов и текстбоксов
End If

txtTotalSumChange.Value = Format(CDbl(txtSum1) + CDbl(txtSum2) + CDbl(txtSum3) + CDbl(txtSum4) + CDbl(txtSum5) + CDbl(txtSum6), "standard")

TotalSum

End Sub


Почему-то у меня есть уверенность, что тупой перебор имен этих комбо- и текстбоксов можно избежать какой либо процедуркой типа:
sub cntrls ()
dim stri as string
dim datei as TextBox
dim i as integer

for i=1 to 6
stri = "frmMain.txtDate" & i + 1
Set datei.Caption = stri
next i

end sub


Только вот такая процедурка не работает выдавая ошибку "Wrong number of arguments (Error 450)", а как решить эту задачку по упрощению основного кода сама разобраться никак не могу.
Есть светлые головы, кто поможет?
...
Рейтинг: 0 / 0
объявление объектной переменной
    #35752707
kurtizANKA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сорри, по-дурацки выложила прошлый раз код

Исходный код, который хотелось бы оптимизировать (только в части обработки в цикле однотипных контролов).
Код: plaintext
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.
Sub CalcSumChange()
Dim maxAdd As Double
Dim maxTake As Double
Dim minChange As Double


maxAdd = txtSumAdd.Value
maxTake = txtSumTaking.Value
minChange = Worksheets("Параметры счетов").Range("g23").Value

'выполнение проверки сумм пополнения / снятия условиям
'присвоение "знака" движения сумм по счету
If cbx1 = "Пополнение" And Len(txtSum1) >  0  Then
If Abs(txtSum1.Value) > maxAdd Then
txtSum1.Value = Format(Abs(maxAdd), "standard")
MsgBox "Сумма пополнения не должна превышать " & Format(Abs(maxAdd), "standard")
ElseIf Abs(txtSum1.Value) < minChange Then
MsgBox "Минимальная сумма пополнения " & Format(minChange, "standard")
txtSum1.Value = Format(minChange, "standard")
Else: txtSum1.Value = Format(Abs(txtSum1), "standard")
End If
ElseIf Len(cbx1) >  0  And Len(txtSum1) >  0  Then
If Abs(txtSum1.Value) > maxTake Then
txtSum1.Value = Format(-Abs(maxTake), "standard")
MsgBox "Сумма cнятия не должна превышать " & Format(Abs(maxTake), "standard")
ElseIf Abs(txtSum1.Value) < minChange Then
MsgBox "Минимальная сумма снятия " & Format(minChange, "standard")
txtSum1.Value = Format(-minChange, "standard")
Else: txtSum1.Value = Format(-Abs(txtSum1), "standard")
End If
Else: txtSum1.Value = Format( 0 , "standard")
End If

If cbx2 = "Пополнение" And Len(txtSum2) >  0  Then
If Abs(txtSum2.Value) > maxAdd Then
txtSum2.Value = Format(Abs(maxAdd), "standard")
MsgBox "Сумма пополнения не должна превышать " & Format(Abs(maxAdd), "standard")
ElseIf Abs(txtSum2.Value) < minChange Then
MsgBox "Минимальная сумма пополнения " & Format(minChange, "standard")
txtSum2.Value = Format(minChange, "standard")
Else: txtSum2.Value = Format(Abs(txtSum2), "standard")
End If
ElseIf Len(cbx2) >  0  And Len(txtSum2) >  0  Then
If Abs(txtSum2.Value) > maxTake Then
txtSum2.Value = Format(-Abs(maxTake), "standard")
MsgBox "Сумма cнятия не должна превышать " & Format(Abs(maxTake), "standard")
ElseIf Abs(txtSum2.Value) < minChange Then
MsgBox "Минимальная сумма снятия " & Format(minChange, "standard")
txtSum2.Value = Format(-minChange, "standard")
Else: txtSum2.Value = Format(-Abs(txtSum2), "standard")
End If
Else: txtSum2.Value = Format( 0 , "standard")
End If

If cbx3 = ..... 'и так для всех 6 комбобоксов и текстбоксов
End If

txtTotalSumChange.Value = Format(CDbl(txtSum1) + CDbl(txtSum2) + CDbl(txtSum3) + CDbl(txtSum4) + CDbl(txtSum5) + CDbl(txtSum6), "standard")

TotalSum

End Sub

Мое видение решения проблемы, которое не работает :)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
sub cntrls ()
dim stri as string
dim datei as TextBox
dim i as integer

for i= 1  to  6 
stri = "frmMain.txtDate" & i +  1 
Set datei.Caption = stri
next i

end sub
...
Рейтинг: 0 / 0
объявление объектной переменной
    #35752708
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
используйте коллекцию Controls
...
Рейтинг: 0 / 0
объявление объектной переменной
    #35752716
kurtizANKA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Konst_Oneиспользуйте коллекцию Controls
Я еще не программер (и не планирую им стать, но текущие задачи надо решать здесь и сейчас и собственными силами), а только учусь. Что имеется в виду?
...
Рейтинг: 0 / 0
объявление объектной переменной
    #35752725
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
у текущей формы есть объект Controls, в нем все ваши контролы находяться. обращение можно делать по имени контрола

Код: plaintext
Debug.Print Me.Controls("txtName1").Text
...
Рейтинг: 0 / 0
объявление объектной переменной
    #35752760
kurtizANKA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Konst_Oneу текущей формы есть объект Controls, в нем все ваши контролы находяться. обращение можно делать по имени контрола

Код: plaintext
Debug.Print Me.Controls("txtName1").Text


то есть на место "txtName1" мне как раз и надо вставить мою строковую переменную, содержащую имя (завязанное на цикл) контрола? Как то так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
sub cntrls ()
dim stri as string
dim datei as date
dim i as integer

for i= 1  to  6 
stri = "txtDate" & i +  1 
datei=frmMain.Controls(stri)
next i

end sub

Спасибки, работает :)
...
Рейтинг: 0 / 0
15 сообщений из 40, страница 2 из 2
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / объявление объектной переменной
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]