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

» Excel VBA (часть 2)

Автор: filemoto
Дата сообщения: 07.05.2008 10:04
а можно ли подключиться к листу через рекордсет?
заколебался выбирать уникальные записи в колонке, а так бы сделал запрос, типа:
SELECT DISTINCT myCol FROM mySheet и вуаля
кто-нить знает, можно ли подключится к листу из самой книги в которой этот лист находится?
Автор: Vitus_Bering
Дата сообщения: 07.05.2008 10:33
filemoto

Цитата:
SELECT DISTINCT myCol FROM mySheet

Так не получится, вот на эту тему.
Автор: filemoto
Дата сообщения: 07.05.2008 14:59
1. Vitus_Bering
да, спасибо, я видел это решение...
но у меня вопрос в ином...
мне нужно получить эти уникальные записи в листбокс.
получается, что нужно скрытно делать лист, там вносить уникальные ячейки, а потом их считывать в листбокс?

2. как одной командой отобразить все записи? т.е. нужно одним махом вернуть страницу в полный вид, перед тем как её отавтоформатили по колонкам.

добавлено:
1. нашёл пример, как заполнить листбокс уникальными записями да ещё и с сортировкой
может кому понадобится LisboxSort.zip
страница описания тут: http://www.ozgrid.com:80/VBA/UserForms.htm

чтобы скопировать регион НЕ включая скрытые ячейки нужно

Код: Set rOldList = Sheet2. Range("A1", Sheet2.Range("A65536").End(xlUp)).SpecialCells(xlCellTypeVisible)
Автор: Vitus_Bering
Дата сообщения: 07.05.2008 19:47
filemoto

Цитата:
как удалить все записи (в смысле строки), в которых в колнке "А" значение равно "чему-то"?


Код: Sub DelIF()
Dim i As Integer

For i = 1 To ActiveSheet.UsedRange.Rows.Count
If Cells(i, 1) = 100 Then
Rows(i & ":" & i).Delete
' Или скрыть
'Rows(i & ":" & i).EntireRow.Hidden = True
End If
Next i

End Sub

Автор: SAS888
Дата сообщения: 08.05.2008 04:16
Позволю себе высказать некоторые замечания по поводу кода от Vitus_Bering.
1) Если, например, на листе используются строки с 10 по 100, то код
Цитата:
For i = 1 To ActiveSheet.UsedRange.Rows.Count
обработает строки с 1 по 91, что есть неправильно.
2) Если для скрытия строк все равно, то при удалении нужно цикл организовывать снизу вверх, иначе, при удалении строки (по умолчанию все строки "поддернутся" вверх), следующая строка будет пропущена и изменится номер последней непустой строки (т.е. границы диапазона, определенного перед началом выполнения процедуры).
Более корректно так:

Код: Sub HidOrDelRows()

Dim r As Long, OurValue As Variant ' Ну, или то, что Вам нужно
Application.ScreenUpdating = False ' чтобы экран не мелькал

OurValue = 100 ' Удалить (скрыть) строки, если в ячейке столбца "A" это значение

For r = Cells(Rows.Count, "A").End(xlUp).Row To 1 Step -1
If Cells(r, "A") = OurValue Then Rows(r).Delete ' Это для удаления
'If Cells(r, "A") = OurValue Then Rows(r).Hidden = True ' Это для скрытия
Next r

End Sub
Автор: filemoto
Дата сообщения: 08.05.2008 10:54
Vitus_Bering
спасибо друзья,

SAS888
спасибо за существенную поправку
Автор: chipie
Дата сообщения: 09.05.2008 10:45
есть проблема-циклические алгоритмы не поддаются мне
ВЫ бы не могли помочь?
Автор: CEMEH
Дата сообщения: 09.05.2008 21:58
ВОПРОС

Каким образом произвести экспорт данных из ВЕБ страницы, если вход закрыт паролем.

Итак: Есть веб таблица, она открывается по адресу ВВВ//блаблабла&date1=01.01.07&date2=31.12.07
Но для того, чтобы открыть страницу ножно сначала ввести логин/пароль. То есть если я в IE вставлю адрес и нажму ввод то таблицу не увижу, и буду переадресован на страницу авторизации.
В excel набираю данные - импорт, вставляю адрес, открывается "введите логин пароль", нажимаю "регистрация" и вуаля, нужная страница импортирована. Все это дело я делал с включенной записью макроса. Повторил выполнение макроса - работает. На радостях сохранил книгу и закрыл. Позже открыл, запустил макрос но импортировалась только страница "введите логин/пароль"
В записанном макросе и намека нет на то, что я набирал логин/пароль.

Как быть?
Показать не могу т к сайт корпоративный и не имеет выхода в интернет. Если для этого нужен код страницы авторизации то это не проблемма.
Автор: ferias
Дата сообщения: 11.05.2008 02:59
Всем привет, помогите решить такую задачу. К примеру у меня значение в ячейке A1 равно 45,15 мне нужно чтобы Cells(A1).Value=45.15 но в ячейке A1 пользователь видел 45,15 m2(здесь число 2 надстрочное, тоесть квадрат) и еще, если это возможно, использовать ImputBox или Форму чтобы пользователь смог ввести к примеру "штук" или "m2(здесь число 2 надстрочное, тоесть квадрат) и в результате в
ячейке A1 мы видим 45,15 штук или 45,15 m2(здесь число 2 надстрочное, тоесть квадрат).
Пробовал ActiveCell.NumberFormat = "#,##0.00 [$ m2. -1]" выходит 45,15 m2. Может можно как-то использовать ASCII ?
Автор: SERGE_BLIZNUK
Дата сообщения: 11.05.2008 03:48
ferias Пользуйтесь макрорекордером! Вот, только что записал!
Копайте в сторону кода:

Код:
With ActiveCell.Characters(Start:=5, Length:=1).Font
.Name = "Arial Cyr"
.FontStyle = "обычный"
.Size = 10
.Strikethrough = False
.Superscript = True
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.ColorIndex = xlAutomatic
End With
Автор: Igory26
Дата сообщения: 11.05.2008 08:23
Всем привет.
Подскажите пожалуйста как в VBA содержимое ячейки просмотреть посимвольно?
Пробавал сделать так, выдает ошибку "<Невозможно получить свойство Text класса Characters>" на строке tmp = Cells(1, 1).Characters(Start:=m, Length:=1).Text

Dim m As Integer
Dim tmp As String, sem As String
For m = 1 To Len(Cells(1, 1))
tmp = Cells(1, 1).Characters(Start:=m, Length:=1).Text
If tmp = 1 Then
sem = 9
End If
If tmp = 2 Then
sem = 10
End If
If tmp = 3 Then
sem = 11
End If
Next m
Автор: zoom2x
Дата сообщения: 11.05.2008 10:24
Есть вопрос (Excel) :

Как организовать поиск на листе, заданного значения "234". при нажатии кнопки?
Нужно найти все заданный значения и с помощью MsgBox вывести к-во найденных значений.

Private Sub CommandButton1_Click()

Cells.Find(What:="234", After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
, SearchFormat:=False).Activate

End Sub

Вот этот код работает. но при отсутствии заданного значения на листе вылетает ошибка.

Run-time error '91'
Object variable or with block variable not set.
Автор: Elena3785
Дата сообщения: 11.05.2008 19:52
Здравствуйте ребята!
У меня есть такая проблема. Я делаю таблицу по учету рабочего времени. В столбцах, где я указываю время прихода на работу и время ухода с работы, выбран формат Время. Но вот в чем загвоздка, при складывании всего времени, например, прихода на работу по столбцу, оно складывется, но не так как нужно. Т.е. складывается до 24 часов как нужно, а далее все не так. Чтобы было более понятнее, в месяц работа составляет 160 часов, если я в ячейке установлю формат Время и внесу цифру 160:00, то он выдаст следующее - 16:00. Далее если я начну складывать, например, следующее время - 15:45, 4:20, 12:10, то получу это - 8:15, вместо 32:15. Получается, что надо каким-то образом перевести время в формат числовой так, чтобы например, 15:45 будет соотвествовать 15,75, 4:20 - 4,33 и 12:10 - 12,17 (это расчитывалось из пропорции 1 час - 60 мин, х час - 45 мин и т.д. Далее я 45 мин делила на 60 мин и прибавляла 15).

Может быть кто подскажет как это сделать, т.е. в одном столбце - вводится время, а в другом - его числовой формат. Мне просто необходимо складывать все рабочее время за месяц, а с форматом Время оно складывается не так как надо.
Автор: ferias
Дата сообщения: 11.05.2008 20:44
SERGE_BLIZNUK возможно вопрос неправильно поставлен, мне как аматору тяжело дается терминология, я попытаюсь правильно описать суть вопроса. Содержимое ячейки рано 45,15 (где 45,15 это число) а 45,15 m2 это формат ячейки, тоесть то что мы видим. Так вот, мне удается это сделать вручную, а при записи
Цитата:
макрорекордером!
форматируем ячейку вот в такой формфат # ##0,00\ [$ m2. -1] то, после записи
имеем # ##0,00\ [$ m?. -1] . При записи символ "2" меняется на "?" . Конечно можно обойти эту проблему, и просто скопировать(програмно), формат, заранее отформатированной(вручную) ячейки. Но всетаки хотелось бы решить этот вопрос. Чтобы было проще разобратся, смотрите картинки: http://img231.imageshack.us/img231/6529/lixo2em5.jpg и http://img231.imageshack.us/img231/2250/lixo3zw1.jpg
Влюбом случае искренне вам благодарен.

Добавлено:
Elena3785 раньше, я тоже занимался этим вопросом. Здесь прилагается пример http://slil.ru/25778120 . Я его по бистрому скопировал, так что суть думаю будет понятна. Дело в том что я работаю не в русской версии Exel, и здесь почемуто возникла проблема с ячейкой D41 (фнкция выводит время только до 23), но я думаю что это решимо, нужно только поискать соответствующую функцию. Удачи.
Автор: CEMEH
Дата сообщения: 11.05.2008 22:54
Elena3785
Формат ячейки нужно поставить время, но это не все. Среди возможных вариантов выберите 37:30:55. Тогда все у вас получится.

А вообще у вас все считает праильно. Если поэксперементировать и написать в ячейку 123:40 в зависимости от формата можно увидеть в ячейке 3:40 или 05.01.1900 3:40:00 или 123:40 или 5,15277777777778. И не забывайте, что 1 это 24 часа, то есть сутки.
Автор: SAS888
Дата сообщения: 12.05.2008 04:10
Igory26
Не совсем понял, что Вам нужно. Может так:

Код: Dim m As Integer, sem As String

For m = 1 To Len(Cells(1, 1))
Select Case Mid(Cells(1, 1), m, 1)
Case 1
sem = 9
Case 2
sem = 10
Case 3
sem = 11
End Select
Next
Автор: Igory26
Дата сообщения: 12.05.2008 04:39
SAS888
Спасибо огромное!!! Это именно то.
Автор: SAS888
Дата сообщения: 12.05.2008 04:42
zoom2x
Можно так:

Код: Private Sub CommandButton1_Click()

Dim x As Range, Fst As String, No As Long

With ActiveSheet.UsedRange
No = 0
Set x = .Find(what:="234", LookAt:=xlPart)
If Not x Is Nothing Then
Fst = x.Address
Do
No = No + 1
Set x = .FindNext(x)
Loop While x.Address <> Fst
End If
End With

MsgBox No & " value(s) are found"

End Sub
Автор: YarinK
Дата сообщения: 12.05.2008 19:23
Доброго времени суток!
Помогите пожалуйста решить проблемку. Есть функция: Public Function exam(s1, s2, s3, s4, s5, s6, s7, s8, s9, s10). Вопрос: как в цикле перебрать переменные s1..s10 и сделать сравнение например с нулем? Заранее благодарен!
Автор: Vitus_Bering
Дата сообщения: 12.05.2008 19:51
YarinK

Код: Public Function exam(s1, s2, s3, s4, s5, s6, s7, s8, s9, s10)
Dim i As Long
Dim a(10) As Long

a(1) = s1: a(2) = s2: a(3) = s3: a(4) = s4: a(5) = s5
a(6) = s6: a(7) = s7: a(8) = s8: a(9) = s9: a(10) = s10

For i = 1 To 10
If a(i) = 0 Then MsgBox i
Next i

End Function
Автор: YarinK
Дата сообщения: 12.05.2008 20:28
А ларчик открывался просто! Огромное спасибо Vitus_Bering!
Автор: CEMEH
Дата сообщения: 12.05.2008 21:48
Братцы, Поможите!
Суть в том,, что ищу программу которая будет управлять другими программами.
Вобщем есть проблемма, которую я не могу решить средствами VBA. (экспорт веб страниц, закрытых паролем и не только это. Есть еще корпоративный софт, с которым приходится работать)
По сути эта программа должна проследить, что я делаю на компьютере и потом воспроизвести это действие. Что-то типа записи макроса, только в глобальном масштабе. Желательно что-нить с возможностью самостоятельного программирования.
Типа:
10 открыть IE страницу с адресом ввв//блаблабла
20 вставить логин пароль в форму
30 открыть IE страницу с адресом ввв//блаблабла/data
40 сохранить страницу как....
50 запустить ВинАмп.файл "песня.мп3"
60 запустить приложение abcde.exe
60 в приложении abcde.exe.нажать кнопку"А".нажать кнопку."экспорт файла в 123.xls"
70 запустить файл 123.xls
Ну и все в таком духе.
Нутром чую, должна быть такая программа. Но сформулировать запрос для поисковика не могу.

Почему в эту тему? А мне больше не куда (((
Автор: RedPromo
Дата сообщения: 13.05.2008 01:46
CEMEH
Чуство у тебя очень даже правильное, есть такие программы, вот одна из них, возможности впечетляют.
AutoHotkey
и русская документация.
Автор: CEMEH
Дата сообщения: 13.05.2008 22:26
RedPromo

Ай да помог! Вот спасибо!!! Прога - СУПЕР!!!
Я теперь таких чудес наваляю! Да если еще VBA к этому делу прикрутить!

Послесловие: Для получения различного рода итоговых сведений по работе с базами данных мне приходилось очень много руками тыкать. Например, я могу получить таблицу только за месяц, а чтобы получить за год надо повторить все 12 раз, сохранить посчитать. Несколько раз писали разрабатывателям софта, дескать добавьте фильтр, галочку, палочку но они ни в какую. Пусть теперь голову ломают, а чо у нас сервер греица???
Автор: Lom L
Дата сообщения: 14.05.2008 13:05
Доброго всем время суток!
Подскажите пожалуйста как изменять регистр букв в ячейке?
Заранее благодарю!
Автор: RedPromo
Дата сообщения: 14.05.2008 13:43
Lom L

Код: ПРОПИСН(текст)
Текст — текст, преобразуемый в верхний регистр. Текст может быть ссылкой на текст или текстовой строкой.

СТРОЧН(текст)
Текст — текст, преобразуемый в нижний регистр. Функция СТРОЧН не меняет знаков, которые не являются буквами.

VBA

LCase(string)
Returns a String that has been converted to lowercase.

UCase(string)
Returns a Variant (String) containing the specified string, converted to uppercase.
Автор: Lom L
Дата сообщения: 14.05.2008 15:45
доброго времени суток!
у меня к вам вопрос как при выполнении кода "Application.FindFile" записать имя файла в переменную?
заранее благодарю за ответ!
Автор: Vitus_Bering
Дата сообщения: 14.05.2008 16:54
Lom L
Никак, Application.FindFile возвращает истину, если файл успешно открыт.

Код: Sub OpenFileM()

iFullName = Application.GetOpenFilename(FileFilter:="Excel Files (*.xls), *.xls")
If iFullName <> False Then
MsgBox "Вы выбрали : " & iFullName, , ""
Else
MsgBox "Вы нажали кнопку Закрыть/Отмена", , "Ошибка пользователя !!!"
End If

End Sub
Автор: ol7ca
Дата сообщения: 14.05.2008 23:49
Вопрос. Как можно закрепить "кнопку" на листе, чтобы она не ездила по листу?
спасибо.
Автор: ecolesnicov
Дата сообщения: 15.05.2008 10:22
ol7ca
Прадварительно перейти в Design Mode (соответствующая иконка на Control Toolbox).
Затем правая кнопка мыши на твоем объекте, выбираешь "Формат Объекта" / "Format Control", далее закладка "Свойства" / "Properties", далее выбираешь вариант "Не перемещать и не изменять размеры" / "Don't move or size with cells". Все.

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133

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


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