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

» Excel VBA (часть 2)

Автор: hackman
Дата сообщения: 08.04.2008 14:16
Ребята, подскажите как сделать автоматическое обновление книги при ёё откритию?

Добавлено:
Подскажите, как сделать автоматическим обновления книги. Чтоб пользователь не должен бил нажимать кнопку обновить при вводе.

Добавлено:
Как отключить диалог при загрузке книги на обновления связей
Автор: ol7ca
Дата сообщения: 08.04.2008 16:12
SAS888
спасибо


hackman

Цитата:
как сделать автоматическое обновление книги при ёё откритию?


Workbooks.Open Filename:="C:\1.xls", UpdateLinks:=True


Автор: vasiliy74
Дата сообщения: 08.04.2008 17:06
как сделать что бы созданная кнопка при отсутсвии информации в буфере обмена была не активной, серой, а когда есть информация активной????
Автор: ol7ca
Дата сообщения: 08.04.2008 23:05
Подскажите, пожалуйста, как записать, чтобы код выбрал только ячейки содержащие числа но не результаты фрмул?
я использую эту запись
If IsNumeric(.Cells(i, 28).Value) And .Cells(i, 28) <> "" And Not IsEmpty(.Cells(i, 28)) And .Cells(i, 28) <> 0 Then
, уже все перепробывал - не выходит
Автор: SAS888
Дата сообщения: 09.04.2008 05:23
ol7ca
Если не формула, если число и если не пусто (т.к. IsNumeric это воспринимает как 0), так:

Код: If Not Cells(i, 28).HasFormula And IsNumeric(Cells(i, 28)) And Not IsEmpty(Cells(i, 28)) Then...
Автор: DennisKo
Дата сообщения: 09.04.2008 10:51
Range("J2:J1000").Value = _
Range("H2:H1000").Value
Что нужно добавить, что бы копировался только результат вычисления формулы, а не ошибка в ячейки н-р: #ЗНАЧ! Сейчас копируется всё! Спасибо!
Автор: Vitus_Bering
Дата сообщения: 09.04.2008 11:31
vasiliy74

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

Надеюсь, это поможет...
Автор: ABSERG
Дата сообщения: 09.04.2008 11:39
Нужна помощь!!
Есть книга (xls) в ней лист1 и лист2, в них находится список товаров, в первом столбце цифры от 1 до 99999 во втором соответственно описание для каждой цифры. Цифры в первой колонке могут повторяться, как в книге1 так и в книге2 вопрос?
Как сделать, чтоб редактируя содержание в строке к примеру под номером 3 (наименование товара) искало такие же строки по всем листам, и исправляла их.
Автор: Mint86
Дата сообщения: 09.04.2008 13:50
Подскажите а Excel поддерживает команды командной строки. Конкретно нужно ввести пароль на открытие книги через командную строку.
Автор: vasiliy74
Дата сообщения: 09.04.2008 17:32
вроде уже писал про проблему но так и не нашёл пути её решения, есть необходимость вводить формулу она работает. Но если я пытаюсь записать макрос по её внесению выходит сообщение о том что макрос не записан, попытался поставить в код макроса в ручную. Выдаёт ошибку, как быть?

строка:
=ЕСЛИ((I72+СУММЕСЛИ(Transactions_TransactionsB!$F:$F;B72;Transactions_TransactionsB!$AT:$AT))=0;0;((J72-I72)+(СУММЕСЛИ(Transactions_TransactionsB!$F:$F;B72;Transactions_TransactionsB!$AF:$AF)+СУММЕСЛИ(Transactions_TransactionsB!$F:$F;B72;Transactions_TransactionsB!$AV:$AV))/$E$4-I73)/(I72+СУММЕСЛИ(Transactions_TransactionsB!$F:$F;B72;Transactions_TransactionsB!$AT:$AT)/$E$4))
Автор: Vitus_Bering
Дата сообщения: 09.04.2008 18:23
Mint86

Цитата:
ввести пароль на открытие книги через командную строку.

Нет такого параметра.
Автор: ol7ca
Дата сообщения: 09.04.2008 18:38
SAS888
спасибо за обьяснения и код - в целом все отлично,
один есть вопрос: я дал файл-пример, где только один лист в котором идет поиск
а у меня их еще 30. Код все находит, но ссылку правильную дает только на один лист, который был в примере, а на остальные дает ошибочную сылку (во всех случаях это имя листа откуда берутся данные и на нем ячейка A1) . Я сам виноват, что дал урезанный пример, но не знаю как это изменить.
Автор: nick7inc
Дата сообщения: 09.04.2008 19:58
DennisKo

Цитата:
Что нужно добавить, что бы копировался только результат вычисления формулы, а не ошибка

Надо перед копированием проверять:
If IsError(Cells(1, "A")) Then msgbox "Ошибка!"

Добавлено:
ABSERG

Цитата:
Как сделать, чтоб редактируя содержание в строке к примеру под номером 3 (наименование товара) искало такие же строки по всем листам, и исправляла их.

Основа - событие листа Worksheet_Change(). Но тут проблема: это событие вызывается только после редактирования, поэтому VBA доступно только новое значение. Чтобы получить старое я советую сделать глобальную переменную, куда закидываем значение при событии Worksheet_SelectionChange(). Вот есть небольшой примерчик (у вас в VBA редакторе должно быть включено Immediate Window, чтобы видет результат):[more=код]
Вставте эти строки в код листа (не в модуль, а именно в лист):

Код: Dim data_before As Variant
Private Sub Worksheet_Change(ByVal Target As Range)


Debug.Print "In cell "; Target.Address; " was '"; data_before; _
"' and now is '"; Target.Value

End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
data_before = Target.Value
End Sub
Автор: ol7ca
Дата сообщения: 09.04.2008 23:09
вставляю эту строку
Application.Calculation = xlCalculationAutomatic
почему-то не срабатывает
подскажите, пжлст, в чем ошибка
Автор: SAS888
Дата сообщения: 10.04.2008 04:53
ol7ca

Цитата:
Application.Calculation = xlCalculationAutomatic
почему-то не срабатывает

Попробуй так:

Код: Application.Calculation = xlAutomatic
Автор: hackman
Дата сообщения: 10.04.2008 13:40




Цитата:
Workbooks.Open Filename:="C:\1.xls", UpdateLinks:=True


Так не подходит. Как то написать в процедуре Workbook_open чтоб не возникало запроса на обновления связей, а обновления происходило автоматически при откритию
Автор: ol7ca
Дата сообщения: 10.04.2008 16:46
SAS888
файл-пример тут
http://slil.ru/25675247
спасибо.

Добавлено:

Цитата:
Application.Calculation = xlAutomatic

не работает
Автор: SAS888
Дата сообщения: 11.04.2008 05:52
ol7ca
В Вашем файле-примере переход по найденной ссылке будет осуществляться безошибочно, если из всех имен листов исключить пробелы. Например, лист с именем "SI X" переименовать в "SI_X" и т.д. Все остальное, вроде работает.
По поводу Application.Calculation посмотрите Здесь. Может поможет.

Добавлено:
ol7ca
И еще. Хотелось бы уточнить: а Вам точно нужно включать автоматический пересчет листов книги? Может Вам нужно включать автоматическое обновление связей?
Автор: ol7ca
Дата сообщения: 11.04.2008 16:03
SAS888


Цитата:
В Вашем файле-примере переход по найденной ссылке будет осуществляться безошибочно, если из всех имен листов исключить пробелы. Например, лист с именем "SI X" переименовать в "SI_X" и т.д.

а с пробелами никак не будет работать?


Цитата:
а Вам точно нужно включать автоматический пересчет листов книги?

да. это ускоряет работу кода. я пока пишу не грамотно. поэтому вынужден использовать дополнительные примочки. Calculation пока отключаю вручную.
Автор: vasiliy74
Дата сообщения: 14.04.2008 15:32
ну неужели не кто не сталкивался с внесением в строку с помощью макроса длинной формулы???
Автор: ol7ca
Дата сообщения: 14.04.2008 18:53
SAS888

Цитата:
Цитата:В Вашем файле-примере переход по найденной ссылке будет осуществляться безошибочно, если из всех имен листов исключить пробелы. Например, лист с именем "SI X" переименовать в "SI_X" и т.д.

а с пробелами никак не будет работать?

я нашел ответ на свой вопрос - добавил кавычки и заработало с пробелами :
A(UBound(A)) = "'" & Sheets(i).Name & "'" & Chr(33) & myCell.Address
Автор: ssa9999
Дата сообщения: 15.04.2008 08:40
Когда открываем эксельный файл Excel'ом, из программы Парус Своды ЦП,
то не дает создать новую книгу в этом Excel'е ни из интерфейса, ни из кода (код в этом эксельном файле и размещается). То есть например код
Workbooks.Add
вызывает ошибку:
Ошибка 1004 метод Add failed (или как-то так примерно, нету этих Сводов у меня сейчас).

Преполагаю, что программа Своды как-то пинает Excel так что создание новой книги запрещается. Но не могу найти в справке по Excel VBA ничего такого, чтобы можно было запретить создать книгу, или чего-нибудь, что может помешать создать новую книгу. Что за навороты? мне надо пнуть его в обратном направлении, чтобы дало создать новую книгу из кода
Автор: nick7inc
Дата сообщения: 15.04.2008 08:51
vasiliy74

Цитата:
ну неужели не кто не сталкивался с внесением в строку с помощью макроса длинной формулы???

У меня были проблемы, но только с чтением длинной формулы из серии диаграмы. VBA тупо выкидывает "лишнее". Как бороться с этим пока не придумал.
Автор: Dimius
Дата сообщения: 15.04.2008 16:07
Прошу гуру помочь. Посоветовали обратиться сюда. Задача такая:

Случай А. Есть массив 1 (квадратная матрица, например из 6 строк/столбцов). Необходимо из этого массива сформировать новый (массив 2) путем исключения определенной строки и столбца (допустим строки/столбца 4), а затем посчитать определитель нового массива

Случай Б. Есть массив 1 (квадратная матрица, например из 6 строк/столбцов). Необходимо из этого массива сформировать новый (массив 2) путем исключения определенных строк и столбцов (допустим строки/столбца 1 и 4), а затем посчитать определитель нового массива

Случай В. Исключается 3 строки/столбца

Как это сделать в автоматическом режиме, чтобы вводя номера столбцов/строк, которые надо исключить - массив формировался сам?

Вот превьюшка:

А вот тут файлик
http://rapidshare.com/files/107180148/Massiv.xls.html
или тут
http://www.rapidshare.ru/647583
Автор: Troitsky
Дата сообщения: 15.04.2008 20:45
vasiliy74

Цитата:
вроде уже писал про проблему но так и не нашёл пути её решения, есть необходимость вводить формулу она работает. Но если я пытаюсь записать макрос по её внесению выходит сообщение о том что макрос не записан, попытался поставить в код макроса в ручную. Выдаёт ошибку, как быть?

Цитата:
ну неужели не кто не сталкивался с внесением в строку с помощью макроса длинной формулы???

Излагай мысли четко. В чем проблема? Проблема с записью макроса или с программным внесением формулы в ячейку? Если первое, то вопрос для Excel FAQ. Если второе - неплохо бы процитировать сообщение об ошибке и привести фрагмент кода.
Уважайте время тех, кому кроме решения ваших проблем приходится гадать даже о том, что вы вообще хотите сказать.
Автор: nick7inc
Дата сообщения: 15.04.2008 22:32
Troitsky

Цитата:
В чем проблема?

Я думаю, что здесь банальное переполнение. Скажем этот пример на Excel 2000 показывает неправильный результат при вызове длинной формулы, третий параметр оказывается [more=пустым.]
У диаграмы формула для графика выглядит так:
=РЯД('G:\Documents and Settings\Nikolay\Рабочий стол\SomeOneSomeOneSomeoneSomeone\[Книга1.xls]Лист1'!$C$3;'G:\Documents and Settings\Nikolay\Рабочий стол\SomeOneSomeOneSomeoneSomeone\[Книга1.xls]Лист1'!$B$4:$B$8;'G:\Documents and Settings\Nikolay\Рабочий стол\SomeOneSomeOneSomeoneSomeone\[Книга1.xls]Лист1'!$C$4:$C$8;1)
, а результат нажатия на кнопку вот так:
=SERIES('G:\Documents and Settings\Nikolay\Рабочий стол\SomeOneSomeOneSomeoneSomeone\[Книга1.xls]Лист1'!$C$3,'G:\Documents and Settings\Nikolay\Рабочий стол\SomeOneSomeOneSomeoneSomeone\[Книга1.xls]Лист1'!$B$4:$B$8,,1)
Нетрудно заметить, что съеден третий параметр.

Код кнопки:
Код:
Private Sub CommandButton1_Click()
Dim s As String, ch As Chart, ss As series

Set ch = Лист1.ChartObjects("Chart 2").Chart
Set ss = ch.SeriesCollection(1)
s = ss.Formula

MsgBox s
Debug.Print s

End Sub
Автор: megaxep
Дата сообщения: 16.04.2008 11:52
у меня такой вопрос - существует два листа: на одном одна таблица (смета), на другом другая таблица (акт), позиции на обоих таблицах совпадают, как сделать что бы при допустим удалении строки из одной таблицы, строка удаляласб из другой и наобоорот при добавлении строки в одной таблице добавлялась бы и в другой?
Автор: SAS888
Дата сообщения: 16.04.2008 13:28
megaxep
Есть способ, как отловить события удаления и вставки строк с помощью перехвата ID команд (в стандартном наборе Excel обработки таких событий нет). Если устроит - могу предложить.
Автор: ssa9999
Дата сообщения: 16.04.2008 16:05
вот, точно - события на эту тему нет. В Майкрософте забыли.
Перехват команд, посредством самого Excel VBA? вот это круто. Как это?
Автор: SAS888
Дата сообщения: 17.04.2008 05:51
megaxep
ssa9999
Посмотрите Здесь.
В предложенном файле 2 листа и 2 макроса. После запуска макроса "Beginning", произойдет перехват нужных ID команд и при удалении (вставке) строк (столбцов) на листе 1, тоже самое будет происходить и на листе 2 (и наоборот). Запуск макроса "Ending" - возвращает обычную работу.
Обратите ВНИМАНИЕ, что при закрытии файла, обработка этих событий в Excel останется такой, какая была к моменту закрытия. Можно, чтобы не забывать возвращать нормальную работу Excel, по событию "BeforeClose" выполнять макрос "Ending".

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133

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


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