Официальный сайт студ.городка НГТУ
Программирование и БД » Помогите с VBA 

#1  15.09.10 17:17

Помогите с VBA

Private Sub CommandButton1_Click()
Worksheets("Лист1").Range("A1") = TextBox1
Dim x As String
Dim i, z, j, y, k, p As Integer
Dim q, w As Single
k = Len(TextBox1)
w = 0
p = 1
For i = 1 To 32
       j = 0
       z = 0
       Do While (j <> k)
            x = Mid(TextBox1, j + 1, 1)
            If Asc(x) = 223 + i Then z = z + 1
            If Asc(x) = 190 + i Then z = z + 1
            j = j + 1
       Loop
       If z <> 0 Then
       p = p + 1
       Worksheets("Лист1").Cells(p, 3) = z
       Worksheets("Лист1").Cells(p, 2) = Chr(223 + i)
       y = z / k
       Worksheets("Лист1").Cells(p, 4) = y
       q = -Log(y) / Log(2)
       Worksheets("Лист1").Cells(p, 5) = q
       Worksheets("Лист1").Cells(p, 6) = y * q
       w = w + y * q
       End If
       z = 0
Next i
Worksheets("Лист1").Cells(p + 1, 6) = w
Worksheets("Лист1").Cells(p + 1, 3) = k

End Sub




    Почему он проверяет 32 буквы, а не 33?
    223 код маленьких букв, если к нему прибавить 1, то это будет код второй буквы или первой?
    Если что-то нужно изменить, то помогите, пожалуйста.

Offline

#2  15.09.10 19:31

Re: Помогите с VBA

я не знаток вб совсем совсем, но меня на первый взгляд смутило это
If Asc(x) = 223 + i Then z = z + 1
а именно, то что операция равенство и присваивание одинаково обозначаются.
думаю компилятор не поймет такой двойственности

Исправлено voropay (15.09.10 19:32)

Offline

#3  15.09.10 19:36

Re: Помогите с VBA

Прога то работает, мне нужно преподу объяснить .

Offline

#4  15.09.10 20:29

Re: Помогите с VBA

000Ангелишка000 написал(а):

For i = 1 To 32

может по этому?

Offline

#5  15.09.10 20:33

Re: Помогите с VBA

вот я про тоже, почему не 33 буквы??

Offline

#6  15.09.10 22:03

Re: Помогите с VBA

http://ascii.org.ru/
буквы ё нет в таблице ASCII

Исправлено mr.Nobody (15.09.10 22:04)

Offline

#7  15.09.10 22:18

Re: Помогите с VBA

значит вместо кода 190 нужно поменять на 191.??

Offline

#8  15.09.10 22:19

Re: Помогите с VBA

теперь ясно, почему с 1 по 32. Спасибо большое

Offline

#9  18.09.10 23:55

Re: Помогите с VBA

мб не актуально, но судя по коду, он считает количество различных русских букв в слове(ну и выводит цифры всякие;). собственно:

000Ангелишка000 написал(а):

If Asc(x) = 190 + i Then z = z + 1

тут вместо 190 должно быть 191, ибо А имеет код 192.

mr.Nobody написал(а):

буквы ё нет в таблице ASCII

винда говорит, что 'Ё' имеет код 168, а 'ё' - 184.

зы.

000Ангелишка000 написал(а):

Worksheets("Лист1").Cells(p, 2) = Chr(223 + i)

глядя на это создаётся впечатление, что регистр букв не важен. если это так, то можно с помощью LCase избавиться от ифа с большими буквами.

Исправлено dorido (19.09.10 00:00)

Offline

#10  20.09.10 16:34

Re: Помогите с VBA

помогите защиту сделать к этой программе!!))
"Для заданной строки символов получить строку в которой каждая гласная буква, которая стоит в нечетном месте превращается из строчной в прописную!"
также надо написать прогу на VBA!

заранее благодарен)

Offline

#11  21.09.10 12:46

Re: Помогите с VBA

аааа, помогите((((

Offline

#12  21.09.10 16:53

Re: Помогите с VBA

Ну так ты сам попробуй сделать. А если будут сложности - тогда будет и понятно с чем нужно помочь.

Offline

#13  21.09.10 16:57

Re: Помогите с VBA

Revenger, ды хотя бы алгоритм заделать... я не бумбум в программировании..

Offline

#14  23.09.10 01:02

Re: Помогите с VBA

Aguero написал(а):

хотя бы алгоритм

Код: vb:

For i = 1 to len(s)
tmp=mid$(s,i,1)
If i mod 2 = 1 Then
 
Select Case Asc(tmp)
Case 224, 229, 184, 232, 238, 243, 251, 253, 254, 255 ' коды для русских букв
tmp=Ucase(tmp)
End Select
 
End If
e=e+tmp
Next i

исходная строка - s, результат - e.

зы, вместо селект кейса стоит сделать иф, но там больше букв)

Исправлено dorido (23.09.10 02:09)

Offline

#15  23.09.10 01:31

Re: Помогите с VBA

вот что у меня получилось, может можна какнить дополнить

Private Sub ввод_Click()
    Dim x, c As String
    Dim i, z, j, y, k, p As Integer
    Dim q, w As Single
    Dim ff(9) As String
    ff(0) = "а"
    ff(1) = "е"
    ff(2) = "и"
    ff(3) = "о"
    ff(4) = "у"
    ff(5) = "ы"
    ff(6) = "э"
    ff(7) = "ю"
    ff(8) = "я"
   
    k = Len(TextBox1)
    w = 1
    i = 1
    Do While (i <= k)
        x = Mid(TextBox1, i, 1)
        j = 0
        p = i Mod 2
        If p = 1 Then
        Do While (j < 9 And w = 1)
            z = Asc(x)
            If x = ff(j) Then
                y = Asc(x)
                y = y - 32
                x = Chr(y)
                w = 0
            End If
            j = j + 1
        Loop
        End If
        TextBox2.Text = TextBox2.Text + x
       
       
    i = i + 1
    w = 1
    Loop

End Sub

Offline

#16  23.09.10 02:06

Re: Помогите с VBA

1.

Aguero написал(а):

z = Asc(x)

зачем эта строчка?

2. имо, но лучше из do сделать for циклы. тогда в цикле по j, в качестве флажка(вместо w=0) использовать exit for(или извращенский j=10)

3. если оставить do циклы, то

Aguero написал(а):

w = 1

засунусть после

Aguero написал(а):

If p = 1 Then

а из других мест убрать

Исправлено dorido (23.09.10 02:07)

Offline

#17  19.10.10 21:03

Re: Помогите с VBA

Может кому пригодится еще один вариант)))

Dim MyText, n, textlen, t, go, rez
t = ""
MyText = InputBox("Введите слово:")
textlen = Len(MyText)
For n = 1 To textlen
go = Mid(MyText, n, 1)
If n Mod 2 = 1 Then
    If go Like "[а]" Then
    go = "А"
    End If
    If go Like "[е]" Then
    go = "Е"
    End If
    If go Like "[ё]" Then
    go = "Ё"
    End If
    If go Like "[и]" Then
    go = "И"
    End If
    If go Like "[о]" Then
    go = "О"
    End If
    If go Like "[ю]" Then
    go = "Ю"
    End If
    If go Like "[я]" Then
    go = "Я"
    End If
    If go Like "[ы]" Then
    go = "Ы"
    End If
    If go Like "[э]" Then
    go = "Э"
    End If
End If
t = t + go
Next n
MsgBox t

Offline

Программирование и БД » Помогите с VBA 

ФутЕр:)

© Hostel Web Group, 2002-2025.   Сообщить об ошибке

Сгенерировано за 0.040 сек.
Выполнено 11 запросов.