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

» Excel VBA (часть 2)

Автор: AndVGri
Дата сообщения: 14.05.2007 12:50
GFSGF
Врядли, разве что через API, а что мешает свою реализацию написать - сделать собственную форму?
Автор: GFSGF
Дата сообщения: 14.05.2007 13:46
AndVGri
Я свою форму и сделал. Мне просто нужно вывести небольшую свою справку.Думал применить MsgBox,но шрифт мне показался что мелковат.
Автор: PavelO
Дата сообщения: 14.05.2007 23:25

Цитата:
Есть такая проблемка. Нужен такой код, который через Ексель заменяет значения в базе Аццесс. Что я имею ввиду? Есть два файлика. Один .xls, другой .mdb. mdb содержит большую базу данных, xls содержит информации поменьше, но есть схожая. Как сделать так, чтобы изменяя ячейку в xls менялась и mdb база? Может у кого есть соображения на эту тему?
Цитата: синхронно изменять "и там и тут" вероятно геморройней, чем повесить "обновление mdb" на отдельную кнопочку.
В целом решать можно двумя путями: универсально через ADO (тогда как бы даже и не требуется установленного MSOffice Access) или же через объектную модель Access-а
Автор: FreeDOmCV
Дата сообщения: 15.05.2007 10:20
не мог бы мне кто-то помочь?мне надо написать прогу и она должна использовать элемент Scripping control(типа решить уравнение вида F(x)=0) , но я не знаю что это такое!в хэлпе про это ваще не написано!
Автор: AndVGri
Дата сообщения: 15.05.2007 12:21
PavelO
А в чём проблема? Пишешь процедуру, вешаешь её на кнопку.
В процедуре подключаешься через ADO или DAO к базе, открываешь запрос, добавляешь в нём запись и пишешь значения из Excel таблицы в поля запроса, обновляешь

Добавлено:
FreeDOmCV

Цитата:
Scripping

Ты, помоему, перемудрил с названием. Такого даже в MSDN не найти, не то что в справке Excel
Автор: avkend
Дата сообщения: 16.05.2007 08:32
В вба 0.
Такой вопрос: возможно ли написать макрос для того чтобы логировать все изменения в каком нибудь текстовом файле. и какие функции для этого надо использовать?
Автор: griin
Дата сообщения: 16.05.2007 09:53
Есть макрос для Excel, сделанный на VBA. В меню экселя сделал кнопку и прицепил к ней этот макрос. Макрос, на основе ввденных данных, делает некоторый расчет и выводит его на экран. Файл с макросом и пустыми полями я сохранил под именем template.xls.

Пользователь открывает template.xls забивает в нужные ячейки данные, жмет кнопку, выполняющую мой макрос, макрос выполняет расчет и выводит его на экран. Далее пользователь сохраняет файл под новым именем ("Сохранить как") и после этого в кнопке, к которой прицеплен макрос, путь к функции заменяется с FunctionName на имя_нового_файла!FunctionName.

Таким образом, в следующий раз, когда юзер запустит пустой template.xls в нем на соответствующей кнопке будет прописан не путь к макросу внутри файла, а к макросу имя_нового_файла!FunctionName, что не есть гуд, так как эти новые файлы пользователи могут удалять и кнопка перестает работать.

Как сделать так, чтобы при сохранении файла под новым именем на кнопке не менялся путь к макросу?
Автор: AndVGri
Дата сообщения: 16.05.2007 11:34
griin
Снова подключи макрос к кнопке (желательно кнопку разместить на собственной панели), вложи свою панель в книгу (в настройке панелей). Сохрани как надстройку xla. Далее, удали все макросы и эту панель из template и сохрани как шаблон. Затем в Сервис/надстройки добавь, ранее сохранённую, надстройку. Панель с кнопкой снова появятся. А новую книгу пусть пользователь создаёт на базе шаблона Template. Файл/создать и в области задач - из имеющейся книги
Автор: GFSGF
Дата сообщения: 16.05.2007 11:54
AndVGri
Добрый день. У меня вопрос такого характера. Создал свою панель инструментов а эксел , через меню «Настройка».разместил на ней три настраиваемые кнопки. Каждой кнопке присвоил макрос на открытие формы.(соответственно UserForm1.Show, UserForm2.Show,
UserForm3.Show).Сохранил книгу под именем 13.05.2007.Следующую сохраняю под именем 14.05.2007.Открываю снова книгу 14.05.2007,нажимаю кнопки на панели ,которую создал и у меня снова открывается книга под именем 13.05.2007,т.е. та в которой я эту панель создал.
Вопрос: можно ли сделать так ,чтобы эта панель работала во всех книгах или для этого панель нужно создавать только программно.

Второй вопрос. На листе у меня есть графики, а также кнопка CommandButton1 .Мне нужно ,чтобы я мог график при желании убрать, а если нужно снова показать.Запустил макрос. Он мне выдал вот такой код ActiveWorkbook.DisplayDrawingObjects = xlHide.
При таком коде убираются графики и также кнопки. Как сделать ,чтобы график убирался а кнопки на листе нет?
Автор: AndVGri
Дата сообщения: 16.05.2007 12:38
GFSGF
1. Создай надстройку (выше, чем твой вопрос отвечал)
2. Навскидку, переключай кнопкой режим скрытия/видимости диапазона столбцов или строк с запасом (как удобнее) в котором лежит твой график. Только смотри, чтобы кнопка в этот диапазон не попадала. Например:

Код:
Sub CommandButton1_Click()
Columns("C:J").Hidden = Not Columns("C:J").Hidden
End Sub
Автор: sandtrip
Дата сообщения: 16.05.2007 19:28
Вопрос такой: я по таблице создал список, и по нажатию на его элеметы в окошке появляется дополнительная информация:
Код:

Private Sub list_Click()
country = l1.Cells(list.ListIndex + 1, 3)
population = l1.Cells(list.ListIndex + 1, 4)
status = l1.Cells(list.ListIndex + 1, 5)
power.Value = l1.Cells(list.ListIndex + 1, 6)
f.rokkit.Value = l1.Cells(list.ListIndex + 1, 10) 'это здесь


Так вот, rokkit- это чекбокс. И когда происходит изменение его значения таким образом, то почему-то срабатывает
Код:

Private Sub rokkit_Click()


А мне нужно, чтобы она срабатывала только непосредственно при нажатии на чек. Как быть?
Автор: AndVGri
Дата сообщения: 17.05.2007 00:28
sandtrip
Введи флаг

Код:
Private inListClick As Boolean

Private Sub list_Click()
'...
inListClick = True
f.rokkit.Value = l1.Cells(list.ListIndex + 1, 10)
inListClick = False
'...
End Sub

Private Sub rokkit_Click()
If Not inListClick Then
'код непосредственного нажатия
End IF
End Sub
Автор: Shakirt
Дата сообщения: 17.05.2007 14:08
Помогите выполнить вот такое вот задание на Visual Basic:

Даны две последовательности чисел: a1, a2 …, a13; b1, b2 …, b13.
Используя эти последовательности, вычислить R. Символом П обозначены произведения всех элементов соответствующих последовательностей.

R= аmax / Пbi


Добавлено:
Знаю, что вопрос этот был, но так и не разобрался. Как Вычислить произведение положительных и суммы отрицательных элементов каждого столбца конкретного массива А1:E5 и вывести результы под каждым столбцом используя VBA. Тут проскакивал код, но я так и не смог адаптировать его под эту задачу. Если не сложно, помогите пожалуйста.
Автор: MagicWert
Дата сообщения: 17.05.2007 17:21
Ребят , а как сделать , чтобы скрипт сравнил набор символов в 2 ух ячейках , если расхождение менее чем в 2 символа, то в третью ячейку выводиться TRUE
Автор: AndVGri
Дата сообщения: 17.05.2007 17:53
MagicWert
А по подробнее

Цитата:
если расхождение менее чем в 2 символа

Что ты под этим подразумеваешь?
Автор: MagicWert
Дата сообщения: 17.05.2007 20:52
ну тоесть:
1234567 1234555 Расхождение в 2 символа - TRUE
1234567 1234444 Расхождение в 3 символа - False
1234567 1234567 ...... TRUE
тоесть <= 2 TRUE
> 2 False
Автор: AndVGri
Дата сообщения: 18.05.2007 00:46
MagicWert
По твоему варианту

Код:
Public Function StrCompWithOutLastTwo(ByVal Str1 As String, ByVal Str2 As String) As Boolean
Dim Len1 As Long, Len2 As Long, Result As Boolean

Len1 = Len(Str1): Len2 = Len(Str2): Result = False
If (Len1 = Len2) And (Len1 > 2&) Then
Str1 = Left$(Str1, Len1 - 2&)
Str2 = Left$(Str2, Len2 - 2&)
If StrComp(Str1, Str2, vbTextCompare) = 0& Then Result = True
ElseIf Len1 = Len2 Then
Result = True
End If
StrCompWithOutLastTwo = Result
End Function
Автор: MagicWert
Дата сообщения: 18.05.2007 10:30
спасибо
Автор: Boomstrike
Дата сообщения: 18.05.2007 11:20
Подскажите пожалуйста как написать макрос который стирал бы все данные в книге Эксель(что то типа clearcontents)
Заранее спасибо
Автор: Anton T
Дата сообщения: 18.05.2007 12:43
Boomstrike
cells.clear
Автор: The okk
Дата сообщения: 18.05.2007 12:49
Boomstrike
Ну вот ClearContents и используй. Примерно так:

Код: Dim ws As Worksheet
For each ws in Worksheets
ws.Cells.ClearContents
Next ws
Автор: Boomstrike
Дата сообщения: 18.05.2007 19:23
Anton T, The okk
Спасибо большое!
Автор: ostapINTO
Дата сообщения: 19.05.2007 02:21
Всем привет!
Есть задача! существует таблица 5*5 ексель
в А1 вбиваем например число 55 после етого автоматичски должно в Б1 С1 и Д1 записиватся числа 33 51 14
тоесть каждаму числу которое записиваем в А1 присвоены 3 значения
если в А2 пишем 33 то в Б1 С1 Д1 должно автоматически появится 12 23 33

а значений А1 есть 20 штук
хотяби как сделать один рядок а дальше я сам.....
ПОМОГОТИ ВОПРОС ЖИЗНИ !!!
Автор: AndVGri
Дата сообщения: 19.05.2007 02:37
ostapINTO
В обработчик события листа Change вбиваешь

Код:
If (Target.Address = "$A$1") And IsNumeric(Target.Value) Then
Select Case Target.Value
Case 55: Range("B1:D1").Value = Array(33, 51, 14)
'и так далее
End Select
End If
Автор: ostapINTO
Дата сообщения: 19.05.2007 02:46
извени за тупой вопрос а где етот обработчик события. листа change??
очень жду ответа
Автор: AndVGri
Дата сообщения: 19.05.2007 06:59
ostapINTO
Переключись в VBA в Project Explorer дважды щёлкни на листе, где будешь вводить в A1,
над окном кода в левом раскрывающемся списке выбери Worksheet, в правом Change. VBA создать необходимую процедуру-обработчик Worksheet_Change(ByVal Target As Range) в неё и вставляй вышеприведённый код
Автор: GFSGF
Дата сообщения: 19.05.2007 07:55
AndVGri
Добрый день. Нужно ещё пару небольших макросов.
1.Нужно, чтобы при нажатии на кнопку ,строки , допустим с 1 по 20 увеличились все в размере на определённое одинаковое значение, которое я задам.
2.Нужно проверить ячейки в строках с 1 по 20.Если допустим в первой строке (ячейки А1:F1) хотя бы одна из ячеек не равна 0,то эту строку оставить, иначе убрать. И так нужно проверить все строки c 1 по 20.

Автор: AndVGri
Дата сообщения: 19.05.2007 08:23
GFSGF
Ты правила Excel VBA "Напишите мне такой-то макрос, я VBA не знаю и знать не хочу" не приветствуются. - читал? Что, конкретно, не получается?
Автор: GFSGF
Дата сообщения: 19.05.2007 08:39
AndVGri
Правила читал. Просто мало времени.По этим вопросам ничего не получается.а если и что-то получается то уж слишком длинный код.Просто на примерах быстрее доходит. Ну ладно извини.
Автор: AndVGri
Дата сообщения: 19.05.2007 09:27
GFSGF
Что не получается? приведи код, подскажут или подскажу. Коль он большой - используй тэг
[no][more]Большой объём текста[/more][/no]

Думаешь, быстрее будет не делать? Что до примеров, а ты ведь просил уже готовые макросы:
Изменение размера строк:
Rows("1:20").RowHeight = 32
Удаление строки, если в диапазоне ячеек 0
If Application.WorksheetFunction.Sum(Range("A1:F1").Value)=0 Then Range("A1:F1").EntireRow.Delete Shift:=xlUp


Добавлено:
Последнее правильней (если есть отрицательные числа)
If Application.WorksheetFunction.SumSq(Range("A1:F1").Value)=0 Then Range("A1:F1").EntireRow.Delete Shift:=xlUp

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133

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


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