Loop without do ошибка vba

Группа: Пользователи

Выдает ошибку «Loop without Do» хотя Do есть

Bamboo

Дата: Понедельник, 28.03.2016, 21:50 |
Сообщение № 1

Группа: Пользователи

Ранг: Участник

Сообщений: 99


Репутация:

0

±

Замечаний:
0% ±


Excel 2010

Странная ситуация, цикл исправно работал. А Потом появилась эта ошибка. Хотя Do есть.
Прошу не ругаться на код, это мой первый на VBA да еще и не отлаженный.
[vba]

Код

Function HighLevACC(ACC, DistMap)
Dim Array_DistMap()
Dim Array_SubHLACC()
Dim I As Integer, J As Integer, X As Integer, Y As Integer
Do
X = X + 1
If ACC.Cells(X, 1) = «Empty» And ThisCell.Address.Offset(X, 10) = «» Then      
Set vHLACC = ACC.Cells(X, -1)
Array_DistMap = DistMap.Value
  Counter_j = 0
For I = 1 To UBound(Array_DistMap)
If Array_DistMap(I, 1) = vHLACC Then
J = J + 1
ReDim Preserve Array_SubHLACC(1 To J)
Array_SubHLACC(J) = Array_DistMap(I, 2)
  MsgBox (Array_SubHLACC(J))
  End If
Next
HighLevACC = Array_SubHLACC(2)
HighLevACC.Offset(0, 9) = 1
ACC.Cells(Õ, 9) = «S»      
If ACC.Cells(Õ — 1, 10) = «C» Then       
vHLACC = ACC.Cells(X — 1, -1)
Counter_j = 0
For I = 1 To UBound(Array_DistMap)
If Array_DistMap(I, 1) = vHLACC Then
J = J + 1
ReDim Preserve Array_SubHLACC(0 To J)
Array_SubHLACC(J) = Array_DistMap(I, 2)
  End If
Next
Y = HighLevACC.Offcet(-1, 9)
Y = Y + 1
If Y <= J Then
HighLevACC = Array_SubHLACC(Y)
HighLevACC.Cells(0, 9) = Y
If Y = J Then
HighLevACC.Cells(0, 10) = «D»
End If
End If
End If
HighLevACC = ACC.Cells(X, 1)
Loop While (X < ACC.Count) Or (ACC.Cells(X, 1) = «Empty» And ThisCell.Address.Offset(X, 10) = «»)
End Function

[/vba]

 

Ответить

al-Ex

Дата: Понедельник, 28.03.2016, 22:00 |
Сообщение № 2

Группа: Проверенные

Ранг: Форумчанин

Сообщений: 190


Репутация:

59

±

Замечаний:
0% ±


Excel 2010


если цикл начинается с «For I =1 …» тогда уже внизу — «Next I», исправьте в двух местах.
и конструкции типа: If Then
Else
End If
так мудрёно лучше не делать.
Вряд-ли это будет работать именно так как Вы задумали.

Сообщение отредактировал al-ExПонедельник, 28.03.2016, 22:24

 

Ответить

Невилл

Дата: Понедельник, 28.03.2016, 22:09 |
Сообщение № 3

Группа: Пользователи

Ранг: Участник

Сообщений: 79


Репутация:

2

±

Замечаний:
0% ±


Excel 2007

Одно из If не закрыто.

Кстати, неплохо бы определять переменные и их типы сверху, пожалуй.

 

Ответить

Апострофф

Дата: Понедельник, 28.03.2016, 22:10 |
Сообщение № 4

Группа: Проверенные

Ранг: Обитатель

Сообщений: 416


Репутация:

117

±

Замечаний:
0% ±


Excel 1997

Учитесь оформлять код отступами — и проблем не будет
[vba]

Код

Function HighLevACC(ACC, DistMap)
Dim Array_DistMap()
Dim Array_SubHLACC()
Dim I As Integer, J As Integer, X As Integer, Y As Integer
Do
    X = X + 1
    If ACC.Cells(X, 1) = «Empty» And ThisCell.Address.Offset(X, 10) = «» Then
        Set vHLACC = ACC.Cells(X, -1)
        Array_DistMap = DistMap.Value
        Counter_j = 0
        For I = 1 To UBound(Array_DistMap)
            If Array_DistMap(I, 1) = vHLACC Then
                J = J + 1
                ReDim Preserve Array_SubHLACC(1 To J)
                Array_SubHLACC(J) = Array_DistMap(I, 2)
                MsgBox (Array_SubHLACC(J))
            End If
        Next
        HighLevACC = Array_SubHLACC(2)
        HighLevACC.Offset(0, 9) = 1
        ACC.Cells(O, 9) = «S»
        If ACC.Cells(O — 1, 10) = «C» Then
            vHLACC = ACC.Cells(X — 1, -1)
            Counter_j = 0
            For I = 1 To UBound(Array_DistMap)
                If Array_DistMap(I, 1) = vHLACC Then
                    J = J + 1
                    ReDim Preserve Array_SubHLACC(0 To J)
                    Array_SubHLACC(J) = Array_DistMap(I, 2)
                End If
            Next
            Y = HighLevACC.Offcet(-1, 9)
            Y = Y + 1
            If Y <= J Then
                HighLevACC = Array_SubHLACC(Y)
                HighLevACC.Cells(0, 9) = Y
                If Y = J Then
                    HighLevACC.Cells(0, 10) = «D»
                End If
            End If
        End If
    End If ‘НЕ ХВАТАЛО ЭТОГО.
    HighLevACC = ACC.Cells(X, 1)
Loop While (X < ACC.Count) Or (ACC.Cells(X, 1) = «Empty» And ThisCell.Address.Offset(X, 10) = «»)
End Function

[/vba]

Сообщение отредактировал АпостроффПонедельник, 28.03.2016, 22:18

 

Ответить

Bamboo

Дата: Понедельник, 28.03.2016, 22:48 |
Сообщение № 5

Группа: Пользователи

Ранг: Участник

Сообщений: 99


Репутация:

0

±

Замечаний:
0% ±


Excel 2010

Апострофф, Спасибо! Получилось! Насчет, отступов, это я поленился, а зря…

 

Ответить

_Boroda_

Дата: Понедельник, 28.03.2016, 23:02 |
Сообщение № 6

Группа: Модераторы

Ранг: Местный житель

Сообщений: 16563


Репутация:

6446

±

Замечаний:
0% ±


2003; 2007; 2010; 2013 RUS

Bamboo, Виталий, я, например, делаю вот так — когда пишу If … Then, то сразу же ДВА раза жму Ентер и пишу End If, затем возвращаюсь на строчку выше, жму Тав и пишу то, что хотел написать внутри Ифа.
Аналогично с циклами — For i = 1 to 5, ДВА раза Ентер, Next i, стрелка вверх, Тав и тело цикла. При таком стиле записи я уже не теряю закрытия циклов и Ifов.
Можно еще пользоваться облегчениями отсюда http://www.excelworld.ru/forum/10-22392-180576-16-1458977793
Кстати, вот это

если цикл начинается с «For I =1 …» тогда уже внизу — «Next I»

не обязательно. Можно писать просто Next, но, когда у Вас цикл в цикле и все это внутри цикла, то довольно легко запутаться, поэтому для облегчения понимания желательно указывать переменную, цикл по которой закрываем.

Насчет, отступов, это я поленился

Отступы легко делать Тавом или в VBA вывести панельку Edit, там есть специальные кнопочки — ими можно делать отступ сразу для нескольких строк (Тавом тоже можно).


Скажи мне, кудесник, любимец ба’гов…
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995

 

Ответить

I’m trying to implement a simple Newton’s method iterative solver using Excel VB (I have never used VB.)

I keep getting the error loop without a Do and I can’t figure out what I’m doing wrong here.

I’m trying to find the roots of the function z^3 - z^2 - (B^2 + B - A)z - A*B called the compressibility factor.

My source MSN

Function zCalculation(ByVal temp As Double, ByVal press As Double) As Double

Dim tempCr As Double
Dim pressCr As Double
Dim A As Double
Dim B As Double

tempCr = temp / 238.5

pressCr = press / 547.424092

A = pressCr / tempCr
A = A / (9 * (2 ^ (1 / 3) - 1))
B = pressCr / tempCr
B = B * (2 ^ (1 / 3) - 1) / 3



Dim zNot As Double
Dim counter As Integer
counter = 0
zNot = 1#

Do
    counter = counter + 1

    zNot = zNot - (zNot ^ 3 - zNot ^ 2 - (B ^ 2 + B - A) * zNot - A * B) / (3 * zNot ^ 2 - 2 * zNot - (B ^ 2 + B - A))
    If counter > 1000 Then
       Exit Do

Loop Until eval(zNot, A, B) < 0.000001


zCalculation = zNot


End Function

break

Function eval(ByVal z As Double, ByVal A As Double, ByVal B As Double) As Double

    eval = z ^ 3 - z ^ 2 - (B ^ 2 + B - A) * z - A * B

End Function

Community's user avatar

asked Dec 9, 2013 at 16:58

Felix Castor's user avatar

Felix CastorFelix Castor

1,5691 gold badge17 silver badges38 bronze badges

You need an:

End If

in your code.

answered Dec 9, 2013 at 17:04

Gary's Student's user avatar

Gary’s StudentGary’s Student

95k9 gold badges58 silver badges97 bronze badges

2

You can try:

 Function zCalculation(ByVal temp As Double, ByVal press As Double) As Double

  Dim tempCr As Double
  Dim pressCr As Double
  Dim A As Double
  Dim B As Double

  tempCr = temp / 238.5

  pressCr = press / 0.546789

  A = pressCr / tempCr
  A = A / (9 * (2 ^ (1 / 3) - 1))
  B = pressCr / tempCr
  B = B * (2 ^ (1 / 3) - 1) / 3



  Dim zNot As Double
  Dim counter As Integer
  counter = 0
  zNot = 1#

  Do
      counter = counter + 1

      zNot = zNot - (zNot ^ 3 + zNot ^ 2 - (B ^ 2 + B - A) * zNot - A * B) / (3 * zNot ^ 2 + 2 * zNot - (B ^ 2 + B - A))
      If counter > 1000 Then
         Exit Do
      End if  ' <--- Here

  Loop Until eval(zNot, A, B) < 0.000001

  zCalculation = zNot
 End Function

answered Dec 9, 2013 at 17:06

Makah's user avatar

1

Sub datacalculationsandformat()
Dim row As Integer
row = 2
Do While Cells(row, 2) <> ""
Cells(row, 3).Value = Cells(row, 2).Value * 0.3
Cells(row, 4).Value = Cells(row, 2) * 0.1
Cells(row, 5).Value = Cells(row, 2).Value + Cells(row, 3).Value + Cells(row, 4).Value
If Cells(row, 5).Value >= 8000 Then
Worksheets("Sheet1").Cells(row, 5).Font.Bold = True
row = row + 1
Loop

slavoo's user avatar

slavoo

5,64864 gold badges36 silver badges39 bronze badges

answered Sep 21, 2017 at 5:11

user8646115's user avatar

zzoommmmmm

0 / 0 / 0

Регистрация: 13.12.2011

Сообщений: 6

1

13.12.2011, 17:58. Показов 6779. Ответов 3

Метки нет (Все метки)


Найти первый отрицательный член последовательности cos(ctg(n)) для n изменяющегося следующим образом: n = 1, 2, 3, … .

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
Sub Tim()
Dim n As Integer
Dim Y As Integer
n = 1
Do
    Y = Cos(1 / Tan(n))
    If Y < 0 Then
    Debug.Print "n="; n, "Y="; Y: GoTo M
    Else
    n = n + 1
Loop While Y >= 0
M:     End If
End Sub

Помогите исправить код, пишет ошибку «Loop without Do». Заранее спасибо!)

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь



0



Programming

Эксперт

94731 / 64177 / 26122

Регистрация: 12.04.2006

Сообщений: 116,782

13.12.2011, 17:58

Ответы с готовыми решениями:

Почему в коде указано, что » кнопка 1 » и » кнопка 2 » добавлены в центр, а они добавляются «по умолчанию»?
Вот мой код:

import java.awt.*;

import javax.swing.*;

@SuppressWarnings(&quot;serial&quot;)…

В строке все буквы «а» заменить буквой «б» и наоборот, если они есть
В строке все буквы &quot;а&quot; заменить буквой &quot;б&quot; и наоборот, если они есть

Составьте программу, выясняющую, есть ли в слове Х хотя бы одна из букв «о» или «а»
1. Составьте программу, выясняющую, есть ли в слове Х хотя бы одна из букв &quot;о&quot; или &quot;а&quot;.
2….

Выясните, есть ли в слове X хотя бы одна из букв «к» или «м»
Выясните, есть ли в слове X хотя бы одна из букв &quot;к&quot; или &quot;м&quot;.

3

es geht mir gut

11264 / 4746 / 1183

Регистрация: 27.07.2011

Сообщений: 11,437

13.12.2011, 18:20

2

11 и 12 строку поменяй местами, у меня был точно такой же случай.
А в 8 поставь не Go To M, а Exit Do



1



Alex77755

11464 / 3757 / 675

Регистрация: 13.02.2009

Сообщений: 11,098

13.12.2011, 18:25

3

Цитата
Сообщение от SoftIce.net
Посмотреть сообщение

11 и 12 строку поменяй местами, у меня был точно такой же случай.
А в 8 поставь не Go To M, а Exit Do

Вообще убери. Уже есть условие

Visual Basic
1
While Y >= 0



1



0 / 0 / 0

Регистрация: 13.12.2011

Сообщений: 6

13.12.2011, 18:25

 [ТС]

4

Цитата
Сообщение от SoftIce.net
Посмотреть сообщение

11 и 12 строку поменяй местами, у меня был точно такой же случай.
А в 8 поставь не Go To M, а Exit Do

Спасибо, помогло)



0



IT_Exp

Эксперт

87844 / 49110 / 22898

Регистрация: 17.06.2006

Сообщений: 92,604

13.12.2011, 18:25

Помогаю со студенческими работами здесь

Выясните, есть ли в слове Х хотя бы одна из букв «о» или «а»
№1) Выясните, есть ли в слове Х хотя бы одна из букв &quot;о&quot; или &quot;а&quot;.

Дана строка, состоящая из слов, разделенных пробелом. Определить количество слов, в которых есть хотя бы одна буква «а», или «А»
Дана строка, состоящая из слов, разделенных пробелом. Определить количество слов, в которых есть…

Непонятная ошибка » For loop control variable must have ordinal type»
unit Unit3;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics,…

Патерн «прототип» не работает, выдаёт ошибку «недопустимый вызов нестатической ф-ции», где я в коде ошибка?
Вот мой код…

#include &lt;iostream&gt;
#include &lt;Windows.h&gt;
#include &lt;vector&gt;
#define vrom…

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

Или воспользуйтесь поиском по форуму:

4

  1. Mar 8th, 2011, 03:27 PM


    #1

    tribeorange is offline

    Thread Starter


    New Member


    Resolved [RESOLVED] Compile Error:Loop Without Do

    I get a compile error saying,
    Loop Without do. I really have no idea what that means. I’d appreciate any help i could get.

    Code:

    ' ok?
    If ((WeekdayName(Weekday(LoanExpiryDate - 1)) = "Saturday") Or (WeekdayName(Weekday(LoanExpiryDate - 1)) = "Sunday") Or (libraryopendate = False)) Then
    ' no good! either the date we're trying is in a weekend or its when the library is open, add one onto the date and try again
    LoanExpiryDate = LoanExpiryDate + 1
    Else
    dateok = True
    End If
    Loop
    End Sub


  2. Mar 8th, 2011, 03:36 PM


    #2

    Re: Compile Error:Loop Without Do

    Welcome to VBForums.

    You need a Do to go along with the loop. I’m not sure where you want it to be but this would compile:

    Code:

    Do
    If ((WeekdayName(Weekday(LoanExpiryDate - 1)) = "Saturday") Or (WeekdayName(Weekday(LoanExpiryDate - 1)) = "Sunday") Or (libraryopendate = False)) Then
    ' no good! either the date we're trying is in a weekend or its when the library is open, add one onto the date and try again
    LoanExpiryDate = LoanExpiryDate + 1
    Else
    dateok = True
    End If
    Loop


  3. Mar 8th, 2011, 04:08 PM


    #3

    tribeorange is offline

    Thread Starter


    New Member


    Re: Compile Error:Loop Without Do

    Thank you very much for the reply. is there anyway to PM you on here? perhaps by email? MSN?


  4. Mar 8th, 2011, 04:10 PM


    #4

    Re: Compile Error:Loop Without Do

    Beware that it will land you into an endless loop.. ultimately crashing your program.
    For it to work successfully, you need to provide some exit condition from the loop
    e.g.

    Code:

    'Method 1
    Do While (condition)
    ...
    Loop
    
    'Method 2
    Do
    ...
    Loop While (condition)
    
    'Method 3
    Do
    ...
    If (some condition) Then Exit Do
    ...
    Loop

    There are more ways, but one of these three should suffice.


  5. Mar 8th, 2011, 04:14 PM


    #5

    tribeorange is offline

    Thread Starter


    New Member


    Re: Compile Error:Loop Without Do

    Thanks for the reply Pradeep. Really appreciate it. Check your PM when you get a chance


  6. Mar 8th, 2011, 04:32 PM


    #6

    Re: Compile Error:Loop Without Do

    Sorry I don’t answer coding questions via PM. It defeats the purpose of this forum.
    Please post your question here and I’ll help you in whatever way I can.


  7. Mar 8th, 2011, 04:48 PM


    #7

    tribeorange is offline

    Thread Starter


    New Member


    Re: Compile Error:Loop Without Do


  8. Mar 8th, 2011, 05:04 PM


    #8

    Re: Compile Error:Loop Without Do

    Is this what you’re trying to do?

    Code:

    Do Until dateok = True
        ' ok?
        If ((WeekdayName(Weekday(LoanExpiryDate - 1)) = "Saturday") Or (WeekdayName(Weekday(LoanExpiryDate - 1)) = "Sunday") Or (libraryopendate = False)) Then
            ' no good! either the date we're trying is in a weekend or its when the library is open, add one onto the date and try again
            LoanExpiryDate = LoanExpiryDate + 1
        Else
            dateok = True
        End If
    Loop


Понравилась статья? Поделить с друзьями:

Читайте также:

  • Logwindows error begin stack for uat
  • Login error there was an error making that request please try again later
  • Libusb error codes
  • Libreoffice только для чтения как изменить
  • Libpng warning iccp known incorrect srgb profile python как исправить

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии