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

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

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

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

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 23.06.2008, 10:56   #51
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Цитата:
Сообщение от SAS888 Посмотреть сообщение
лучше, т.к. позволяет изменять в контролируемом диапазоне несколько данных одновременно (копировать - вставить, или очистить).
САС !
Подкупает малый объем, отсутствие циклов.
Вообще удивлен, что в литературе, что на форумах, отсутствием темы ввода данных с клавы, где описание оператора "Input"?
Тот что я знаю, ВБА не принял? О метках, вообще, слова не встречал?
Вот пример, движения курсора, с вывода кода, нажатой клавиши.
VBA его принял, но это QBASIC, родитель, ......????
1 : D$ = INKEY$
IF D$ = "" THEN 1
IF D$ = CHR$(27) THEN END
IF LEN(D$) = 2 THEN D = ASC(RIGHT$(D$, 1)) ELSE 2
2 : PRINT D$;
GOTO 1

Последний раз редактировалось valerij; 24.06.2008 в 01:15.
valerij вне форума
Старый 23.06.2008, 11:30   #52
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Потому, что в VBA функция Input (number, [#]filenumber) - используется для работы с файлами. Считывает одну компоненту файла.
А функция InputBox (prompt[, title] [, default] [, xpos] [, ypos] [, helpfile, context]) - выводит окно с запросом на ввод значения с клавиатуры. Параметры такие же, как и у функции MsgBox.
P.S. Для уменьшения объема вопросов, пользуйтесь VBA Help (в VBE это "F1").
Чем шире угол зрения, тем он тупее.
SAS888 вне форума
Старый 24.06.2008, 01:46   #53
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

САС!
Спасибо, все работает, НО:
Я вообще теперь не знаю, какой и применять?
Да, там копировать, стирать, мона только две строчки, не совсем хорошо
А так мона все:
Код:
If Not Intersect(Target, Range("D3:D1477")) Is Nothing Then
        With Range(Target.Address)
            .Offset(, 2) = "=(RC[-4]+RC[-2])*RC[-1]" 'Это F = (D+B) * E
            .Offset(, 2).Value = .Offset(, 2).Value
        End With
    End If
If Not Intersect(Target, Range("B3:B1477")) Is Nothing Then
        With Range(Target.Address)
           .Offset(, 4) = "=(RC[-4]+RC[-2])*RC[-1]" 'Это F = (D+B) * E
           .Offset(, 4).Value = .Offset(, 4).Value
        End With
    End If
Без формул, я смотрю, не обойтись, как сложить(в Вашем решении):
F38 = СУММ(F3:F37) ?

САС, Ваше мнение 1, 2 или 3 макрос??
Забыл, к вашему решению + цикл, но почему формула "=SUM(R[-35]C:R[-1]C)", охватывает столбец "I" ? Я намеренно, обхожу его("B3:H37", "J3:K37"), а то он там, все № накладных слаживает!
Код:
For iCount& = 0 To 30
                If Not Intersect(Target, .Cells) Is Nothing Then
                  With Sh.Range("E38:H38", "J38:K38").Offset(iCount& * 48)
                        .Value = "=SUM(R[-35]C:R[-1]C)"
                            ' .Value = .Value
                  End With
                End If
  Next

Последний раз редактировалось valerij; 24.06.2008 в 02:34.
valerij вне форума
Старый 24.06.2008, 05:37   #54
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

1) Попробуйте разные варианты (макросы, формулы). Как Вам больше подходит, так и лучше.
2) Строка кода
Код:
Range("E38:H38", "J38:K38")
будет ссылаться на диапазон "E38:K38" (см. Help, св-ва Range). Чтобы исключить ячейку столбца "I", можно, например, использовать
Код:
Union([E38:H38], [J38:K38])
Чем шире угол зрения, тем он тупее.

Последний раз редактировалось SAS888; 24.06.2008 в 05:39.
SAS888 вне форума
Старый 24.06.2008, 10:16   #55
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Цитата:
Сообщение от SAS888 Посмотреть сообщение
Как Вам больше подходит, так и лучше.
Как это определить? Как замерить, скорость макросов, а потом сравнить?
Цитата:
2) Чтобы исключить ячейку столбца "I", можно, например, использовать
Код:
Union([E38:H38], [J38:K38])
У мея не получилось, ни как:
Range([E38:H38], [J38:K38])
Range(Union([E38:H38], [J38:K38]))
Я не понимаю по английски, а то как в Help-е, так проще разделить диапазоны
valerij вне форума
Старый 24.06.2008, 10:48   #56
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

1) Метод Union можно применять только на активном листе.
Для любого листа можно так:
Код:
Sh.Range("E38:H38, J38:K38")
Обратите внимание на расстановку кавычек.
2) Время выполнения макроса можно замерить, например, так:
Код:
Sub TimeMacro()
    iTimer! = Timer
    
    'Здесь должен быть код Вашей программы.
    
    MsgBox "Время выполнения макроса составило " & _
    Timer - iTimer! & " сек.", vbExclamation, ""
    
End Sub
Чем шире угол зрения, тем он тупее.
SAS888 вне форума
Старый 24.06.2008, 11:09   #57
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Цитата:
Сообщение от SAS888 Посмотреть сообщение
1) Метод Union можно применять только на активном листе.
Время выполнения макроса можно замерить
SAS!!
Спасибо, пошел делать уроки!
valerij вне форума
Старый 24.06.2008, 13:33   #58
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Цитата:
Сообщение от SAS888 Посмотреть сообщение
Реализовать требуемые Вами формулы, при изменении ячеек любого из диапазонов с помощью метода Offset можно так:
Код:
If Not Intersect(Target, Range("D3:D1477")) Is Nothing Then
        With Range(Target.Address)
            .Offset(, 2) = (.Offset + .Offset(, -2)) * .Offset(, 1)  'Это F = (D+B) * E
           fSum = fSum + .Offset(, 2)
            .Offset(, 4) = (.Offset + .Offset(, -2)) * .Offset(, 3)     'Это H = (D+B) * G
        End With
    End If
SAS!
А почему нет накоплений в fSum ?
valerij вне форума
Старый 24.06.2008, 13:42   #59
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

А где цикл? Приведенный фрагмент кода присвоит переменной fSum значение ячейки Range(Target.Address).Offset(, 2) плюс то, что перед этим содержала переменная fSum.
Чем шире угол зрения, тем он тупее.
SAS888 вне форума
Старый 24.06.2008, 13:48   #60
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Цитата:
Сообщение от SAS888 Посмотреть сообщение
А где цикл? Приведенный фрагмент кода присвоит переменной fSum значение ячейки Range(Target.Address).Offset(, 2) плюс то, что перед этим содержала переменная fSum.
Первый ввод в Д3=100, fSum = 204
Второй ввод в Д4 =100, а fSum = 139, а не 204+139 ?
valerij вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
MsSQL - первый раз установил майкрософт SQL vados SQL, базы данных 16 19.07.2008 20:01
Первый баг (фото) mutabor Свободное общение 1 06.05.2008 11:51
Вроде на первый взгляд всЁ просто...... Solny6ko YasnoE Помощь студентам 4 17.09.2007 08:23
а первый взгляд просто.. Аlex Win Api 7 05.04.2007 18:34
конкурс программистов ! (первый конкурс) Alar Свободное общение 129 18.03.2007 00:50