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

» Excel VBA

Автор: Troitsky
Дата сообщения: 08.05.2006 07:53
MOCT

Цитата:
wdProperty* одни на все семейство Офиса
Одни на все семейство Офиса константы msoProperty*

Константы wdProperty* относятся конкретно к объектной модели Word. Например,
Цитата:
Const wdPropertyVBATotalEdit = 13
Member of Word.WdBuiltInProperty


Даже в справке к ExcelVBA в разделе BuiltinDocumentProperties Property есть пример, который выводит все доступные свойства книги:
Код: rw = 1
Worksheets(1).Activate
For Each p In ActiveWorkbook.BuiltinDocumentProperties
Cells(rw, 1).Value = p.Name
rw = rw + 1
Next
Автор: MOCT
Дата сообщения: 08.05.2006 08:52
Yuk:

Цитата:
Ну, не знаю. У меня с wdProperty* ничего не заработало в экселе. Но зато работает вот такой скрипт:

константы - они и есть константы. можно вообще подставить конкретное число - будет то же самое (пробовал).

По поводу предложенного скрипта:
все идет нормально до индекса с номером 10 (Last print date). А на нем получаем то же самое:
Run-time error '-2147467259 (80004005)
Method 'Value' of object 'DocumentProperty' failed


Добавлено:
Troitsky:

Цитата:
Константы wdProperty* относятся конкретно к объектной модели Word. Например,

Даже в справке к ExcelVBA в разделе BuiltinDocumentProperties Property есть пример, который выводит все доступные свойства книги:

имена выводятся для всех из них, не спорю. а вот значения некоторых из них (мне нужны были 10, 12, 13, может быть еще на каких проблемы возникают) приводят к ошибке. не помогает даже on error resume next (

Поэтому остается та же самая проблема - можно ли как-то еще, не обращаясь к .Value, определить, что данное значение в книге/документе не определено? Может быть какой-то специфический обработчик ошибок?
Автор: Yuk
Дата сообщения: 08.05.2006 17:58
MOCT

Цитата:
константы - они и есть константы

Э нет. Константы определяются в конкретной объектной модели.


Цитата:
По поводу предложенного скрипта:
все идет нормально до индекса с номером 10 (Last print date). А на нем получаем то же самое:
Run-time error '-2147467259 (80004005)
Method 'Value' of object 'DocumentProperty' failed

У меня скрипт работает без проблем. А ты пробовал открыть File - Properties и посмотреть, что там? А может ошибка где-то в другом месте? Пробовал мой скрипт один к одному?

All
Кто-нибудь еще пробовал скрипт? Есть проблемы?
Автор: Troitsky
Дата сообщения: 08.05.2006 22:24
MOCT
Yuk
Получается, что вопрос, скорее, о том, почему не срабатывает обработчик
Код: On Error Resume Next
Автор: denis_a
Дата сообщения: 09.05.2006 13:58
Подскажите плиз, как обойти такую траблу.

Так - вылетает оффис:
ActiveWorkbook.Worksheets("List1").SaveCopyAs Filename:="c:\List1.csv", FileFormat:=xlCSV, CreateBackup:=False
ActiveWorkbook.Worksheets("List2").SaveCopyAs Filename:="c:\List2.csv", FileFormat:=xlCSV, CreateBackup:=False
ActiveWorkbook.SaveAs Filename:="c:\Lists.xls", _
FileFormat:=xlNormal, Password:="", WriteResPassword:="", _
ReadOnlyRecommended:=False, CreateBackup:=False

А так CSV файлы не сохраняет:
ActiveWorkbook.SaveAs Filename:="c:\Lists.xls", _
FileFormat:=xlNormal, Password:="", WriteResPassword:="", _
ReadOnlyRecommended:=False, CreateBackup:=False
ActiveWorkbook.Worksheets("List1").SaveCopyAs Filename:="c:\List1.csv", FileFormat:=xlCSV, CreateBackup:=False
ActiveWorkbook.Worksheets("List2").SaveCopyAs Filename:="c:\List2.csv", FileFormat:=xlCSV, CreateBackup:=False
Автор: mcyr
Дата сообщения: 09.05.2006 20:18
Please! Please! Please!
Никак не удается из VBA вставить в ячейку функцию ЕСЛИ(...)
Т.е на строку типа:
Range.Cells(1,1).Formula = "=ЕСЛИ(...)"
дает ошибку "Application-defined or object-defined error"
То же самое для функций СУММАЕСЛИ, If, SumIf.
При этом другие функции вставляются нормально. Это что, принципиальное ограничение, или я что-то тупо делаю не то?
Автор: Yuk
Дата сообщения: 09.05.2006 21:58
mcyr
Покажи полностью строчки кода где появляется ошибкa. С работающей функцией и с проблемной. Ошибка в коде скорее всего.

Добавлено:
Проверь ; и , в формуле. Зависит от языка.
Автор: mcyr
Дата сообщения: 09.05.2006 23:08
Вот пожалуйста!
Первая не работает, вторая работает

Sub TestBad()
Cells(11, 11).Formula = "=If($H$13>$I$1;$I$13;0)"
End Sub

Sub TestWell()
Cells(11, 11).Formula = "=SUM($H$13:$I$1)"
End Sub
Автор: Yuk
Дата сообщения: 09.05.2006 23:12
mcyr
Не знаю, есть ли IF в русском экселе, а в английском параметры разделяются запятой:

Код: Cells(11, 11).Formula = "=If($H$13>$I$1,$I$13,0)"
Автор: mcyr
Дата сообщения: 09.05.2006 23:23
Ты гений, а я идиот!
С запятой работает.
И "ЕСЛИ" c запятой работает,
хотя у меня русский Excel.
Но это уже наплевать!
Спасибо
Автор: Yuk
Дата сообщения: 09.05.2006 23:30
denis_a
Иногда полезно внимательно ошибки читать. Метод SaveCopyAs определен только для объекта Wokbook, но не для Worksheet. Используй SaveAs. Я бы еще вставил проверку, что лист с таким именем существует. Порядок не сильно важен.

Автор: denis_a
Дата сообщения: 09.05.2006 23:45
Я пробовал и SaveAs, если сохраняется первый csv, то Excel вылетает с эксешоном, сохранив csv и не до конца обрабаботанный xls. Если наоборот, xls сохраняется, Эксель после выполнения вешается, а csv не сохраняются вообще.

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

Добавлено:
По моему разобрался, этот глюк завязан непосредственно на конкретном экселовском файле или макросе, буду искать концы.
Автор: ScorpionS
Дата сообщения: 11.05.2006 10:55
Подскажите, а как реализовать следующую задумку?
При открытии Excel'евского файла (книги)
1. Выдавать сообщение "Message"
2. Проверять если текущая дата больше, чем (скажем) 20.05.2006 то выдавать сообщение "До свидания" и закрывать этот файл.
P.S. Своего рода триал период.
Автор: Troitsky
Дата сообщения: 11.05.2006 17:40
ScorpionS
Повесить на событие открытия книги выполнение подобного кода:
Код: Private Sub Workbook_Open()

' 1)
MsgBox "Здравствуйте..."

' 2)
Dim MyDate As Date

MyDate = "20.05.2006"

If Now > MyDate Then
MsgBox "До свидания"
ActiveWorkbook.Close
End If

End Sub
Автор: ScorpionS
Дата сообщения: 11.05.2006 18:34
У меня почему-то Workbook_Open() не срабатывает! Почему это может быть? Версия 6.3.
Автор: Yuk
Дата сообщения: 11.05.2006 19:02
ScorpionS
Проверь установки безопасности: Tools-Options-Security-Macro Security (надеюсь, сможешь перевести).
Автор: ScorpionS
Дата сообщения: 11.05.2006 19:29
Если ты про уровень безопасности макросов, то он у меня "Низкая". Была бы "Высокая" ни один макрос не срабатывал бы, а то не срабатывает именно Workbook_Open(). И так пробовал:

Код: Private Sub WorkbookOpen(ByVal Wb As Workbook)
End Sub
Автор: Yuk
Дата сообщения: 11.05.2006 20:12
ScorpionS
А куда ты вставляешь Workbook_Open? Надеюсь в ThisWorkbook код, а не в отдельный модуль.
Автор: ScorpionS
Дата сообщения: 11.05.2006 20:25
Блин, вот где собака зарыта!
Yuk
Спасибо тебе большое, в том числе за понимание и терпение.
Автор: igorkorn
Дата сообщения: 12.05.2006 14:37
Помогите, пожалуйста, с небольшой проблемой.

В Excel запускается макрос при изменении определенных столбцов.
Сделано это с помощью Worksheet_Change.
Но в одном из столбцов значения изменяются выбором из списка.
А в этом случае Worksheet_Change не реагирует на событие.
Чем отследить ?
Автор: Yuk
Дата сообщения: 12.05.2006 15:18
igorkorn
У меня все работает, включая список (через Data Validation). Даже если новое значение тоже, что и старое. Покажи код. Как организован список?
Автор: igorkorn
Дата сообщения: 12.05.2006 15:30
Код очень простой:

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column > 3 And Target.Column < 12 Then
вот тут происходит работа макроса...
End If
End Sub

Ну а с 4-го по 11-й столбец находятся данные, изменение которых нужно отслеживать.
С 4-го по 10-й - это просто цифры. Тут все прекрасно работает.
А в 11-м - организован список через имя источника.
Интересно, что если войти двойным нажатием мышки в ячейку этого 11-го столбца,
даже ничего не меняя, а затем нажать Enter, то макрос срабатывает.
А если просто выбрать мышкой из списка значение , то ничего не происходит.
Автор: Yuk
Дата сообщения: 12.05.2006 16:03
igorkorn

Цитата:
А в 11-м - организован список через имя источника.

Можно поподробнее.

Какая версия экселя? В старых версиях (97) были проблемы с этим.

Рядов много? Можно попробовать в отдельную колонку вписать формулу типа =К2 и т.д. и обрабатывать событие Woorksheet_Calculate.
Автор: igorkorn
Дата сообщения: 12.05.2006 16:18
Чудо !!!

Два дня мучился с этой ерундой, как вдруг оно заработало.
Правда не совсем само. Но результат тот, что и хотел.
Попробовал поиграться, присвоив имя этому 11-му столбцу, а затем проверяя изменения этого имени. Так после присвоения имени, даже без проверки, заработал Worksheet_Change через список.
Просто ради интереса удалил имя - а ОНО осталось работать, как и требовалось.
Автор: aquaman1977
Дата сообщения: 16.05.2006 09:45
Обнаружил такую странную багу в редакторе..
Если на форме копи-пастнуть контрол типа ComboBox, то (по крайней мере у меня) - некорректно отображается шрифт скопированного элемента.

К примеру, есть ComboBox1 с параметром шрифт: Tahoma 8pt. При копировании элемента, очевидно, что все поля свойств контрола должны быть идентичными, но этого не происходит. Если посмотреть по очереди на свойства шрифта в обеих элементах будет значится Tahoma 8pt. Но при выделении их вместе - поле шрифт остается пустым.

Кто-нить может объяснить или подтвердить сие недоразумение!?

Для наглядности небольшой пример: _http://aquaman.bizhat.com/primer.xls
Автор: nantonov2006
Дата сообщения: 16.05.2006 12:24
У меня такой вопрос:
Вроде бы должно быть просто, но ни как не могу допереть.

В форме вставлена картинка. Как сделать, что бы при щелчке на картинке открывался браузер и какой-нибудь сайт ?

Заранее благодарю за ответ.
Автор: aquaman1977
Дата сообщения: 16.05.2006 14:13
nantonov2006


Код:
Private Declare Function ShellExecute Lib "Shell32.dll" _
Alias "ShellExecuteA" (ByVal hWnd As Long, _
ByVal lpOperation As String, ByVal lpFile As String, _
ByVal lpParameters As String, ByVal lpDirectory As String, _
ByVal nShowCmd As Long) As Long

Sub Image1_Click()
URL = "www.microsoft.com" ' тут прописать нужный урл..
Call ShellExecute(0&, vbNullString, URL, vbNullString, _
vbNullString, vbNormalFocus)
End Sub
Автор: nantonov2006
Дата сообщения: 17.05.2006 04:38
Выдает ошибку:

Compile error:

Only comments may appear after End Sub, End Function, or End Property
Автор: aquaman1977
Дата сообщения: 17.05.2006 07:47
nantonov2006
Значит, убери коммент.. Хотя странно все это..
Автор: nantonov2006
Дата сообщения: 17.05.2006 08:46
А нет - это я прогнал.

Все нормлаьно работает !

Огромное спасибо.

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768

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


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