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

» Excel VBA

Автор: wtt
Дата сообщения: 14.01.2005 09:21
В принципе проблема решилась. При помощи Public Type ….End Type(очень похожее на то, что предлагалTropin) создал свою переменную (состоящую из массива и имени), а затем объявил массив из нее. Получился динамический массив внутри которого есть нужное кол-во динамических массивов.
Размеры и количество етих массивов автоматически меняются в зависимости от исходных данных. Ура, товарищи!!!!!!!!!!!!!!!!!!! Хватит ли на это памяти - посмотрим...
Всем пасибо. Со старым Новым Годом, Господа!!!!!!!!!!!!!!

Добавлено:
dneprcomp

Цитата:
Попробуй, потом расскажешь. Т.к. все это теоретические изыски

Массив внутри которого другие массивы-всё работает!И размерность у них разная может быть...
Автор: dneprcomp
Дата сообщения: 14.01.2005 22:56
wtt
Не забудь, что при использовании просто redim все данные в массиве очищаются. Если надо переоб'явить массив и сохранить данные, используй redim preserve.
Автор: wtt
Дата сообщения: 15.01.2005 20:53
dneprcomp


Цитата:
используй redim preserve
-так и делаю
На счёт памяти могу сказать следующее:c сотнями элементов типа Long система работает прекрасно,даже винчестер не шевелиться.Естественно к большему обьёму данных скорее всего нужен какой-то другой подход...
Автор: wtt
Дата сообщения: 31.01.2005 12:06
Перед запуском очередной процедуры необходимо выполнить операцию анологичную той,которую выполняет Microsoft Visuai Basic при нажатии на кнопку Reset.
Подскажите,пожалуйста,есть ли вообще такая возможность,и как выглядит код.
Спасибо.
Автор: vdarasun
Дата сообщения: 02.03.2005 08:58
Hi all!
У меня есть проблема работы с функцией из dll (чужая библиотечка) - одним из параметров должен быть строковый массив, который должен изменяться. Но, как написано в MSDN, - это в VBA невозможно. Как обойти это? Может где почитать?

Попробовал подставить массив Integer - что-то получилось, надо теперь только как-то вытащить строки и посмотреть то ли это, что надо ... Есть ли другой более удобоваримый способ?
Автор: ppch
Дата сообщения: 04.03.2005 19:10
Всем привет!

Есть проблемка с автофильтром в excel'е.
Короче имеем worksheet, в котором находится таблица с данными.
Для поиска по данным используется автофильтр с условием.

Проблема в том, что в некоторых ячейках таблицы содержится тест длиной более 256 символов. И автофильтр не ищет по таким ячейкам, точнее не находит слова которые начинаются после 256-го символа. (Надеюсь понятно объяснил...)

Это лечится?
Можно конечно макрос написать, но как-то лень.
Может эту траблу можно как-то обойти?
Автор: MoKC0DeR
Дата сообщения: 05.03.2005 08:41
vdarasun

Цитата:
Но, как написано в MSDN, - это в VBA невозможно. Как обойти это?

Можно. По конкретнее пример приведи.
Автор: zorrack
Дата сообщения: 05.03.2005 16:34
vdarasun
Если сторонняя библиотека сама выделяет память под строки - скорее всего не выйдет.
Если сторонняя библиотека принимает строки фиксированной или заранее заданной длинны - можно попробовать сначала проинициализировать массив, а потом его уже передавать
Автор: darkevi
Дата сообщения: 09.03.2005 05:36
Скрытие/отображение ячеек при помощи VBA:

С combo-box использую простой скрипт:
ActiveSheet.Columns("E:HM").Hidden = True
ActiveSheet.Columns(ComboBox1.Value).Hidden = False

То есть сначала скрывается все, а потом отображается нужный диапозон.

На определенном моменте начал получать ошибку 1004 при выполнении операции скрытия всего диапозона. Выяснил, что эта ошибка проявляется не только при исполнении скрипта, но и в самом Excel'е невозможно скрыть больше определенного числа столбцов. Выдается ошибка "Невозможно переместить объект за пределы листа". Использую Excel 2003 (11.5612.5606) - русифицированная версия.

Вопросы:
Сталкивался ли кто-нибудь с похожей фигней?
Что посоветуете для исправления ошибки либо поиска причин ее возникновения?

Автор: Nimnul
Дата сообщения: 09.03.2005 08:30
darkevi
А если попробовать не скрывать, а делать ширину столбца равной нулю?
Автор: darkevi
Дата сообщения: 09.03.2005 09:06

Цитата:
darkevi
А если попробовать не скрывать, а делать ширину столбца равной нулю?


Идея хорошая, пробовал, но все-равно выдается аналогичная ошибка. Тем более, что команды скрытия и установки ширины 0 кажется тождественны.
Автор: Troitsky
Дата сообщения: 09.03.2005 10:17
darkevi

Цитата:
ошибка "Невозможно переместить объект за пределы листа"

Если действительно в скрываемом диапазоне присутствуют какие либо объекты, то попробуй поиграться с Параметрами привязки объекта к фону во вкладке Формат объекта.../Свойства

Или программно установлением соответствующих свойств. Например
Код: Sheets(1).Shapes(2).Placement = xlMoveAndSize
Автор: darkevi
Дата сообщения: 09.03.2005 11:37
to Troitsky

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

Все получается если только осуществить полную очистку.





Добавлено:

Цитата:
Скрытие/отображение ячеек при помощи VBA:

С combo-box использую простой скрипт:
ActiveSheet.Columns("E:HM").Hidden = True
ActiveSheet.Columns(ComboBox1.Value).Hidden = False

То есть сначала скрывается все, а потом отображается нужный диапозон.

На определенном моменте начал получать ошибку 1004 при выполнении операции скрытия всего диапозона. Выяснил, что эта ошибка проявляется не только при исполнении скрипта, но и в самом Excel'е невозможно скрыть больше определенного числа столбцов. Выдается ошибка "Невозможно переместить объект за пределы листа". Использую Excel 2003 (11.5612.5606) - русифицированная версия.


найдено решение - см
http://support.microsoft.com/default.aspx?scid=kb;EN-US;q211769
Автор: HdHg
Дата сообщения: 25.03.2005 23:51
Народ.
Подскажите PLS как программно получить список выделенных (сгруппированных) листов в книге EXCEL
т.е. я к примеру держа CTRL выделяю (группирую) в книге несколько листов (не обязательно последовательных) после чего надо макросом получить список имен или индексов этих выделенных (сгрупированых) листов.
Автор: Troitsky
Дата сообщения: 26.03.2005 00:49
HdHg

Код: For Each S In ActiveWindow.SelectedSheets
MsgBox S.Name
Next
Автор: HdHg
Дата сообщения: 26.03.2005 14:27
Troitsky
Big SNX
Автор: HdHg
Дата сообщения: 29.03.2005 23:06
Люди
Вопрос конечно извращенный и не совсем по VBA, но ...
В EXCELe есть стандартная функция СМЕЩ() или OFFSET() дающая ссылку на ячейку (диапазон) смещенную относительно другой ячейки (диапазона).

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

Как это сделать на VBA я знаю, можно ли такое сделать без VBA.
Я понимаю, что проще написать собственную функцию и добавить ее к общим, но интересует реализация стандартными функциями.
Автор: Troitsky
Дата сообщения: 30.03.2005 09:07
HdHg
Вопросы "не совсем по VBA" обсуждаются в этой теме:
http://forum.ru-board.com/topic.cgi?forum=5&topic=4495
Автор: mooby
Дата сообщения: 05.04.2005 00:43
Привет всем.
Вопрос 1. Как можно закрепить "кнопку" на листе по аналогии с "закрепить области", чтобы она не ездила по листу при скроллинге?

Вопрос 2. Выделяем произвольную ячейку на листе, вызываем макрос и он выделяет 2 соседние ячейки по строке (справа и слева) также, как если удерживать Control?
Автор: Zhenya68
Дата сообщения: 20.04.2005 07:43
Подскажите пожалуйста, может кто встречал.
Excel 2002 (10.2701.2625)
Вызываю Excel как OLE Server из 1с.
Много чего делаю и мне надо в ячейке поменять формат представления числа. Мне нужно, чтобы Excel показывал в ячеке "Число с двумя рязрядами после запятой и разделителем тысяч". Я пишу следующий код:

Пременная Екс= (это сслылка на Excel.Application)

Екс.Cells(20,20).NumberFormat="#,##0.00";
или
Екс.Range(Cells(20,20),Cells(20,20)).NumberFormat="#,##0.00";

Получаем сообщение об ошибке: "Microsoft Excel: Нельзя установить свойство NumberFormat класса Range"

Но в редакторе VBA пишу строки:

Cells(20, 20).NumberFormat = "#,##0.00"
или
Range(Cells(10, 10), Cells(10, 10)).NumberFormat = "#,##0.00"

все работает и никто не ругается.

Помогите кто может!!



Автор: igbt
Дата сообщения: 22.04.2005 15:52
Кто-нибудь знает как поменять в екселе на title bar надпись "microsoft excel ...." на свою.
Автор: miga
Дата сообщения: 24.04.2005 01:17
Можно так:
Application.Caption = "свою"
Автор: igbt
Дата сообщения: 29.04.2005 12:23
miga
Спасибо, работает.
Автор: H0UsE
Дата сообщения: 09.05.2005 08:04
Помогите пожалуйста написать сдедующее задание.
Мне дали задание, написать небольшую программу на VBA + Excel.
Нужно организовать ввод данных на рабочий лист "экзамен" в 4 колонки: Группа, Предмет, ФИО, оценка.

Иными словами, нужно чтобы при открывании Excel-файла в нем открывалась форма, в которой было 4 поля. Когда поля заполнены, пользователь нажимает кнопку ввод, и потом эти поля добавлялись в ячейки Excel.

К сожалению на данном форуме нельзя прикрепить картинку, ноглядно показывающую постановку задачи, поэтому ниже располагается ссылка на эту картинку - http://zb-susu.ru/~house/files/problem.jpg

Прошу помощи
Автор: Agent_Smith
Дата сообщения: 11.05.2005 15:40
Многоуважаемые, помогите, пожалуйста, в решении следующей задачки:

есть книга Excell, в которой - макросы, формы, все дела... Юзер с ней работает, и эта книга (назовём её Книга1) генерит новый файл (назовём его Книга-2) с данными на 2-х листах.
Требуется, чтобы помимо данных, в Книгу-2 добавлялся макрос. Как это можно сделать?

Если задача кажется извращённой, опишу требуемый результат - нужно, чтобы в Книге-2 один лист был доступен всем, а второй лист требовал ввода пароля для открытия.

Очень нужна помощь!
С уважением.
Автор: Agent_Smith
Дата сообщения: 12.05.2005 12:01
Жаль, что все отмолчались; решение нашёл сам.
Может быть, вопрос и банальный, но тем не менее (для будущих поколений) - история "как это сделать":

1. Подключаем через Tools -> References библиотеку Microsoft Visual Basic for Applications Extensibility.
2. Добавляем в файл модуль:
Код: Application.Workbooks(Workbooks.Count).VBProject.VBComponents.Add (vbext_ct_StdModule)
Автор: Linda
Дата сообщения: 18.05.2005 03:16
Подскажите, как в Excel создать форму интерфейса, на которую прицепить потом кнопки? Речь идет о дружественном интерфейсе для пользователя.
Автор: GrayElf
Дата сообщения: 19.05.2005 08:00
Linda
Меню Сервис -> Макрос -> Редактор Visual Basic, там Insert -> UserForm и рисуй себе дружественный интерфейс.
Автор: aquaman1977
Дата сообщения: 19.05.2005 17:16
В макросе необходимо скопировать диапазон ячеек с одного листа на другой.
Проблема в том, что при копировании исходная высота строк не сохраняется.
Кто-нить знает, как это преодолеть?
Автор: ivas
Дата сообщения: 19.05.2005 18:01
aquaman1977

Цитата:
при копировании исходная высота строк не сохраняется.

Форматы копируются. Или ты переносишь только значения, без форматов?

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768

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


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