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

» Excel VBA (часть 3)

Автор: ptr73
Дата сообщения: 29.04.2015 08:07
KDPoid
да, так гораздо лучше
просто не совсем понятно про выделение строки над курсором
может ему цветом эту строку нужно выделить, и чтобы курсор не переместился?
потому и советовал самостоятельно провести требуемые операции
Автор: Bozoman
Дата сообщения: 29.04.2015 12:30
ActiveSheet.Rows(ActiveCell.Row - 1).Select
То что нужно!!! Спасибо большое.
Автор: PaNov
Дата сообщения: 03.05.2015 12:03
есть ли у кого мысли, от чего может зависеть скорость экспорта xls файлов в pdf?

дело в том, что на некоторых компьютерах экспорт файла занимает единицы секунд (2-5 сек), а на некоторых экспорт того же файла растягивается до минуты... при этом характеристики компьютеров сходные, состав ПО тоже.

код, которым выполняется экспорт (на python, но это неважно):


self.Document = win32com.client.Dispatch("Excel.Application")
self.Workbooks = self.Document.WorkBooks
self.Workbook = self.Document.WorkBooks.Open(xls_file_name)
...
pdf_sheets = self.Document.Sheets(pdf_sheet_names)
pdf_sheets.Select()
self.Workbook.ActiveSheet.ExportAsFixedFormat(Type=0, Filename=pdf_file_name, IgnorePrintAreas=False)
Автор: Winand
Дата сообщения: 04.05.2015 13:07
PaNov знаем, конечно.) Всё зависит от (ВНЕЗАПНО) принтера. Если выбрать в качестве принтера XPS, то будет быстро, если выбрать удалённый принтер, то будет очень медленно. Для ускорения макросов можно использовать свойство PrintCommunication в новых версиях офиса.
Также в зависимости от принтера выходной PDF может слегка различаться.
Я как раз с помощью питона строю отчёты в Excel по данным из Acccess, и для себя пришёл к выводу, что нужно выбирать виртуальный принтер, на роль которого хорошо подходит XPS.
Автор: mrdime
Дата сообщения: 15.05.2015 10:33
Господа, как сделать макрос аналогичный нажатию на всплывающую кнопку "Convert to Number"?
Есть ячейки с числами, но сабж их как числа не воспринимает, команда форматировать и выставить числовой формат не помогоает. Решает проблему только нажатие всплывающей слева над ячейкой кнопки "Convert to Number". Но, если включить запись макроса, то ничего не происходит, записывается пустой макрос. Как создать аналогичный макрос в VBA?
Автор: KDPoid
Дата сообщения: 15.05.2015 11:04
Во времена, когда кнопки конвертировать в число ещё не было, Excel предлагал осуществлять насильную конвертацию умножением на 1.

Может так и попробовать ?
Автор: vikkiv
Дата сообщения: 15.05.2015 11:06
KDPoid, lol, а я как лох всё время через +0 проводил, очередной бинарный мир получился...

mrdime можно так попробовать, выдели диапазон и макрос проверит если там что-то можно конвертировать в число - конвертирует, другое дело если там десятичные или какие другие разделители есть (не по региональным настройкам), пробелы в середине и пр..:
Код: Sub tst(): Dim c As Range: For Each c In Application.Selection
If IsNumeric(c) Then c = Val(c): c.NumberFormat = "General"
Next c: End Sub
Автор: mrdime
Дата сообщения: 15.05.2015 15:42
KDPoid
Сдела по методу vikkiv.

vikkiv
Спасибо, я где-то так и подозревал, что через функцию Val делать придестя. Немного видоизменил, работает.
Числа - несложные: обычные целые числа, запятых и прочей лабуды с пробелами нет. Так, что все видоизменилось как надо. Исходный файл не мой (с которым работать пришлось), но чего-то понять не могу: что нужно было деалать с таблицей, чтобы числа Excel перестал воспринимать как числа, а отформатил как текст (как в данном случае).
Автор: Ivan38Rus
Дата сообщения: 18.05.2015 16:14
Всем привет.

Моя задача - выгрузить определенные значения со стороннего сайта, в связи с этим вопрос - сможет ли Excel (а точнее VBA) с этой задачей справиться ?

В коде самого сайта - разобрался, как это значение искать - тоже. Теперь пытаюсь выбрать инструментарий, решил начать с того с чем знаком.
Автор: vikkiv
Дата сообщения: 18.05.2015 23:35
Ivan38Rus
Код: Sub tstx(): With ActiveSheet.QueryTables.Add(Connection:="URL;http://www.cbr.ru/", Destination:=ActiveSheet.Cells(1, 1))
.WebFormatting = xlWebFormattingNone: .Refresh BackgroundQuery:=False: End With: End Sub
Автор: ZlydenGL
Дата сообщения: 21.05.2015 14:30
Ivan38Rus, а еще можно в References укзать Microsoft Internet Controls, и тогда появится оччень интересная переменная InternetExplorer

Ну и XMLHttp() никто не отменял... В общем от сайта все зависит. Например, курсы ЦБ проще штатным запросом выгрузить, а если требуется интерактивность с вводом (и отправкой) значений - либо переменная, либо (если удастся) XMLHttp().
Автор: KF121
Дата сообщения: 01.06.2015 22:04
Привет, кто сталкивался с работой с методами WorkBook.Checkout и WorkBook.Checkin?

Открваю экселину с ШП, обновляю, возвращаю на серавер обратно. В режиме отладки все работает, в деббагаре по F8. Только выполняю через процедуру по нажати на кнопку как вылетает ошибка CheckIn Run time error 80004003 The check out cannot be undone. Если тутже нажать F8 то все проходит.

Кто знает в чем может быть дело?
Автор: KF121
Дата сообщения: 02.06.2015 16:27
Решение найдено, перед работой с методами WorkBook.Checkout и WorkBook.Checkin, надо обязательно вызывать WorkBook.CanCheckout и WorkBook.CanCheckin
Автор: LIL_JAN
Дата сообщения: 02.06.2015 19:21
Здравствуйте подскажите пожалуйста. Можно ли создать макрос или надстройку для перевода текста с одного языка на дугой в excel?
Нашел на просторах интернета два макроса. Вот только один не переводит как только нажимаю транслит тот надписи исчезают. А второй как я понял больше не работает из за изменений в получении апи ключа у гоогла.
Function Translate$(ByVal TextToBeTranslated$, ByVal resultLanguageCode$, _
Optional ByVal sourceLanguageCode$ = "")
' переводит текст TextToBeTranslated$ с языка sourceLanguageCode$
' на язык resultLanguageCode$, используя сервис переводов Google Translate
Application.Volatile True
Set ADOStream = CreateObject("ADODB.Stream")
With ADOStream
.Charset = "utf-8": .Mode = 3: .Type = 2: .Open
.WriteText TextToBeTranslated: .Flush: .Position = 0
.Type = 1: .Read 3: ByteArrayToEncode = .Read(): .Close
End With

For i = 0 To UBound(ByteArrayToEncode)
iAsc = ByteArrayToEncode(i)
Select Case iAsc ' переводим текст в кодировку, понятную Google
Case 32: sTemp$ = "+" 'space
Case 48 To 57, 65 To 90, 97 To 122: sTemp$ = Chr(ByteArrayToEncode(i))
Case Else: sTemp$ = "%" & Hex(iAsc) 'Chr(iAsc)
End Select
txt$ = txt$ & sTemp$
Next

' формируем ссылку, по которой Google выдаст нам файл с переводом
URL$ = "http://translate.google.com.ua/translate_a/t?client=json&text=" & _
txt$ & "&hl=" & resultLanguageCode$ & "&sl=" & sourceLanguageCode$

Set XMLHTTP = CreateObject("Microsoft.XMLHTTP") ' скачиваем файл
XMLHTTP.Open "GET", Replace(URL$, "\", "/"), "False": XMLHTTP.send

If XMLHTTP.statustext = "OK" Then
LocalPath$ = Environ("TMP") & "\google.txt"
With ADOStream ' перекодировка файла
.Type = 1: .Open: .Write XMLHTTP.responseBody
.SaveToFile LocalPath$, 2
.Close: .Type = 2: .Charset = "utf-8": .Open:
.LoadFromFile LocalPath$ ' загружаем данные из файла
Translate$ = .ReadText ' считываем текст файла в переменную Translate$
End With

On Error Resume Next ' вырезаем нужный текст из ответа
Translate$ = Split(Translate$, """trans"":""")(1)
Translate$ = Split(Translate$, """,""orig")(0)
Translate$ = Replace(Translate$, "quot;", Chr(39))
If Translate$ = " null, " Then Translate$ = "Не переведено"
End If
Set XMLHTTP = Nothing: Set ADOStream = Nothing
End Function

Sub Translate()
Dim cell1 as Range, cell2 As Range
Dim i as Long, Langs As Long

Langs = 3 'количество языков перевода, включая русский

For Each cell1 In ActiveSheet.Cells.SpecialCells(xlCellTypeConstants)
For Each cell2 In Worksheets("Словарь").Cells.SpecialCells(xlCellTypeConstants)
If cell1.Value = cell2.Value Then
i = cell2.Column
If i = Langs Then i = 1 Else i = i + 1
cell1.Value = Worksheets("Словарь").Cells(cell2.Row, i).Value
GoTo 1
End If
Next cell2
1: Next cell1

End Sub
Автор: cabron666
Дата сообщения: 05.06.2015 14:54
Здравствуйте,
Есть таблица с данными типа:
Products
I3 5005U
AMD Sempron
Products
RAM G.Skill

Нужно найти повторяющие продукты и проигнорировать слово "Products" нашел код, который удаляет дупликаты, но нужно внести некоторые изменения
-Вместо того, чтобы удалять, ножно показать в окне повторяющиее значение
-При нажатии на кнопку, возможно ли поставить курсор в место, где имеется повторяющиее значение
Спасибо


Код: Sub repetidos()
'Opcional
'Application.ScreenUpdating = False
Range("A2").Select
Do While Not IsEmpty(ActiveCell)
x = WorksheetFunction.CountIf(Range("A:A"), ActiveCell)
If x > 1 Then
ActiveCell.EntireRow.Delete
Else
ActiveCell.Offset(1, 0).Select
End If
Loop
Range("A1").Select
'Opcional
'Application.ScreenUpdating = True
End Sub
Автор: Fsp050
Дата сообщения: 05.06.2015 18:56
Помогите, пожалуйста, можно ли себе так облегчить задачу. В экселе есть функция мопред.
которая вычисляет определитель матрицы. У меня матрица равно 0.
вот тут в экселе это видно.
http://rusfolder.com/43773513
тут как бы высчитано для нескольких матриц.
Вопрос , можно ли на vba написать скрипт, который будет удалять переменные пока не получит . что определитель матрицы равен единице. Например есть 20 переменных и лишь после удаления 5-ой определитель матрицы стал равен больше нуля или меньше.Но только удаленную переменную или переменные потом снова восстановить и пометить её желтым цветом.
Автор: Alexey87
Дата сообщения: 11.06.2015 13:55
Уважаемые, форумчане!
Помогите, пожалуйста, решить следующую задачку:
есть файл, в нем более 70 000 строк данных
нужно удалить данные вида "программ высшего образования" и последующие строки, соответствующие номеру записи из столбца А
в результате данной операции должны остаться все строки с данными, соответствующими записям 2 и 3 из фрагмента файла
Автор: Winand
Дата сообщения: 11.06.2015 20:23
Alexey87 а фильтром вы тут не справитесь?.) Хотя, честно говоря, не до конца понял, что значит "удалить данные вида ... и последующие строки".
Автор: RIP
Дата сообщения: 11.06.2015 22:29
Спецы, помогите, плиз, правильно решить следующую задачку в Microsoft Excel:

1.
сравнить таблицу "D" и таблицу "A"
одинаковые элементы таблиц удалить
в результате останутся элементы в таблице "A"
сохранить её как таблицу "E"

2.
сравнить таблицу "E" и таблицу "B"
одинаковые элементы таблиц сохранить как таблицу "F"
несовпадающие элементы таблиц сохранить как таблицу "G"

3.
сравнить таблицу "E" и таблицу "C"
несовпадающие элементы таблиц удалить
одинаковые элементы таблиц сохранить как таблицу "H"

http://rghost.ru/7FLfHMLrZ

Заранее благодарю!!!
Автор: Alexey87
Дата сообщения: 12.06.2015 10:37
Winand

Цитата:
удалить данные вида ... и последующие строки

означает, следующее:
каждая запись - 1,2,3,4 (и таких более 20000) - занимает более одной ячейки (например, 1 - с А3 по А5, 2 - с А6 по А10 и т.д.)
так вот и нужно, чтобы при удалении данных вида "программ высшего образования" и удалялись строки соответствующего диапозона
для фрагмента из файла должны остаться данные диапозона А6:АС15
Автор: DmitriC
Дата сообщения: 22.07.2015 08:28
-
Автор: DJMC
Дата сообщения: 31.07.2015 17:04
Сказали что можно это сделать через VBA поиск в столбце не по одном значению, а по группе?
к примеру есть столбец где идут цифры:
1
2
3
3
1
2
3
1
2
3
3
2
1

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

кто может взяться за это? скину тогда файл.
Автор: idiMAN
Дата сообщения: 31.07.2015 20:18
DJMC
Если формат именно такой, то используй при поиске для двух троек следующую строку
Код: 3^p3
Автор: akellaks
Дата сообщения: 09.09.2015 13:57
Добрый день помогите кто чем может
Мне нужно из сетевого сайта вытащить несколько таблиц для анализа(периодичность 2 раза в месяц)
средствами excel у меня не получилось через Данные - из интернета и дальше вбиваем сайт с которого нужно получить данные
все получает отлично, но проблема, мне нужно чтоб эти таблица автоматически обновлялись, и все бы ничего еслиб не авторизация на сайте, потому что требуется ввести логин и пароль и при обновлении талиц он не может обновится так как не сохраняет логина и пароля
как то можно сделать так чтоб логин и пароль автоматически вводились?? или чтоб их гденибудь прописать и все таблицы обновлялись


и еще такой вопрос можно ли в Microsoft outlook 2010 как то сделать так чтоб в письмо автоматически вставлялось приветствие и ФИО человека которому пишу? как это было сделано в the bat
Автор: idiMAN
Дата сообщения: 09.09.2015 14:20
akellaks
Если на данном сайте позволяет используемый тип авторизации, то логин и пароль можно прописать внутрь ссылки
Автор: akellaks
Дата сообщения: 09.09.2015 15:49
idiMAN
подскажите как это сделать?
и на всякий случай может еще какие есть способы?
Автор: idiMAN
Дата сообщения: 09.09.2015 16:04
akellaks
Покажите ссылку, по которой вы получаете данные, я гляну, можно ли внутрь ссылки вставить данные для авторизации...
Автор: akellaks
Дата сообщения: 09.09.2015 16:25
idiMAN
http://сетевая ip:8080/x4/index.php?ac=oniTei4I2Dg151u237&obj=CorpStat&natid=43 это ссылка на таблицу
на остальные страницы меняется только цифра в конце
http://сетевая ip:8080/x4/index.php здесь авторизация
Автор: idiMAN
Дата сообщения: 09.09.2015 18:45
akellaks
К сожалению, от себя я не могу подключиться по указанным ссылкам, видимо это какой-то ваш местный Омский ресурс, недоступный извне.
Автор: akellaks
Дата сообщения: 09.09.2015 19:55
idiMAN
а примерно можете сказать как прописать логин и пароль в ссылку или где почитать про это можно?
чтоб я мог сам это попробовать

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127

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


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