Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Excel VBA

Автор: Yuk
Дата сообщения: 11.07.2006 22:11
SuperMaximus
А если попробовать закрыть документ перед выходом из ворда?
WordDoc.Close SaveChanges:=wdDoNotSaveChanges
Set WordDoc = Nothing
WordApp.Quit
Set WordApp = Nothing
Возможно, проблема в том, что DataSource остается открытым?
Автор: SuperMaximus
Дата сообщения: 11.07.2006 22:30
Yuk
Да, я тоже так думал, но увы... excel.exe продожает висеть в памяти...
Мне тут один человек ответил из западного форума

First implicit instantiation of word found here:
.ActiveDocument.MailMerge.OpenDataSource name:=.ActiveDocument.Path & "\WORK.xls", _

Ссылаясь на то, что неявно обращение происходит к .ActiveDocument.Path & "\WORK.xls"

Проблема где-то здесь...
Автор: SERGE_BLIZNUK
Дата сообщения: 12.07.2006 04:24
Yuk

Цитата:

=КОНМЕСЯЦА(ДАТАЗНАЧ("1/7/2006");0)

КОНЕЦМЕСЯЦА = EOMONTH
Для определения дня:

извините, туплю... но хочу разобраться...
что и как мне нужно набрать, чтобы этот код заработал?
может быть нужно поставить какой-нибудь add-on к Excel ? Повторяю, в моем Excel 2003 через 'Вставка' / 'Функция' / 'Все в алфавитном порядке' - такой функции НЕТ! $-(
Если вставляю вышеуказанный код в ячейку, выдаёт ошибку #ИМЯ?...
Автор: RobinStone
Дата сообщения: 12.07.2006 05:39
Господа, подскажите пожалуйста такой момент
можно ли мне сделать выпадающий список в ячейке
и если да, то как? делательно без использования элементов управления...
ведь когда что-то вводишь эксьль может делать предложения по уже вводившися ранее в этот столбец значениям а мне, например надо чтобы пользователь делал выбор из какого-то количества значений

Например, есть три колонки:
1. Назначение платежа: выпадающий список из N-го количества элементов
2. Сумма - просто сумма
3. Сотрудник - опять же выпадающий список из другого количества элементов

Как это примерно можно реализовать?

Заранее спасибо
Автор: Yuk
Дата сообщения: 12.07.2006 08:03
RobinStone
Задавали не раз в Excel FAQ:
http://forum.ru-board.com/topic.cgi?forum=5&topic=19106&start=280#4

SERGE_BLIZNUK

Цитата:
такой функции НЕТ
У тебя эксель русский или английский?

SuperMaximus
Я тоже именно на эту строку подумал. Пока решения не знаю. Пиши, если что прояснится.
Автор: Virtualexx
Дата сообщения: 12.07.2006 08:38
SERGE_BLIZNUK
До того, как вводить функцию в ячейку: сервис - надстройки - активировать "пакет анализа", не забыть формат соответствующей ячейки изменить на "дата".

Yuk

Цитата:
Макросы автоматические? То есть запускаются обработчиком событий или юзером?

Юзером.

Всем спасибо за помощь!
Автор: vadimo
Дата сообщения: 12.07.2006 10:20
комрадс, нид хелп!
задача:
из существующей excel-книги отправить по почте определенный лист как вложение.
т.е. надоть создать пустую книгу, в нее вставить этот лист, книгу сохранить как-то и отправить эту книгу аттачментом. неполучается чото у меня... (кстати, возможно я усложнил алгоритм, поправьте плиз)

Sub Send()

With Workbooks("vibrators.xls").Worksheets("Изменения")
.Sheets(9).Copy

' не знаю как делать save as... и чего вообще дальше делать, не пойму как перекинуть лист в некую конкретную книгу, еще не знаю как переключиться на книгу, которую excel создал командой .sheets().copy, положив в нее этот лист.
проперти destination - какая-то лажа, не знаю как его присунуть

' .SendMail Recipients:="pupkin@pupkins.cn", Subject:="Изменения " & Format
(Date, "dd/mmm/yy")
.Close SaveChanges:=False
End With
End Sub
Автор: Virtualexx
Дата сообщения: 12.07.2006 11:45

Код: =КОНМЕСЯЦА(ДАТАЗНАЧ("1/7/2006");0)
Автор: SERGE_BLIZNUK
Дата сообщения: 12.07.2006 12:00
Virtualexx

Цитата:
До того, как вводить функцию в ячейку: сервис - надстройки - активировать "пакет анализа", не забыть формат соответствующей ячейки изменить на "дата".

Вай, шайтан!! Точно!! Спасибо большое! Разумеется, у меня все пакеты выключены были... (более того, я про это вообще не знал...)
Автор: Anjin_Kazawa
Дата сообщения: 12.07.2006 12:16
Virtualexx

Цитата:
А реально ли, вместо "1/7/2006" указать текущий год, чтобы не изменять параметры функции в 2007 году и так далее?

Можно так, последнее число теущего месяца.

Код: =КОНМЕСЯЦА(ТДАТА();0)
Автор: Yuk
Дата сообщения: 12.07.2006 16:24
Так все таки КОНМЕСЯЦА или КОНЕЦМЕСЯЦА (так у меня в русской справке, самого эксела нет)? Или это от версии зависит?
Автор: Anjin_Kazawa
Дата сообщения: 12.07.2006 16:35
Yuk
Проверить на разных версиях к сожалению не могу, у меня Excel 2003 SP2 и работает так =КОНМЕСЯЦА()
Автор: RobinStone
Дата сообщения: 13.07.2006 04:06
Господа, подскажите пожалуйста новичку:
1. Как сделать вставку строки с определенными данными, ну или просто вставить новую строку в книгу по нажатию какой-то кнопки на форме (юрез заполняет форму, и потом данные из нее вставляются в новую строку)
2. Как элементу список, на форме задать массив значений из определенного диапозона
3. Как скрыть определенный Лист в списке листов...


Заранее спасибо
Автор: Yuk
Дата сообщения: 13.07.2006 08:42
RobinStone
1. Форма откуда? Самодельная? При вставке строки надо раздвигать строки? Если да, то используется, например,
Код: Range("A5:B5").Insert Shift:=xlDown
Автор: RobinStone
Дата сообщения: 13.07.2006 08:46
Да, форма самодельная.
Спасибо за информацию - буду пробывать

А в это свойство что пишется (ListFillRange)?
Т.е. я открываю свойства объекта, нахожу это свойство, пишу в него например A5:A15 и он в нем будет показывать список из этих ячеек?

Добавлено:
И еще небольшой вопросик
как можно в отдельно взятой книге, желательно при помощи VBA
при загрузке убрать все меню и вставить свои?

Добавлено:

Цитата:
3. Формат - Лист - Спрятать

А средствами VBA?
Мне надо чтобы при запуске приложения все листы были спрятаны, а при нажатии на кнопочки (макросы) нужные листы открывались



Добавлено:
Ой... уже сам нашел:
Sheets("Имя_Листа").Visible = True/False
))
Автор: Yuk
Дата сообщения: 13.07.2006 09:22
RobinStone

Цитата:
Т.е. я открываю свойства объекта, нахожу это свойство, пишу в него например A5:A15 и он в нем будет показывать список из этих ячеек?
Именно так. Адресация такая же, что и для формул. Или можно перечислить величины через запятую.


Цитата:
при загрузке убрать все меню и вставить свои

Надо работать с коллекцией CommandBars. Можно найти много примеров в гугле. Чтобы меню изменялось при открытии книги, сделать макросы Auto_Open и Auto_Close для восстановления. Только я не думаю, что изменение меню не повлияет на весь эксель.
Автор: RobinStone
Дата сообщения: 13.07.2006 09:29
ну... на весь эксель пусть влияет
я же могу при закрытии книги вернуть все как было
Автор: DONRU1
Дата сообщения: 13.07.2006 12:29
Это опять я, со своими идеями.
Мысль следующая: Есть некий шаблон, куда вносятся данные. В нем несколько строк (10) и столбцов 4. Задача: как сделать так чтобы заполнять последующу строчку можно было после заполнения предыдущей. Т.е. если заполнил строку 1 то достпной для ввода становится строка 2 и т.д.
Сейчас я сделал пассивну защиту через условное форматирование - т.е. если предыдущая строка не заполнена, то в текущей в ячейка цвет шрифта = цвету заливки. (белый = белому). Т.е. сейчас данный можно внести в любую ячейку, но они отображаться не будут. Но юзвери этого не поймут.
Автор: RobinStone
Дата сообщения: 13.07.2006 12:36
Можно попробывать сделать через защиту ячеек
Т.е. делаешь все ячейки кроме первой защищенными и запрещаешь изменение или вообще даже выделение. Потом по событию OnCange. смотришь, если была изменена первая ячейка - разблокируешь вторую и т.д.

Либо просто по событию OnCange проверяешь все ячейки, если например первая незаполнена, а заполнили вторую, стираешь и ставишь фокус на первую
Автор: sk4Nk
Дата сообщения: 13.07.2006 13:59
Всем добрый день. Необходим макрос который будет вырезать первые 12 символов из ячейки, например значение в ячейке: 01.01.1900 0:23:12, необходимо привести к виду: 0:23:12, т.е. убрать первые 12 символов. Заранне спасибо за помощь.
Автор: Anjin_Kazawa
Дата сообщения: 13.07.2006 14:55
sk4Nk

Цитата:
Всем добрый день. Необходим макрос который будет вырезать первые 12 символов из ячейки, например значение в ячейке: 01.01.1900 0:23:12, необходимо привести к виду: 0:23:12, т.е. убрать первые 12 символов. Заранне спасибо за помощь.

Зачем в такой ситуации макрос? Если можно просто формулами разрулить

Код: =ПОДСТАВИТЬ(B2;ЛЕВСИМВ(B2;12);"")
Автор: Yuk
Дата сообщения: 13.07.2006 17:22
sk4Nk
Если макрос, то, например, так
Код: Selection.Value=Mid(Selection.Value,13)
Автор: sk4Nk
Дата сообщения: 14.07.2006 08:34
Все дело в том что эксель представляет время как число, например 0:12:32 будет как 0,4625394...и воспользоваться функцией LEFT не удастся....
Автор: Yuk
Дата сообщения: 14.07.2006 08:51
sk4Nk
Тогда так и надо писать, что это дата. Тут вариантов уйма. Если просто надо показать время, можно обойтись одним форматированием. Если нужно "откусить" время", подойдет например =MOD(B2,1), естественно с соответствующим форматированием.
Если нужен текст =TEXT(B2,"hh:mm:ss").
Автор: DeadVillage
Дата сообщения: 15.07.2006 08:19
[удалено]
Автор: Denis_Kokyev
Дата сообщения: 15.07.2006 13:51
Что-то никак не могу разобраться с этим VBA, не может же он быть
сложнее чем pascal и autoit (этот то вобще практически vba в чистом
виде). Прочел уже всю ветку ветку, скачал из шапки корявый и
непоследовательный help, нашёл книжку "VBA для чайников" (5 mb). От
последнего вообще в голове каша. Многие вещи прояснились, но многоие
так и остались для меня загадкой. Логика построения что-то мне не
даётся...

Вот, например, простая задача:
Приходит прайс, надо чтоб при нажатии кнопки, строчка на которой стоит
курсор, копировалсь бы, например, на лист 3, там подсчитывалась бы
сумма, потом происходил бы возврат на лист 1 и снималось бы выделение.
При следующем нажатии клавиши макроса - строка бы вставлялась бы ниже
предыдущей. В итоге на листе 3 сформировался бы список необходимых
товаров с просчитанной суммой.


Код: Sub Макрос3()
'
' Макрос записан 14.07.2006 (Denchik)
'

'

Sheets("Лист1").Select
Range(Selection, Selection.End(xlToRight)).Select
Selection.Copy
Sheets("Лист3").Select
ActiveSheet.Paste
SendKeys "{Down}"
' Sheets("Лист1").Select
' SendKeys "{ESC}"
End Sub
Автор: Yuk
Дата сообщения: 16.07.2006 09:01
DeadVillage

Цитата:
и не залезая в VBA

Не совсем понятно, что мы тогда делаем в форуме по VBA?

Denis_Kokyev
Мне нравится твой подход. Добивай этот VBA и все у тебя получится.

Макрос на VBA - это не совсем воспроизведение твоих действий. Надо разобраться в объектной модели экселя.
Попробуй во такой код:

Код: Sub test()
Range(Selection.End(xlToLeft), Selection.End(xlToRight)).Copy ' копируем
Sheets("Лист3").Activate
ActiveSheet.Paste
r = Selection.Row ' номер текущей строки
c1 = Selection.End(xlToLeft).Column ' номер первого столбца
cend = Selection.End(xlToRight).Column ' номер последнего столбца
Cells(r, cend + 1).Value = WorksheetFunction.Sum(Range(Cells(r, c1), Cells(r, cend))) ' считаем сумму
Cells(r + 1, c1).Select ' на следующую строку
Sheets("Лист1").Activate
Application.CutCopyMode = False ' Снимаем выделение
End Sub
Автор: Denis_Kokyev
Дата сообщения: 16.07.2006 16:01
Yuk
Спасибо за помощь! Я сейчас нахожусь в состоянии культурного шока от
VBA. Победить бы его быстрее...
Вот чутка переделал Ваш код (чтоб сумма считалать по одной колонке, и
вставлялась в одну ячейку):

Код:
Sub test()
Range(Selection.End(xlToLeft), Selection.End(xlToRight)).Copy ' копируем
Sheets("Лист3").Activate
ActiveSheet.Paste
r = Selection.Row ' номер текущей строки
c1 = Selection.End(xlToLeft).Column ' номер первого столбца
cend = Selection.End(xlToRight).Column ' номер последнего столбца
Cells(1, cend+1).Value = WorksheetFunction.Sum(Range(Cells(1, cend), Cells(r, cend))) ' считаем сумму
Cells(r + 1, c1).Select ' на следующую строку
Sheets("Лист1").Activate
Application.CutCopyMode = False ' Снимаем выделение
End Sub
Автор: SERGE_BLIZNUK
Дата сообщения: 17.07.2006 05:47

Цитата:
Суммы после добавления каждой строчки: 366, 863,15, 1759,85
Откуда берутся дробные части при сложении целых чисел?

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

Добавлено:

Цитата:
2. Как получить последнюю строчку по вертикали

вариантов наверняка много... попробуй так...

MaxRow = ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Row
Автор: Yuk
Дата сообщения: 17.07.2006 07:07
Denis_Kokyev

Цитата:
1. Копируется не вся строчка, а только до первой пустой.

Это свойство End. Для всей строчки используй Selection.EntireRow.

Цитата:
2. Как получить последнюю строчку по вертикали
А чем тебе не нравится переменная r? Можно также использовать End(xlDown) или UsedRange. А вот откуда начинать суммирование ты решил? Всегда с первой строчки? Или с End(xlUp)?

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768

Предыдущая тема: Стоит ли переходить с Билдера на Делфи?


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.