Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.03.2013, 15:49   #1
Корабль
Пользователь
 
Регистрация: 05.12.2012
Сообщений: 14
По умолчанию VBA Excel Findnext некорректно работает

Привет
Стоит задача написать макрос для автоматического построения графиков. Каким образом это пока работает: на основе данные создается табличка, по которым будем строить. Расставляются заголовки и марки для работы (слова начало и конец, для определения величины таблицы)

Далее я ищу фразу начало, определяю всякие штучки и строю графики по 1й таблице, все прекрасно, все работает. Но дальше я использую FindNext, чтобы найти следующую таблицу и он выдает рандомные значения, например слово 2ое начало в этом файле имеет координаты (18,5), а конец - (46,5). И в итоге код впадает в бесконечный цикл(

Подскажите что не так?


Код:
Sub postroenie()

Application.ScreenUpdating = False

Dim N, K, R  As Range  'Начало, конец и рэйндж, где искать
Dim sh1 As Worksheet
Dim Nr, Nc, Kr, Kc As Integer   'координаты таблички
Dim Ngr As Integer  'колво графиков в этой табличке
Dim i As Integer    'число графиков, именя графиков
Dim j, g As Integer 'Что то вроде массштаба, используется для расположения
Dim x, y As Integer 'координаты ячейки, от которой строим графики

x = ActiveCell.Top
y = ActiveCell.Left
Set sh1 = ActiveSheet
Set R = sh1.[a:z]


    
    Set N = R.Find(what:="начало", LookIn:=xlValues, lookat:=xlWhole)
    Set K = R.Find(what:="конец", LookIn:=xlValues, lookat:=xlWhole)

If N Is Nothing Or K Is Nothing Then
    GoTo 1
End If

    FirstAd = N.Address
    i = 1
    j = 0
    

Do
'вычисляем координаты таблицы
    g = 0
    Nr = N.Row + 2
    Nc = N.Column
    Kr = K.Row - 1
    Kc = K.Column
    Ngr = Kc - Nc
    
  
    j = j + 1
    
    'строим графики -------------------------
    
    
   
    For i = i To i + Ngr - 1
   
    
Set mychart = Charts.Add

   With mychart
    .SetSourceData Source:=sh1.Range(sh1.Cells(Nr, Nc + g + 1), sh1.Cells(Kr, Nc + g + 1))
    .ChartType = xlLineMarkers
    .ApplyChartTemplate ("ссылка на шаблон")
    .SeriesCollection(1).XValues = sh1.Range(sh1.Cells(Nr, Nc), sh1.Cells(Kr, Nc))
    .Name = i
    .HasTitle = True
    .ChartTitle.Text = sh1.Cells(Nr - 1, Nc + g+1).Value & ", " & N.Offset(, 1).Value & ", " & N.Offset(, 2).Value
    .ChartTitle.Font.Name = "Times New Roman"
    .ChartTitle.Font.Size = 8
    .Location Where:=xlLocationAsObject, Name:=sh1.Name
        
    End With
          
    
With sh1.ChartObjects(i)
.Top = x + j * 150
.Left = y + g * 250
End With



g = g + 1
Next i
    'закончили с построением---------------------------------
'вот здесь  значения N и K становятся не теми(
    
    Set N = R.FindNext(N)
    Set K = R.FindNext(K)
    
Loop Until FirstAd = N.Address

1:

Application.DisplayAlerts = True
End Sub
Корабль вне форума Ответить с цитированием
Старый 29.03.2013, 15:53   #2
Корабль
Пользователь
 
Регистрация: 05.12.2012
Сообщений: 14
По умолчанию

а если ставлю find со штучкой after:=N, то тоже не то совсем выдает
Корабль вне форума Ответить с цитированием
Старый 29.03.2013, 16:02   #3
Корабль
Пользователь
 
Регистрация: 05.12.2012
Сообщений: 14
По умолчанию

вот файлик с табличкой
Вложения
Тип файла: zip Книга1.zip (6.6 Кб, 10 просмотров)
Корабль вне форума Ответить с цитированием
Старый 29.03.2013, 16:57   #4
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

http://programmersforum.ru/showthread.php?t=231684

в этой теме обсуждается подобный случай
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 29.03.2013, 17:24   #5
Корабль
Пользователь
 
Регистрация: 05.12.2012
Сообщений: 14
По умолчанию

DiemonStar, вы читали, что написано в теме?
мне не нужно выходить из цикла поиска, в смысле, я знаю как это делается
возможно у меня в коде ошибка и поэтому findnext работает через зад. Он находит ячейки, где и в помине не было искомого значения
Корабль вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Оператор if работает некорректно Night_Devil Общие вопросы по Java, Java SE, Kotlin 1 04.12.2012 11:49
Некорректно работает программа Dimakat Помощь студентам 2 07.09.2010 14:54
Почему не работает FindNext klimpashka23 Microsoft Office Excel 0 29.09.2009 23:23
Некорректно работает запрос zulu80 БД в Delphi 10 16.02.2009 13:35