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

» Excel VBA (часть 3)

Автор: vlth
Дата сообщения: 05.03.2010 22:29

Цитата:
А как FlexGrid влепить на формочку эксэля?
У мну пишет "субъект не имеет доверия...."

Может поспособствует...
Ссылка1
Ссылка2

Добавлено:
Ещё
Автор: ksanfik
Дата сообщения: 06.03.2010 09:51
Доброго времени суток, есть небольшая проблемка и пока не могу найти решения:
есть локалка (к примеру 4 компа), надо с разных компов открыть различные файлы (имя привязано к дате, к примеру 04-03-10.xls), сделать определенные операции и все закрыть. Никак не удается найти файл по сети, да и вообще подключиться к удаленному компу.Этот гаденыш находит такой же файл и путь на родном компе и спокойно его открывает, заранее плиз...
Автор: NJCorp
Дата сообщения: 06.03.2010 10:58
Попробуй подключить сетевой диск, так должно пойти
Автор: NJCorp
Дата сообщения: 06.03.2010 23:03
Такой вопросик.
Нужно проверить коректность дати.

об IsDate() я знаю, но она говорить что 25.12.2000 коректна и 12.25.2000 тоже.
(формат у меня дд.мм.гггг)
Автор: vlth
Дата сообщения: 07.03.2010 19:35

Цитата:
об IsDate() я знаю, но она говорить что 25.12.2000 коректна и 12.25.2000 тоже

NJCorp, всё правильно: оба значения могут быть интерпретированы как дата, что IsDate и возвращает.
Попробуйте DateValue("12.25.2000") и DateValue("25.12.2000") - оба варианта вернут одну дату - 25 декабря - в формате, соответствующем вашим региональным настройкам.
Автор: NJCorp
Дата сообщения: 07.03.2010 21:44
Да почему оно так делает я понимаю.
В прочим не важно, я уже свою функцию написал.
Автор: V4mp
Дата сообщения: 09.03.2010 02:15
vlth
спс за инфу! почитал, ничего не помогает из решений, а в конце вычитал

Цитата:
Предлагается два способа установить Visual Basic 6.0 d в который входит компонент или зарегистрировать компонент в реестр в ручную внести регистрационный номер.

Так что видимо не судьба)
Автор: vlth
Дата сообщения: 09.03.2010 19:18

Цитата:
почитал, ничего не помогает из решений

V4mp, самое неприятное, что многие из годами работоспособных решений, требуют пересмотра с выходом обновлений продуктов мелкомягких. И реанимировать работоспособность удаётся далеко не всегда ((( И даже просто - что-то "почитать" - не всегда возможно: твой код перестаёт работать, а информации - ноль...
Автор: V4mp
Дата сообщения: 10.03.2010 10:53
vlth
Поэтому я взял за правило при работе в том же vba excel - использовать только стандарnyst контролы - label, listbox, textbox... Не так красиво, приходится извращаться, но хоть есть уверенность, что на любой машине работать будет
Автор: vchobo
Дата сообщения: 10.03.2010 12:27
Народ, подскажите или ткните носом слепого!
Проблема такова:
Есть книга с листами, на которых размещены запросы из MS SQL по ODBC.
Все это красиво отформатировано, добавлены куча вычисляемых полей с автофильтрами (заполнение формулами соседних столбцов)...
Данные обновляются с частотой раз в минуту.
Вопрос:
Как можно защитить лист с таким запросом (скрыть формулы, защитить их от редактирования)?
Как только включаю любую защиту листа, даже скрывать формулы, перестает работать обновление и недоступны автофильтры.
Подскажите, решается ли проблема ?
Автор: V4mp
Дата сообщения: 10.03.2010 15:21
vchobo
Все данные, которые идут с ms sql выводишь на отдельный скрытый лист, который не защищен.
А вот автофильтры и прочую красоту делаешь на другом листе, источником данных для которого и будет служить скрытый и не защищенный ранее лист.
А потом уже красивый лист можно защищать.
Как вариант
Автор: GenyaMS
Дата сообщения: 10.03.2010 22:37
Здраствуйте! подскажите пожалуйста - как в Excel в открытой раб книге- на листе - в выбранной колоонке получить номер строки в которой присутствуе какая-либо запись? говорят есть стандартная функция для этого, хотелось бы ее узнать???
Автор: Johnson Finger
Дата сообщения: 11.03.2010 07:30
Господа, кто подскажет, есть таблица, состоящая из нескольких колонок, в некоторых из этих колонок есть объединенные ячейки (например, между столбцами с А по D имеется одна общая объединенная ячейка), в сязи с этим, макросом не удается выделить один конкретный столбец скажем, тот же А), он выделяет именно те колонки, в которых есть эта одна общая ячейка. Соответственно, если мне нужно с помощью макроса произвести поиск в столбце А, то получается он ищет не только в А, но в B,C,D. Как сделать (если можно), чтобы с помощью макроса выделялся только один столбец, пусть в нем и есть объединенная ячейка. Просто когда просто курсором щелкаешь по заголовку столбца, он вроде как выделяет его.
Автор: visual73
Дата сообщения: 11.03.2010 08:42
GenyaMS
стандартная только такая:
выделяешь первую ячейку столбца в котором есть данные, двойной щелчок на нижней кромки курсора перемещает курсор по столбцу вниз до непустой ячейки.
Всё остальное - нестандартно
Автор: vlth
Дата сообщения: 11.03.2010 09:37
Johnson Finger, а зачем столбец выделять? - просто ищите в нём значение, получайте адрес ячейки, содержащей это значение и т.д.

Код: Dim c As Range
Set c = Worksheets(1).Columns(1).Find("a", LookIn:=xlValues)
If Not c Is Nothing Then MsgBox c.Address
Автор: Johnson Finger
Дата сообщения: 11.03.2010 10:09
vlth - спасибо Проблему примерно так и решил, когда явно задал индекс столбца (columns(1)).
Только теперь встал другой вопрос, как можно удалить строки, содержащие объединенные ячейки, ориентируясь по одному столбцу. Как бы можно было бы испольовать Do ... While, и пусть цикл работает, пока не наткнется на один критериев, который встречается в самом конце таблицы, но очень бы хотелось этого избежать, т.к. способ тупой, и медленный. Начал пробовать For each, потом понял, если я строки уаляю, то и диапазон который я задаю тоже изменяется. Так же отпал и просто For...next, т.к. он на сколько я понимаю, так же требует задать жесткий диапазон в котором будет прыгать цикл. А диапазон у меня получается динамическим. Вот если бы можо было сделать примерно так Do Z = 1 (это губо говоря адрес ячейки с кот начинаем) To "Конец" (а это текстовый критерий в ячейке, прочитав который цикл становится), но по-млему так неззя. Так что похоже придется просто прыгать на следующую очейку с помощью ActiveCell.offset(1,0).select и только так проверять является ли даная ячейка объединенной.
Либо в иеале, выделить вообще всю таблицу, как-нибудь посмотреть, естьли в ней объединенные ячейки и разом их удалть, может SpecialCells помочь? Ваше мнение?
Автор: vlth
Дата сообщения: 11.03.2010 11:57

Цитата:
Начал пробовать For each, потом понял, если я строки уаляю, то и диапазон который я задаю тоже изменяется.

А переопределить диапазон в цикле не получится?

Добавлено:

Цитата:
как-нибудь посмотреть, естьли в ней объединенные ячейки и разом их удалть, может SpecialCells помочь?


Вот что даёт запись макроса:
Код: Application.FindFormat.MergeCells = True
Cells.Find(What:="", After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
, SearchFormat:=True).Activate
Cells.FindNext(After:=ActiveCell).Activate
Автор: crotoff
Дата сообщения: 11.03.2010 13:57
удалил задачу, т.к. решил через формулы удобнее
Автор: Maximus777
Дата сообщения: 11.03.2010 17:01
V4mp, мне помог приручить флексгрид вот такой файлец. Уже всяка поизвращался с ним, но скролл в нём это что-то с чем-то. Надо сабклассить оконную функцию, чтобы всего навсего прокрутить грид. Мне пока это не удалось. Те примеры, что нашёл в сети просто валят весь ексель.
Автор: Oyger
Дата сообщения: 12.03.2010 13:16
Maximus777
У меня есть пример (сам в свое время сделал - работает) работы скрола. Но он был использован во фрайме и со списком (7 штук во фрейме) чекбоксов.
А что такое "флексгид" и "сабклассить оконную функцию" у Вас - я не знаю... помочь не могу
Автор: Maximus777
Дата сообщения: 12.03.2010 13:37
Oyger, флексгрид - это MSHFlexGrid, есть у всех. Но он сцабака не скроллится колесом. А вообще проблема родилась на пустом месте, раньше я использовал ListView и всё было пушисто. Но в один момент обновлённая система что-то поменяла внутри макроса и на старых системах ListView обломался. Даже создание контрола на форме в runtime не помогло. Пришлось отказаться от него. Влепил флексгрид, он даже ещё функциональнее, но вот с колесом полная засада. Может кто-нить посоветует лучший в мире грид? Чтоб функционировал как ListView в режиме report.
Автор: GenyaMS
Дата сообщения: 13.03.2010 07:07

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

Ну вот опять сам нашел нужную инфу: Cells = Worksheet.Cells.SpecialCells(11)
и пара ссылок по этой же теме: http://forum.developing.ru/archive/index.php/t-11695.html
и http://www.citforum.ru/programming/windows/excel_faq/part3.shtml#3.05
Может кому-то понадобится
Автор: Sniper1
Дата сообщения: 13.03.2010 11:30
Люди добрые, помогите с мной созданной для работы таблицей.

Надо так сделать, если ввожу сумму в F4 и нажимаю применить то сразу же что б выскакивало окошко для G4 что б ввести в нём номер кассы, но если можно что б этот номер в этом окошке фиксировался для следующей такой же операции что б не надо было его вводить постоянно, например в следующий раз я ввожу сумму в F5 а для G5 вылазит тоже окошко с предыдущим номером кассы и я тока нажимаю ок. вообщем пока я этот номер кассы сам не поменяю он там что б оставался. можно вообще такое сделать?

Файл таблицы
Автор: vlth
Дата сообщения: 13.03.2010 16:33
Sniper1, насколько я понял задачу, Вам нужно что-то типа такого:

Код: Private Sub Worksheet_Change(ByVal Target As Range)
Static varKassa As Variant
If Not Intersect(Target, Me.Columns(6)) Is Nothing Then
If Target.Cells.Count = 1 Then
If Intersect(Target, Me.Columns(6)).Address = Target.Address Then
varKassa = InputBox("Введите кассу", "Новая касса", varKassa)
Target.Offset(, 1) = varKassa
End If
End If
End If
End Sub
Автор: Sniper1
Дата сообщения: 13.03.2010 17:32

Цитата:
Sniper1, насколько я понял задачу, Вам нужно что-то типа такого:

Код:
Private Sub Worksheet_Change(ByVal Target As Range)
Static varKassa As Variant
If Not Intersect(Target, Me.Columns(6)) Is Nothing Then
If Target.Cells.Count = 1 Then
If Intersect(Target, Me.Columns(6)).Address = Target.Address Then
varKassa = InputBox("Введите кассу", "Новая касса", varKassa)
Target.Offset(, 1) = varKassa
End If
End If
End If
End Sub

Выложенный файл как использовать, я не понял: F4 и G4 у Вас заняты, похоже, под заголовки.
Приведённый код неплохо бы доработать для проверки вводимого номера кассы (сейчас этого не сделано, поскольку Вы не указали, каким может быть этот номер - тип значения, ограничение по кол-ву символов и т.д.).

Код необходимо вставить в модуль раб. листа


Мне надо вот такое как в этом файле сделанно. а вот теперь как этот макрос или как он там называется, перенести на мой файл
Автор: ferias
Дата сообщения: 13.03.2010 19:44
vlth
как вы смотрите на такой вариант?

Код:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim cassa As String, varKassa As String
If Target.Column = 6 Then
If Target.Row >= 4 And Target.Row <= 104 Then
On Error Resume Next
cassa = Evaluate("Cassa")
If Err.Number <> 0 Then a = ""
If Target.Value <> "" Then
varKassa = InputBox(Prompt:="Введите кассу", Default:=cassa)
ActiveWorkbook.Names.Add Name:="Cassa", Visible:=False, RefersTo:=varKassa
Cells(Target.Row, 7).Value = varKassa
Else
End If
Else
End If
Else
End If
End Sub
Автор: Sniper1
Дата сообщения: 13.03.2010 23:05

Цитата:
vlth
как вы смотрите на такой вариант?

Код:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim cassa As String, varKassa As String
If Target.Column = 6 Then
If Target.Row >= 4 And Target.Row <= 104 Then
On Error Resume Next
cassa = Evaluate("Cassa")
If Err.Number <> 0 Then a = ""
If Target.Value <> "" Then
varKassa = InputBox(Prompt:="Введите кассу", Default:=cassa)
ActiveWorkbook.Names.Add Name:="Cassa", Visible:=False, RefersTo:=varKassa
Cells(Target.Row, 7).Value = varKassa
Else
End If
Else
End If
Else
End If
End Sub

Sniper1
Откройте вашу книгу, нажмите комбинацию клавиш Alt+F11, в окне Projekt-VBAProjekt, найдите вашу книгу, найдите лист "Лист4(18.09.2009)", обязательно активируйте лист двойным щелчком мыши и вставте выше укузанный код.


Спасибо! вариант супер и тем более с объяснением на пальцах.
Автор: Swindler1
Дата сообщения: 14.03.2010 08:53
Здравствуйте!
Прошу помощи в следующем:
Excel 2007

Имею:
С сервера программой IDLoader произодится загрузка исторических и текущих (постоянно изменяющихся) котировок выбранного финансового инструмента в текстовый файл (.csv). Произвел импорт этих внешних данных с минимально возможной периодичностью обновления - 1 мин.

Получил:
9 колонок исторических данных, с неимоверным количеством строк, с изменяющимися с периодичностью 1 раз/мин данными в самой "свежей" нижней строке.
Эта масса данных с заданным (выбранным) интервалом построения свечи (чуть ниже поясню), к примеру - 5 мин, пополняется новой, становящейся "наисвежайшей", строкой.
/О СВЕЧЕ: абсолютное соответствие с требуемыми данными для построения Биржевой диаграммы: цена открытия, максимальная, минимальная цены и цена закрытия; за выбранный интервал времени формируется "свечка"/

Суть проблеммы:
количество строк уже через пару дней перевалило за 4000 (!), построение вышеобозначенной диаграммы (она необходима) дается компьютеру все тяжелее, а ведь я еще ничего с этими данными-то и не делал, хотя планировал провести с ними весьма объемную работу...

Что нужно получить:
Допустим, мне достаточно для работы 500 строк (свечек на диаграмме).
Задаю этот параметр каким-либо образом один раз, и в результате имею постоянное количество строк, при этом при появлении новой "самой свежей" (нижней) строки, происходит автоматическое удаление самой "старой" (т.е. верхней) строки (она идет второй, т.к. первая отдана под заголовки, формируемые в самом текстовом файле-источнике, что не мешеает) со смещением (синхронным, по всем колонкам, как загружаемым, так и моим, с формулами) всей таблицы вверх.
/далее, введя нужные формулы в соседние колонки, на базе этого уже строю свои диаграммы и т.д. - эт уже мне по силам/
Прошу Вас помочь мне это реализовать.

Спасибо за внимание!
Автор: Sniper1
Дата сообщения: 14.03.2010 10:04
Господа, теперь помогите осуществить такое. Есть книга в которой надо при комбинации CTRL+SHIFT+N создавалась копия открытого листа, которому присваивается имя сегодняшней даты (на момент создания естественно), в таком формате 14.03.2010. И некоторые изменения в новом листе, как например то что в столбце H на старом листе, оказывается в столбце B нового листа а так же столбцы C, D, E, F, и G опустошаются. Заранее благодарю.
Автор: NJCorp
Дата сообщения: 14.03.2010 10:06
Помогите с реализацией...
Есть форма, на ней комбобокс.
Надо создать список (комбобокса) из установлених в систему принтеров и вибрать установлений по умолчанию.
И если возможно добавить кнопку "Свойства" (оно же Файл ->Печать...->кн."Свойства").
Спасибо.

Swindler1
Думаю на словах ето примерно так...
если последняя строчка больше 501 тогда...
х = последняя.строка - 501
строки с 2 по х .удалить


сори, шас времени маловато код писать.

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127

Предыдущая тема: VS 2010


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