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

» Excel VBA (часть 3)

Автор: PrWork1
Дата сообщения: 06.05.2014 22:31
maa78s
Можно обновляемый лист не редактировать, а добавить новый лист и на нем формулы, связанные с листом данных.
Автор: Alex_Piggy
Дата сообщения: 06.05.2014 22:44
maa78s
Понял. 1.- заполнять макросом столбец формул

Код:
Sub FillFormulas()
Range("A1:A500").Value2 = "=ВПР(Result_List!A1,Data_List!$A$1:$B$500,2)"
End Sub
Автор: maa78s
Дата сообщения: 06.05.2014 23:03
т.е. получается можно просто заполнить макросом формулу в нужный столбец каждый раз после новой загрузки данных...
Alex_Piggy, спасибо. Так даже лучше
Автор: SkyRE
Дата сообщения: 06.05.2014 23:48
miwa 23:21 06-05-2014
Цитата:
Но это, имхо, уже перебор. При таких требованиях, кмк, надо переходить на аксес.
Можно попробовать и написать супер макрос на кнопку, в такой задаче не обязателен Access.
Автор: miwa
Дата сообщения: 07.05.2014 00:45
SkyRE
И что будет делать супер-макрос? Восстанавливать удаленные файлы?

Если стоит задача просто собирать с кучи файлов данные для дальнейшей обработки - ексель справляется на раз. А если мы начинаем рассматривать варианты когда файлы удаляются, данные изчезают и прочие внешние факторы, то такие внешние факторы лучше делать в инструменте, изначально для этого предназначенном. Настольная субд получше справится с контролями доступа и связыванием разнородных данных, чем табличный редактор.

Если контроль доступа не нужен и вариант "ничего не делать при исчезновении вшнешных источников данных" подходит - тогда дальше используем ексель.

Как-то так.
Автор: SkyRE
Дата сообщения: 07.05.2014 14:15
miwa 01:45 07-05-2014
Цитата:
И что будет делать супер-макрос? Восстанавливать удаленные файлы?
Нажал кнопку, выдало диалог выбора директории, выбрал испытуемого, макрос пропарсил тест*.xls и занёс в таблицу результаты.

Добавлено:
Как-то так.
Автор: miwa
Дата сообщения: 07.05.2014 14:24
SkyRE
Нафига что-то парсить, если в формулах уже прописано что где брать?
Автор: SkyRE
Дата сообщения: 07.05.2014 18:15
miwa 15:24 07-05-2014
Цитата:
Нафига что-то парсить, если в формулах уже прописано что где брать?
Что бы не было потом:Fsp050 20:59 06-05-2014
Цитата:
А если потом этот тест1 будет удалён? его значения с главного экселя не пропадут? Можно их закреплять вне зависимости от того есть ли исходный фаил или нет.
Автор: miwa
Дата сообщения: 07.05.2014 22:06
SkyRE
А, тоесть имеется в виду вместо формул сразу значения из указанного файла макросом дергать?

Что-то не нравится мне такое решение. Тоесть, оно будет вполне себе рабочее, но как-то "не по екселевски". Тем более, что таким образом мы просто продублируем стандартный функционал.

Тем не менее, у Fsp050 есть уже два решения его проблемы; ему выбирать.
Автор: andrewkard1980
Дата сообщения: 14.05.2014 22:57
Добрый день. При переборе большого массива данных макросом, книга подвисает, можно как то остановить его работу не закрывая книгу? Есть вариант установить проверку на наличие файла в папке, если его нет - стоп. Другие решения есть? Спасибо!
Автор: AndVGri
Дата сообщения: 15.05.2014 02:38
Доброе время суток andrewkard1980
Вставьте DoEvents где-нибудь в цикле обработки, тогда можно будет прервать работу макроса, используя Ctrl+Break
Автор: andrewkard1980
Дата сообщения: 15.05.2014 21:31
AndVGri
Например так?

Код:
For i=1 to 100000
if i=1 then
DoEvents
end if
Next i
Автор: PrWork1
Дата сообщения: 15.05.2014 23:23
andrewkard1980
Нет, так:

For i=1 to 100000
....
DoEvents

Next i
Автор: JekG
Дата сообщения: 15.05.2014 23:57
Подскажите как реализовать задачку - есть ведомость в ней столбики Фамилия и Имя (причем один и тот же человек может повторяться несколько раз подряд) Нужно пробежаться по столбцам отловить возможных однофамильцев. Если они есть - подсветить их и дать меседжбокс "Найдены однофамильцы" Наличие полных тезок исключим.
Автор: Vitus_Bering
Дата сообщения: 16.05.2014 07:29
JekG
.http://www.planetaexcel.ru/techniques/14/69/
Автор: JekG
Дата сообщения: 16.05.2014 09:16
Vitus_Bering
А если макросом?
Автор: ZlydenGL
Дата сообщения: 16.05.2014 09:20
JekG, автозапись предлагает следующий код:

Код: Selection.FormatConditions.AddUniqueValues
Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
Selection.FormatConditions(1).DupeUnique = xlDuplicate
With Selection.FormatConditions(1).Font
.Color = -16383844
.TintAndShade = 0
End With
With Selection.FormatConditions(1).Interior
.PatternColorIndex = xlAutomatic
.Color = 13551615
.TintAndShade = 0
End With
Selection.FormatConditions(1).StopIfTrue = False
Автор: One_and_only
Дата сообщения: 16.05.2014 17:46
Здравствуйте!
Нужно удалить дубли в списке. Но есть нюанс.
Если в одной ячейке указаны данные "Коля", в другой "Коля 1",
то 1-ую (или 2-ю) ячейку нужно удалить. Лучше удалить сразу всю строчку с подобным дублем.

Очень не хочется удалять вручную...
Автор: ZlydenGL
Дата сообщения: 16.05.2014 18:52

Код: Sub DelAllClones(R as Range)
Dim C, F as Range
For Each C in R.Cells
Set F = R.Find(C, lookat:=xlpart)
While Not F = Nothing
F.ClearContents
Set F = R.FindNext
Wend
Next C
End Sub
Автор: Ringo500
Дата сообщения: 22.05.2014 12:58
[more] [more] Как нарисовать на форме линию по координатам для офиса 2010?

Миллионом постов выше подобный вопрос обсуждался. был найден следующий код:

Цитата:
Код:
Option Explicit
Private Declare Function FindWindow Lib
"user32.dll" Alias "FindWindowA" _
(ByVal lpClassName As String, ByVal
lpWindowName As String) As Long
Private Declare Function dwMoveTo Lib "gdi32"
Alias "MoveToEx" _
(ByVal hdc As Long, ByVal x As Long, ByVal y
As Long, _
ByVal lpPoint As Long) As Long
Private Declare Function dwLineTo Lib "gdi32"
Alias "LineTo" _
(ByVal hdc As Long, ByVal x As Integer, ByVal
y As Integer) As Long
Private Declare Function dwGetDC Lib "user32"
Alias "GetDC" _
(ByVal hWnd As Long) As Long
Private Function Draw()
Dim hForm As Long, hdc As Long
hForm = FindWindow("ThunderDFrame",
Me.Caption)
hdc = dwGetDC(hForm)
Call dwMoveTo(hdc, 10, 40, 0)
Call dwLineTo(hdc, 150, 100)
End Function
Private Sub UserForm_Click()
Draw
End Sub
Программка рисует на форме VBA Excel линию
с координатами точек (10, 40) и (150, 100)
после щелчка мыши по панели формы.


проблема в том, что это для версий 2003 и 2007, а в 2010 программа ругается на библиотеки. что изменить в коде, подскажите?

[/more] [/more]
Автор: KF121
Дата сообщения: 22.05.2014 13:27
Ringo500
Ошибку какую выдает? Что именно не работает? Справку пробовали читать?
дай угадаю, офис x64 стоит. правильно?
Автор: Ringo500
Дата сообщения: 22.05.2014 14:29
ругается на "user32.dll"
и да - 64
Автор: PrWork1
Дата сообщения: 22.05.2014 14:39

Цитата:
и да - 64

Сам макрософт не рекомендует использовать 64х битный офис, сразу переставляйте на 32х битный и проверяйте, будут ли проблемы.
Автор: Ringo500
Дата сообщения: 22.05.2014 14:44
офис рабочий, не я решаю. по другому никак?
Автор: PrWork1
Дата сообщения: 22.05.2014 14:48

Цитата:
по другому никак

Почему никак, можно.
Если офис не переставить, нужно пытаться правильно задекларировать функцию FindWindow для Вашей версии офиса
Автор: KF121
Дата сообщения: 22.05.2014 15:15
я же и говорю, справку читали, не? Public Declare PtrSafe ...
Автор: Ringo500
Дата сообщения: 23.05.2014 04:39

Цитата:
нужно пытаться
правильно задекларировать функцию
FindWindow для Вашей версии офиса

мне бы по простецки, какой код набрать, чтобы заработало.
слова типа Public Declare PtrSafe меня пугают, я даже не знаю где это смотреть.
Офис 2010, видна 7, 64 разряда.
как я понимаю в предыдущем варианте была ссылка на "user32.dll", а в семерке этого файла нет. что взамен него прописать?
Автор: Ringo500
Дата сообщения: 26.05.2014 05:45
излазил справочную офиса 2010 - нет там ничего, есть только упоминание, что иные VBA не пойдут и их придется корректировать вручную, а в чём смысл корректировки - нет.
как все-таки надо "правильно задекларировать функцию FindWindow " для офиса 2010 на 64 разряда никто не в курсе?
Автор: AndVGri
Дата сообщения: 26.05.2014 07:26
Ringo500
Скачайте, да используйте.
Удачи.
Автор: levn
Дата сообщения: 26.05.2014 10:10
Доброго времени суток, уважаемые коллеги программисты.
Подскажите, плиз, как сделать выполнение части макроса по условию?
Т.е. при запуске макроса пользователю выскакивает сообщение типа "Сделать подробную проверку? Yes/No". При нажатии "Yes" внутри макроса запускается цикл в дополнительной проверке.
У меня в программе это представлено как проверка включая группу Administrator:


Код: 'Administrator output file'
SysFile = ThisWorkbook.Path & "\Administrator_grants.sql"
...
'Administrator File descriptor
Adm_fnum = FreeFile()
Open SysFile For Output As Adm_fnum
...
'Administrator group (100)
If (4) < 16384 Then
If sht.Columns(4).Cells(1) <> "" Then
Print #Adm_fnum, "-- " & sht.Columns(4).Cells(1) & " grants section"
End If
End If

If (3 + grantsNumberOT) <= 16384 Then
For i = 4 To maxSupportOT
If sht.Columns(3 + grantsNumberOT).Cells(i) <> "" Then
Print #Adm_fnum, sht.Columns(3 + grantsNumberOT).Cells(i)
Print #Adm_fnum, ""
End If
Next i
End If
...
Close #Adm_fnum

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127

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


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