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

» Excel VBA (часть 2)

Автор: Mishel971
Дата сообщения: 11.10.2009 17:44

Первый код необходимо изменить так:

Workbooks("Другая книга").Activate
intI = ActiveCell.Row
Автор: shalagram
Дата сообщения: 11.10.2009 17:45
Подскажите пожалуйста, извиняюсь может не в тему , но даже не знаю где и спросить...
Как можно повылавливать ,из базы данных клиентов, даты рождения и заставить , например оутлук, сообщать о датах.Ну поздравлять, рассылать там что нибудь.
Автор: mistx
Дата сообщения: 13.10.2009 08:34
Друзья, помогите плиз решить задачу.
имеются 2 документа - 1 - ворде, другой в екселе.
в ворд импортируются данные из excel, путем слияния.

Задача - при открытии ворда - чтоб открывался Excel.

1. в VBA подключил библиотеку
2. вставил код
Private Sub Document_Open()
ПутьКФайлу = """C:\Documents and Settings\Игорь\Рабочий стол\НТД.xls"""
CreateObject("WScript.Shell").Run ПутьКФайлу
End Sub

проблема - при открытии ворда, окрывается excel, но

вылезает сообщение, что файл уже используется мной
(так как я понимаю сначала он сливается)

пробывал этот код - вообще не открывает excel

Dim ExApp as Excel.Application
Dim ExWb as Excel.Workbook
ПутьКФайлу = "C:\Documents and Settings\Игорь\Рабочий стол\НТД.xls"
Set ExApp = New Excel.Application
Set ExWb = ExApp.Workbooks.Open (ПутьКФайлу)

Заранее благодарю за помощь!
Автор: ZlydenGL
Дата сообщения: 13.10.2009 08:42
mistx, на самом деле последний код работает, ты просто забыл дать инструкцию

Код: ExApp.Visible = True
Автор: mistx
Дата сообщения: 13.10.2009 09:28
ZlydenGL

Цитата:
ExApp.Visible = True


спасибо теперь открылось, но с примечанием (Для чтения)

в оперативе 2 процесса Excel

Как решить проблему?

Говорят можно без макросов как-то решить проблему?

P.S. запустил без макроса и нашел один процесс екселя, хотя самого документа не вижу
Автор: SIgor33
Дата сообщения: 13.10.2009 09:31
Есть таблица в EXCEL у ней в строке данные и формулы как развернуть данную строку в столбец (чтобы в столбце сохранились и данные и формулы)
Автор: ZlydenGL
Дата сообщения: 13.10.2009 09:31
mistx, скорее всего второй процесс - один из открытых ранее, но не сделанный видимым. Он-то файл и "держит" Вырубайте ВСЕ процессы Excel.exe в системе (только проследите, чтобы в "открытых официально" все нужные документы были сохранены) и запускайте еще раз. Как решить данную задачу БЕЗ макросов - не представляю

Добавлено:
SIgor33, функция "transpose" (ТРАНСП в русской версии) тебе в помощь А если задача разовая, то спец.вставка - выделить опцию внизу.
Автор: mistx
Дата сообщения: 13.10.2009 11:29
ZlydenGL
дело в том, что я проверил перед открытием процесса не было Excel.exe, когда открывая ворд он из екселя импортирует инфу, открывает его, но он фактически не видим.
Можно ли это как то обойти? Можно ли сделать первый процесс видимым?
Автор: ZlydenGL
Дата сообщения: 13.10.2009 11:45
mistx, правильно ли я понял, что ситуация такова?
1. Перед запуском документа Word в системе нет открытых процессов Excel.exe
2. В момент открытия документа Word в системе появляются ДВА процесса Excel.exe

Если так - воистину странно. Попробуйте такой код:


Код: ПутьКФайлу = "C:\Documents and Settings\Игорь\Рабочий стол\НТД.xls"

Dim ExApp as Excel.Application
Set ExApp = CreateObject("Excel.Application")
ExApp.Workbooks.Open ПутьКФайлу
ExApp.Visible = True
Автор: SIgor33
Дата сообщения: 13.10.2009 13:01
ZlydenGL

Цитата:
"transpose" (ТРАНСП в русской версии)

Спасибо за ценный совет
Автор: mistx
Дата сообщения: 13.10.2009 13:30
ZlydenGL

Цитата:
Если так - воистину странно. Попробуйте такой код:

попробывал все также.

понаблюдал

1. окрывается первый процесс
ПутьКФайлу = "C:\Documents and Settings\Игорь\Рабочий стол\НТД.xls"
2. потом происходит слияние
"При открытии данного документа будет выполнена данная команда SQL
данные из базы данных будут помещены в документ"
появляется второй процесс со статусом - только для чтения
Автор: ZlydenGL
Дата сообщения: 13.10.2009 13:37
mistx, а про слияние можно подробно? И вообще - для чего конкретно держать книгу октрытой - только для обновления данных в Ворде? Может тогда проще пересмотреть схему данных?

Или же тогда через GetObject() отлавливать уже открытое приложение и работать с ним...
Автор: mistx
Дата сообщения: 13.10.2009 13:49

Цитата:
И вообще - для чего конкретно держать книгу октрытой - только для обновления данных в Ворде?

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


Цитата:
Может тогда проще пересмотреть схему данных?

Есть альтернативы?
Автор: ZlydenGL
Дата сообщения: 13.10.2009 13:55
mistx, лехко!!! Например - ВЕСЬ текст договора хранится в Ёкселе (а-ля нечеткая база данных), по жмаканию на кнопку генерится ОДИН РАЗ документ MS Word со всеми необходимыми шапками/реквизитами/колонтитулами.

Если интересно - подробней давай через ЛС/мыло, а то тут уже оффтопить начинаем.

Добавлено:
Кстати, а что, книгу Ёкселя надо открыть только для обновления полей СЛИЯНИЯ?
Автор: mistx
Дата сообщения: 13.10.2009 14:05

Цитата:
подробней давай через ЛС/мыло

ок.
Цитата:
Кстати, а что, книгу Ёкселя надо открыть только для обновления полей СЛИЯНИЯ?

да. бухгалтера в ексель вводят новые данные по клиентам, потом тут же в ворде распечатывают договор.

Автор: ZlydenGL
Дата сообщения: 13.10.2009 14:08
Тогда вы точно тактическим лазером мух сшибаете Проще генерить единый документ Word без внешних линков - и в будущем целее будет, и работать проще.
Автор: Gmatagmis
Дата сообщения: 14.10.2009 17:29
Здравствуйте.

Подскажите, как разбить слово / строку String на символы в Variant
Или просто команду взять n-ый символ из String.

Спасибо.
Автор: ZlydenGL
Дата сообщения: 14.10.2009 18:57

Код: Dim St As String, myVar

St = "Строка для поиска"
myVar = Mid(St, 7, 1)
Debug.Print myVar
Автор: zvidrin
Дата сообщения: 17.10.2009 10:08
Доброго времени суток!

Суть проблемы в следующем:
Пишу небольшой макрос лдя экселя (excel 2007) и заметил такую странность (ну или просто не понимаю в чем дело) - на компе на работе вот такая конструкция

Итог_расчет_File_Name = Application.Workbooks("Создание_итога").Worksheets("Файлы").Cells(4, 3).Value

работает и не жужжит. Но тут пришлось корректировать тот же макрос дома и вот эта самая строка вызывает ошибку "run-time error 9". Вяснилось, что "Workbooks("Создание_итога")" и есть причина ошибки, типа "нет такой книги "Создание_итога", а вот такая конструкция "Workbooks("Создание_итога.xlsm")" ошибку уже не вызывает и все работает нормально.

Я конечно во всем макросе к именам книг добавил расширение и все заработало, но неприятный осадок остался от непонимания происходящего ... один и тот же эксель на одном компьютере возвращает ошибку, на другом нет ... От чего это может зависеть?
Автор: ecolesnicov
Дата сообщения: 17.10.2009 10:34
zvidrin
От настроек винды - показывать или нет расширения файлов. Устанавливается в Проводнике Windows.
Автор: jSergey
Дата сообщения: 18.10.2009 05:54
Как узнать количиство страниц печати на листе Excel?
Автор: SAS888
Дата сообщения: 19.10.2009 06:25
jSergey

Цитата:
Как узнать количиство страниц печати на листе Excel?

Проще всего, с помощью макроса XLM. Например, так:

Код: MsgBox ExecuteExcel4Macro("GET.DOCUMENT(50)")
Автор: Mishel971
Дата сообщения: 19.10.2009 23:53
Всем доброе время суток !

Опции списка элемента управления ListBox извлекаются из диапазона ячеек, определяемого свойством RowSourse. Наведя курсор мыши опция выделяется а значение опции записывается в ячейку листа, например так:

Worksheets("Лист1").Cells(intI, 1).Value=UserForm1.List1

Для того чтобы записать подряд (в следующую строку) одну и ту же опцию необходимо закрыть форму вместе с ListBox, после чего та же опция становится доступной для записи на лист.

Такой вопрос: как записать подряд одну и ту же опцию ListBox не закрывая формы ? Т. е. есть ли свойство у ListBox, которое возвращало бы ListBox в первоначальное состояние, приблизительно так:

Worksheets("Лист1").Cells(intI, 1).Value=UserForm1.List1
UserForm1.List1.Свойство.Value = Значение (первоначальное состояние)

С уважением.

Добавлено:
Использую событие Click

Private Sub ListBox1_Click()
.... ..... .....
Worksheets("Лист1").Cells(intI, 1).Value=UserForm1.ListBox1
..... ..... .....
End Sub

При первом клике срабатывает, опция выделяется, клик по выделенной опции не срабатывает. Необходимо убрать выделение опции для записи на лист два раза подряд одной и той же опции.
Автор: SAS888
Дата сообщения: 20.10.2009 05:11
Mishel971
См. ответ Здесь.
Автор: KepBoard
Дата сообщения: 20.10.2009 07:50
Последнее время много ехселевых файлов скачивалось из интернета. и совсем неожиданно ( в какой момент это случилось не знаю) обнаружилась проблема:
Перестала работать горизонтальная прокрутка листа колесиком мыши (наклон колеса влево-вправо). Ужасно напрягает и раздражает.
В других программах мышь ведет себя правильно.
Что посоветуете?
Мышь: Dell BT Travel mause (блютузная)

Извиняюсь, не в ту тему написала, перенесла вопрос сюда:
http://forum.ru-board.com/topic.cgi?forum=5&topic=28042&start=1600#15
Автор: SIgor33
Дата сообщения: 20.10.2009 08:16
Скажите как удалить программно макрос (vba процедуру) из книги excel
Автор: visual73
Дата сообщения: 20.10.2009 10:05
SIgor33
поставь ссылку на библиотеку Ms Visual Basic for Applications Extensibility


Код: Sub DelModule()
Dim ModuleFile As String
Dim VBP As VBIDE.VBProject

Set VBP = Workbooks("ТвояКнига.xlsm").VBProject
With VBP.VBComponents
.Remove VBP.VBComponents("ТвойМодуль")
End With

End Sub
Автор: SIgor33
Дата сообщения: 21.10.2009 08:09
visual73
Спасибо за помощь
Автор: flamencero
Дата сообщения: 22.10.2009 07:52
Здравствуйте!
У меня такая проблема:
Есть файл базы данных - просто подписаны столбцы и заполнены данные. столбцов много, около 50-60. при работе с базой неудобно работать со всеми столбцами сразу, а нужно только с несколькими.

Необходимо:
при открытии файла должна выходить UserForm, очень простая - список столбцов и поля для выбора (чекбоксы), и кнопки ОК и Отмена. Все. После нажатия кнопки ОК, программа должна копировать все выбранные (помеченные галочкой) столбцы в отдельный лист и распологать их по порядку. (то есть без промежутков). Например, если мне нужно отобразить 5 и 7 столбцы, то они должны быть скопированы в другой лист в столбцы А и В.

Пытался написать, но не знаю как сделать так, чтобы программа вставляла столбцы по порядку, то етсь - не в конкретные столбцы, а смотрела, занят ли столбец А, если нет (ничего не выбрано еще), если да - то смотрела столбец В.и так далее.

Помогите, пожалуйста, как это можно написать? а то очень срочно нужно. Заранее спасибо!!
Автор: Alexikit
Дата сообщения: 22.10.2009 11:10
flamencero
А зачем смотреть занят ли столбец? первый выбранный писать в А, слеующий в B и т.д
стоит использовать запись
Worksheets("Sheet1").Range(Cells(1, 1))
вместо Worksheets("Sheet1").Range("A1")
тогда цикл просто составить.

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133

Предыдущая тема: Написание своего HyperTerminal для считывания данных


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