Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Задачи на Visual Basic (VB).

Автор: cristoff
Дата сообщения: 16.12.2006 01:37
Ребята, доброго времени суток! Подскажите, как начинающему осваивать ВБ 6.0, как решить ИНАЧЕ такую простенькую задачу: разработать проект, в котором вводится название города-юбиляра, год его основания, текущий год. После нажатия командной кнопки должно выйти поздравление :"Поздравляем жителей города Н с Х-летием!"
Я решаю ее так:

Dim t As Integer
Dim m As Integer
Dim a As String
a = Text1.Text
t = Val(Text2.Text)
m = Val(Text3.Text)
Text5.Text = m - t
Text4.Text = " Поздравляем жителей города " + a + " с " + Text5.Text + "-летием "

Скажите, почему при попытке заменить "м-т" на новую переменную "Х" и вставить ее в Text4.Text , прога выдает ошибку?
Благодарю всех, кто пояснит.

Добавлено:
в свойствах Text5.Text я поменял Invisible c True на False. Т.е. , по сути, как не вводить( соответственно, не прятать) это новое 4-е окно?(это ведь не совсем правильно(просто хитро), я думаю, автор задачи имел в виду другое решение)

Добавлено:
неужели еще никто не проснулся? Я по-прежнему жду

Добавлено:
Ау!

Добавлено:
вот так форс-мажор _ все программисты словно сговорились

Добавлено:
дрыхнут, как сурки : )
Автор: dneprcomp
Дата сообщения: 16.12.2006 09:41
cristoff
Цитата:
как решить ИНАЧЕ
А чем сейчас не устраивает?
Покажи полный код, выдающий ошибку, текст сообщения ошибки. И описание что в какой контрол заносится. Как можно что-либо советовать, не видя исходника?
На основе данной информации можно только посоветовать писать правильно и без ошибок

1.Не используй '+'. Для стрингов лучше '&'
2.Нет свойства Invisible. Только Visible
Автор: cristoff
Дата сообщения: 16.12.2006 13:07
вот код при котором возниикает ошибка № 13: несоответствие типов:

Private Sub Command1_Click()
Dim t As Integer
Dim m As Integer
Dim a As String
Dim x As Integer
a = Text1.Text
t = Val(Text2.Text)
m = Val(Text3.Text)
x = m - t
Text4.Text = " Поздравляем жителей города " + a + x + " с " + "-летием "
End Sub

Добавлено:
я понял, что так как переменная "а" типа стринг, а "х" - интеджер, значит их(как разные типы данных) нельзя ставить в одной строке, но как тогда сдеалть по-другому?
за Визибл извините - моя ошибочка... : )

Добавлено:
Ура! Я сменил "+" на & - и все заработало!
dneprcomp

БЛАГОДАРСТВУЮ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Автор: dneprcomp
Дата сообщения: 16.12.2006 18:46
cristoff

Цитата:
Ура! Я сменил "+" на & - и все заработало!

А почему? А потому, что VB пытался провести арифметическое сложение string и integer. Естественно, будет выскакивать ошибка.
При использовании '&' происходит неявная конверсия из integer в string. Поэтому и не выдает ошибку. Можно использовать явную конверсию. Использование Val - пример явной конверсии. Cstr(Х)
Цитата:
за Визибл извините - моя ошибочка
Извиняться тут нечего. Надо стараться употреблять стандартные названия. А то тебя собеседник просто может не понять
Автор: CLOPOMOR
Дата сообщения: 17.12.2006 18:14
ДОБРОГО ВАМ ЗДРАВИЯ ДРУГИ!

Помогите кто может если не внапряг с задачей

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

Необязсутьте ежели чего запостил не так или с ерундой воду мучу, просто сделать надо очень...

Автор: Troitsky
Дата сообщения: 17.12.2006 19:18
dneprcomp

Цитата:
Cstring(Х)
CStr(X)

CLOPOMOR

Цитата:
Помогите

В таком виде устраивает?
Код: Option Explicit

Private Sub Main()
Dim strPh As String
strPh = "каждый охотник желает знать где сидит фазан"
SolveStr strPh
MsgBox strPh
End Sub

Sub SolveStr(ByRef strPhrase As String)
Dim intMin As Integer
Dim intNum As Integer
Dim strMin As String

Dim intPos As Integer
Dim strResult As String
Dim j As Integer
Dim i As Integer

Mid(strPhrase, 1, 1) = UCase(Mid(strPhrase, 1, 1))
intMin = 32767
i = 0
j = 1

intPos = InStr(j, strPhrase, " ")

Do Until intPos = 0
i = i + 1

Mid(strPhrase, intPos + 1, 1) = UCase(Mid(strPhrase, intPos + 1, 1))

strResult = Mid(strPhrase, j, intPos - j)
If Len(strResult) < intMin Then
intMin = Len(strResult)
intNum = i
strMin = strResult
End If

j = intPos + 1
intPos = InStr(j, strPhrase, " ")
Loop

MsgBox "Во фразе """ & strPhrase & """ минимальную длину (" & CStr(intMin) & ") имеет " & CStr(intNum) & "-е слово (" & strMin & ")."
End Sub
Автор: dneprcomp
Дата сообщения: 17.12.2006 20:30
Troitsky
Конечно, CStr(X) Даже я могу ошибаться
Автор: CLOPOMOR
Дата сообщения: 18.12.2006 06:50
Troitsky
СПАСИБО ! То что надо
Автор: fedrom
Дата сообщения: 18.12.2006 09:44
помогите исправить задачки на ВБ никогда не программировал...
есть исходник крестиков нолико на поле от 6*6 до 19*19 нужно из него сделать 128*128 и выигрыш 5 в ряд игра с компьютером пожалуйста! кто возьмётся вышлю данный исходник на mail.
Автор: cristoff
Дата сообщения: 18.12.2006 22:50
dneprcomp
Спасибо за розъяснение, а то я тоже думал над этим и пришел почти к аналогичному выводу, но вы меня окончательно убедили в правильности моих рассуждений.
Автор: Aladdinych
Дата сообщения: 20.12.2006 10:57
Есть книга Excel 2003. На листе стоит кнопка. Мне нужно по клику на ней запустить архивайию файла по заданному пути. Проблема состоит в том, что путь содержит папку, в имени которой есть пробелы. Использовать Shell для запуска архиватора нельзя, он почему-то работает не корректно. имя файла берется до первого пробела, даже если весь путь взять в кавычки. Использовать функцию API Winexec тоже не получилось. Почему-то не работает определение внешних функций из модуля. трактует как ошибку в программе.
Подскажите решение проблемы.
Автор: AndronH
Дата сообщения: 21.12.2006 11:15
2 Aladdinych код в студию обязательно помогу.
Автор: EVenom
Дата сообщения: 24.12.2006 12:18
Драствуйте умные люди))...Мне к завтрашнему дню дали 3 задачи на VB. Но мои знания о бейсики на минимуме. Помогите кто может решить задачи!!! Заранее большое спасибо! Вот они...
Массивы:
Задана последовательность n-целых чисел. Определить порядковые номера тех элементов, каторые являются числами Фибоначи
Строки:
Имеется строка содержащяя буквы латниского алфавита и цифры. Вывести на экран длинну наибольшой последовательности цифр, идущих подряд.
Записи:
Распечатать фамилии тех учеников, которые не получили ни одной тройки за последнюю четверть. В каких классах учаться эти ученики? Каков средний балл??
Жду..
Автор: AndronH
Дата сообщения: 25.12.2006 08:24
Со строками

Dim strInput As String
Dim X As Long
Dim Y As Long
Dim varMaxLen As Long
strInput = "jsdjfg45222222222222229tvuiiuv234urtf23y222222222222229tvo23y4rocy43rtvc234otyc2o5g5y76872340g85723"
varMaxLen = 0
For X = 1 To Len(strInput)
Select Case Mid(strInput, X, 1)
Case "1", "2", "3", "4", "5", "6", "7", "8", "9", "0"
Y = Y + 1
If Y >= varMaxLen Then varMaxLen = Y
Case Else
Y = 0
End Select
Next X
MsgBox varMaxLen

Добавлено:
С массивом

Private Sub Command1_Click()
N = 500 'здесь указываем пределы массива
ReDim Y(1 To N)
For X = 1 To N ' заполняем массив значениями
Y(X) = X
Next X
For X = 1 To N 'прогоняем на вхождение в ряд Фибоначи
If IsFibonachi(Val(Y(X))) = True Then
Debug.Print "Элемент № " & X & "; Значение " & Val(Y(X))
End If
Next X
End Sub
Function IsFibonachi(N As Double) As Boolean
V1 = 1
V2 = 0
Do Until N < V1
Z = V2
V2 = V2 + V1
V1 = Z
If V2 = N Then
IsFibonachi = True
Exit Function
Else
IsFibonachi = False
End If
Loop
End Function

А что за записи? это очень размытое понятие, конкретнее вопрос, как хранятся записи, их структуру.
Автор: EVenom
Дата сообщения: 25.12.2006 18:31
AndronH Огромное тебе спасибо!!! На счет записей. там должен быть в форме ввод в таблицу...какой там обьект не помню.... В таблице такие параметры как Фамилия класс и предметы...например Математика литра русский. И там вывод куда нить моно и в пиктуре бокс...тех учеников..ну там дальше понятно. И еще пожаста напиши какие обьекты должны быть в первой и второй задаче?....еще раз огромное спасибо
Автор: AndronH
Дата сообщения: 26.12.2006 08:38
первый в любой саб или процедуру или функцию вставляй, а второй кидай в код формы, на форму кнопку по умолчанию, про записи счаз подумаю
подумал. короче чтоб тебе выдать какойто результат, давай точные иходные данные.
В каком формате хранится бд(форматов десятки), какой объект используется для редактирования бд (гридов тысячи от бесплатных до платных и лицензируемых), какой техникой нужно делать выборку (ADO, DAO, BDO, RDO, ...), в какой объект передавать результат(принтер, форма, грид, файл, ...)
В общем дай точную формулировку задачи которую перед тобой поставили. По тому как ты сформулировал к сожалению невозможно выдать решения.
Автор: Cassanius
Дата сообщения: 02.01.2007 14:15

Народ, вот тут такая неприятность, создал в Outlook2003 правило, которое запускает данный скрипт (VBA) для сохранения сообщения в определенной папке. Все работает, только вот Outlook выдает окно с предупреждением "A program is trying to access your Address Book". Это происходит даже в том случае, если для названия сохраняемых сообщений использовать дату или просто какое-то определенное значение (к примеру: strSaveName = 1 & ".msg")

Сам код:

Sub SaveAsMsg(objItem As MailItem)
' requires reference to Microsoft Scripting Runtime
' \Windows\System32\Scrrun.dll

Dim strSaveName As String
Dim strFolderPath As String

strFolderPath = "C:\Data\"
' path to target folder
strSaveName = objItem.Subject & ".msg"
' name for the message

objItem.SaveAs strFolderPath & strSaveName, olMSG

End Sub

Дайте знать если есть светлые мысли.
Автор: dneprcomp
Дата сообщения: 02.01.2007 19:17
Cassanius
Попробуй уменьшить уровень security:
Tools-Macro-Securiry
Автор: Cassanius
Дата сообщения: 03.01.2007 14:10
dneprcomp

пробовал, даже на минимальном выдает это окно.

Проблему можно решить поставив спец прогу ClickYes Pro или поковырявшись в глубинных настройках Outlooka c помощью Adminpacka (Customizing the Outlook Security Features Administrative Package), но мне именно хочется решить проблему модифицировав код...
Автор: driverok
Дата сообщения: 05.01.2007 10:29
Помогите решить на VBA следующую задачу:
Вычислить значения функции y=cos(kx)+a и Z=sin(kx^2) для каждого K, изменяющегося от 1 до 10. Определить сумму положительных значений функции y=cos(kx)+a.
Вывод результата расчета организовать с помощью встроенной процедуры MsgBox и в окно Immediate с использованием функции Format.

Заранее всем спасибо!
Автор: Cassanius
Дата сообщения: 08.01.2007 12:15
Заработало. Будет полезно всем кто хочет сохранять приходящие сообщения в какой-либо папке вне Outlooka (в данном примере New Folder на диске С):

Sub RunAScriptRuleRoutine(MyMail As MailItem)
Dim strID As String
Dim olNS As Outlook.NameSpace
Dim oMail As Outlook.MailItem
Dim strSaveName As String
Dim strFolderPath As String


strID = MyMail.EntryID
Set olNS = Application.GetNamespace("MAPI")
Set oMail = olNS.GetItemFromID(strID)
' do stuff with oMail, e.g.
MsgBox oMail.Subject
strSaveName = oMail.Subject & ".msg"
strFolderPath = "C:\New Folder\"
MyMail.SaveAs strFolderPath & strSaveName, olMSG


Set olNS = Nothing
End Sub

Сделал модификацию кода в соответствии с этой подсказкой:
To take advantage of the fact that the Application object in Outlook VBA is trusted, a VBA procedure designed to be executed as a "run a script" rule action from the Rules Wizard needs to use the EntryID of the VBA procedure's MailItem or MeetingItem argument to get the desired item as an object derived from the Application object, rather than use the item passed as an argument
Автор: Troitsky
Дата сообщения: 08.01.2007 13:09
driverok

Код: Dim k As Integer
Dim y As Double, z As Double
Dim x As Double, a As Double
Dim dblSum As Double

x = 0.123
a = 4.567
dblSum = 0

For k = 1 To 10
y = Cos(k * x) + a
z = Sin(k * x ^ 2)
Debug.Print "k = " & CStr(k) & " -> y = " & Format(y, "0.000") & "; z = " & Format(z, "0.000")
If y > 0 Then dblSum = dblSum + y
Next k

MsgBox "сумма положительных значений функции y=cos(kx)+a=" & Format(dblSum, "#.000")
Автор: Salya Romanov
Дата сообщения: 22.01.2007 18:34
Люди помогите оформить 2 условия:
1. заменит первые k элементов массива на те же элементы в обратном порядке;
2. удалить строку и столбец на пересечении которых находится максимальный элемент массива.
В программировании дуб, уже неделю над этим бьюсь.......
Автор: Legio
Дата сообщения: 22.01.2007 19:24

Цитата:
1. заменит первые k элементов массива на те же элементы в обратном порядке;


Код:
Option Explicit

Sub aChange(ByRef a())
Dim i As Integer, uLimit As Single, t

If LBound(a) = UBound(a) Then Exit Sub

i = LBound(a)
uLimit = (UBound(a) + LBound(a)) / 2

Do While (i <= uLimit)

t = a(i)
a(i) = a(UBound(a) - i + LBound(a))
a(UBound(a) - i + LBound(a)) = t

i = i + 1

Loop

End Sub

Private Sub Form_Load()
Dim i As Integer, a()

ReDim a(2 To 4)

a(2) = 1
a(3) = 2
a(4) = 3

' For i = LBound(a) To UBound(a)

' MsgBox a(i)

' Next

Call aChange(a)

' For i = LBound(a) To UBound(a)

' MsgBox a(i)

' Next

End Sub
Автор: Salya Romanov
Дата сообщения: 22.01.2007 19:46

Цитата:
В каком смысле удалить?.. Новый массив создать, нулями заполнить, в старом элементы подвинуть/размерность изменить?


в смысле 1-ое условие для одномерного массива, а второе для двумерного. Дан массив n * m и из него надо удалить строку и столбец на пересечении которых находится максимальный элемент массива.
Автор: Legio
Дата сообщения: 22.01.2007 22:28
Salya Romanov
В каком смысле удалить?.. Именно строку/столбец удалить, с переопределением размерностей массива? Или чего?
Автор: Salya Romanov
Дата сообщения: 23.01.2007 08:38
Legio

Цитата:
В каком смысле удалить?.. Именно строку/столбец удалить, с переопределением размерностей массива? Или чего?

Видимо так оно и есть, хотя ничего конкретного в условии не говорится, просто удалить строку и столбец...
Автор: Troitsky
Дата сообщения: 23.01.2007 10:12
Salya Romanov
Legio

Цитата:
1. заменит первые k элементов массива на те же элементы в обратном порядке

Может лучше так:
Код: Dim a(0 To 27) As Integer ' массив
Dim i As Integer ' счетчик
Dim k As Integer ' сколько элементов заменять
Dim intLB As Integer ' нижняя граница массива

intLB = LBound(a)

For i = intLB To UBound(a)
a(i) = i ' заполняем массив числами
Next i

k = 21

' заменяем первые k элементов на те же в обратном порядке
For i = intLB To intLB + Int(k / 2) - 1
a(i) = a(i) Xor a(intLB + k - i - 1)
a(intLB + k - i - 1) = a(i) Xor a(intLB + k - i - 1)
a(i) = a(i) Xor a(intLB + k - i - 1)
Next i
Автор: Legio
Дата сообщения: 23.01.2007 17:11
Troitsky
Да... Эту часть забыл

Добавлено:
тогда так


Код: Option Explicit

Sub aChange(ByRef a(), k As Integer)
Dim i As Integer, t

If LBound(a) = UBound(a) Then Exit Sub

i = LBound(a)
If k > Abs((UBound(a) - LBound(a)) / 2) Then k = Abs((UBound(a) - LBound(a)) / 2)

For i = LBound(a) To (LBound(a) + k - 1)

t = a(i)
a(i) = a(UBound(a) - i + LBound(a))
a(UBound(a) - i + LBound(a)) = t

Next

End Sub

Private Sub Form_Load()
Dim i As Integer, a()

ReDim a(2 To 7)

a(2) = 1
a(3) = 2
a(4) = 3
a(5) = 4
a(6) = 5
a(7) = 6

' For i = LBound(a) To UBound(a)

' MsgBox a(i)

' Next

Call aChange(a, 2)

' For i = LBound(a) To UBound(a)

' MsgBox a(i)

' Next

End Sub
Автор: BlackFoxBay
Дата сообщения: 02.02.2007 07:01
Кто знает как в VBA активировать какую-нить процедуру по двойному клику мыши-DoubleClick? ну чтоб, там, форма выскакивала какая-нить или мессага?. Заранее спасибо.

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940

Предыдущая тема: для Hiper-six (индексы .nsx .smt) хоть что нибудь Опции


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.