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

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

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.05.2011, 09:59   #1
Nix128
Пользователь
 
Регистрация: 09.02.2011
Сообщений: 11
По умолчанию не могу найти ошибку

Здравствуйте!
помогите пожалуйста разобраться с кодом.
Код:
Private Sub Worksheet_Change(ByVal Target As Range)

    If Target.Column = 2 Then
Sheets("Счет").Select
n1 = 19
Dim tovar(20)
Dim kol(20)
Dim rub(20)
For n = 0 To 20
tovar(n) = Cells(n1, 2)
kol(n) = Cells(n1, 7)
rub(n) = Cells(n1, 8)
If tovar(n) = "" Then n = 20
n1 = n1 + 1
Next n
n1 = 16

For n = 0 To 20
фактура.Cells(n1, 3).Value = kol(n)
фактура.Cells(n1, 4).Value = rub(n)
If tovar(n) = "" Then n = 20
n1 = n1 + 1
Next n
n1 = 22
Sheets("Накладная").Select
For n = 0 To 20
Cells(n1, 10) = kol(n)
Cells(n1, 11) = rub(n)
If tovar(n) = "" Then n = 20
n1 = n1 + 1
Next n
inn:
Sheets("Счет").Select
inn = Cells(13, 3)
Nam = Cells(12, 3)
Sheets("Счет-фактура").Select
Cells(10, 2) = Nam
Cells(12, 2) = inn
Sheets("Счет").Select
End If
End Sub
при записи на лист данных код работает с начала.
помогите пожалуйста.



___________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!
Модератор.

Последний раз редактировалось Serge_Bliznykov; 24.05.2011 в 10:17.
Nix128 вне форума Ответить с цитированием
Старый 24.05.2011, 10:32   #2
Alex_ST
Пользователь
 
Аватар для Alex_ST
 
Регистрация: 04.12.2009
Сообщений: 28
По умолчанию

Сразу, не вникая, что и куда пишется:
1. А где у вас заполняются данными массивы?
Вы же их только объявляете
Код:
Dim tovar(20)
Dim kol(20)
Dim rub(20)
но не заполняете. Поэтому сразу идёт выход из всех циклов, которые, кстати, лучше делать не присваиванием счётчикам цикла последнего значения, а операторами Exit For

2. Как-то странно вы пытаетесь обратиться к ячейкам листа "фактура"
Код:
фактура.Cells(n1, 3).Value = kol(n)
фактура.Cells(n1, 4).Value = rub(n)
может быть, всё-таки
Код:
Sheets("фактура").Cells(n1, 3).Value = kol(n)
Sheets("фактура").Cells(n1, 4).Value = rub(n)
Alex_ST вне форума Ответить с цитированием
Старый 24.05.2011, 11:21   #3
Nix128
Пользователь
 
Регистрация: 09.02.2011
Сообщений: 11
По умолчанию

For n = 0 To 20
tovar(n) = Cells(n1, 2)
kol(n) = Cells(n1, 7)
rub(n) = Cells(n1, 8)
If tovar(n) = "" Then n = 20
n1 = n1 + 1
Next n
вот здесь.
но почему идет выход на начало програмы
когда я хочу записать в ячейку листа фактура.
Nix128 вне форума Ответить с цитированием
Старый 24.05.2011, 11:55   #4
Alex_ST
Пользователь
 
Аватар для Alex_ST
 
Регистрация: 04.12.2009
Сообщений: 28
По умолчанию

Без примера гадать трудно...
Ну, например так:
Код у вас размещён в стандартном модуле или модуле листа?
Выражение типа
Код:
tovar = Cells(1, 2)
, размещённое в коде модуля листа, вернёт в tovar значения из ячейки В1 ЭТОГО ЖЕ ЛИСТА!
Если код размещён в стандартном модуле, то ОБЯЗАТЕЛЬНО нужно перед Cells указывать, с какого листа брать данные.
Пройдите код в пошаговом режиме. Проверьте значения, заносимые в массивы. скорее всего у вас сразу же в первом проходе цикла пишется
Код:
tovar(0)=""
, а потому и идёт выход из цикла.
Alex_ST вне форума Ответить с цитированием
Старый 24.05.2011, 12:35   #5
Nix128
Пользователь
 
Регистрация: 09.02.2011
Сообщений: 11
По умолчанию

посмотрите косяк.Пожалуйста!!
Вложения
Тип файла: rar БезНал.rar (16.6 Кб, 6 просмотров)
Тип файла: txt copy code.txt (855 байт, 147 просмотров)

Последний раз редактировалось Nix128; 24.05.2011 в 12:48.
Nix128 вне форума Ответить с цитированием
Старый 24.05.2011, 13:55   #6
Alex_ST
Пользователь
 
Аватар для Alex_ST
 
Регистрация: 04.12.2009
Сообщений: 28
По умолчанию

Ну, например, так:
Код:
Private Sub Worksheet_Change(ByVal Target As Range)
   Dim TOVAR As Range, KOLVO As Range, CENA As Range
   Dim INN, NAM As String
   If Not Intersect(Target, Range("B19:B38")) Is Nothing _
      Or Not Intersect(Target, Range("G19:G38")) Is Nothing _
      Or Not Intersect(Target, Range("H19:H38")) Is Nothing Then

      With Sheets("Счет")
         INN = .Range("C13")
         NAM = .Range("C12")
         Set TOVAR = .Range("B19:B38")
         Set KOLVO = .Range("G19:G38")
         Set CENA = .Range("H19:H38")
      End With

      With Sheets("Счет-фактура")
         .Range("B10").Value = NAM
         .Range("B12").Value = INN
         .Range("A16:A35").Value = TOVAR.Value
         .Range("C16:C35").Value = KOLVO.Value
         .Range("D16:D35").Value = CENA.Value
      End With

      With Sheets("Накладная")
         .Range("B22:B41").Value = TOVAR.Value
         .Range("J22:J41").Value = KOLVO.Value
         .Range("K22:K41").Value = CENA.Value
      End With

   End If
End Sub
Вложения
Тип файла: zip БезНал2.zip (19.3 Кб, 9 просмотров)
Alex_ST вне форума Ответить с цитированием
Старый 24.05.2011, 14:38   #7
Nix128
Пользователь
 
Регистрация: 09.02.2011
Сообщений: 11
По умолчанию

Большое спасибо.
Но я вроде тоже нашел надо просто отключить обработку событий.
но Ваша прога намного лучше
Еще раз СПАСИБО.

Тема закрыта.
Nix128 вне форума Ответить с цитированием
Старый 24.05.2011, 14:56   #8
Alex_ST
Пользователь
 
Аватар для Alex_ST
 
Регистрация: 04.12.2009
Сообщений: 28
По умолчанию

Ну, и ещё в качестве бонуса:
- подправил формулы (СУММ короче, чем много плюсиков)
- добавил очень удобную пользовательскую функцию для вывода суммы прописью (но чтобы она работала, в Ёкселе должны быть разрешены макросы)

P.S. Формулы я обычно в своих таблицах выделяю синим шрифтом: на распечатке всё равно не видно, а на дисплее видно, куда данные не нужно вносить с клавиатуры.
Вложения
Тип файла: zip БезНал3.zip (30.4 Кб, 10 просмотров)
Alex_ST вне форума Ответить с цитированием
Старый 24.05.2011, 15:05   #9
Nix128
Пользователь
 
Регистрация: 09.02.2011
Сообщений: 11
По умолчанию

Огромное спасибо выручил.
Nix128 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не могу найти ошибку cargo29 Общие вопросы Delphi 12 15.01.2011 11:00
не могу найти ошибку Berg_13 Помощь студентам 0 16.05.2010 21:53
не могу найти ошибку! novi4ok_Delphi Помощь студентам 4 24.04.2010 21:46
Не могу найти ошибку С\С++ Айдар Помощь студентам 1 08.03.2010 18:16
С++. не могу найти ошибку world12_tk Помощь студентам 3 25.07.2009 10:47