Выбрать дату в календареВыбрать дату в календаре

Страницы: 1 2 3 След.
VBA. Копирование диапазонов
 
Зачем вообще .Select делать?
Код
Worksheets("FROM").Range("A1:A100").Copy _       
    Destination := Worksheets("TO").Range("A1")
VBA Автофильтр по кнопке с применением на множестве листов книги
 
Добрый день, есть возможность прислать Excel файл с примером?
Удаление ячеек из столбцов b и c по условию несовпадения значений в столбцах a и b
 
Если я вас правильно понял, то так: :)
Код
Sub abc()

Dim sht As Worksheet
Dim LastRow As Long, i As Long

Set sht = ActiveWorkbook.Sheets(1)
LastRow = sht.Cells(sht.Rows.Count, "B").End(xlUp).Row

For i = 2 To LastRow
    If Cells(i, 1).Value <> Cells(i, 2).Value Then Range(Cells(i, 2), Cells(i, 3)).Delete Shift:=xlUp
Next i
End Sub
Скрывать строки без формул при печати
 
При запуске макроса спрашивает в каком диапазоне делать проверку. Если есть формула и значение выводится пустое, то скрывает строку.
Код
Sub abc()
    Set rr = Application.InputBox( _
    prompt:="Select a range on this worksheet", _
    Type:=8)
    For Each cell In rr
    cell.Select
        If cell.HasFormula = True And cell.Value = "" And cell.EntireRow.Hidden = False Then Rows(cell.Row).EntireRow.Hidden = True
    Next cell
End Sub
Локальная база данных, Выбор Front End and Back End приложений (интерфейсов)
 
Здравствуйте, хочу узнать ваше мнение, так как думаю, что на форуме есть много людей, кто с этим сталкивался.

Нужно создать базу данных и пользовательский интерфейс для компании, БД будет храниться на рабочем компьютере, с открытым доступом других пользователей локальной сети.
Где введя свой Логин, работник сможет получить всякие отчеты в самом интерфейсе или в виде excel файла.


1.Страховая компания.
2.Пользователей примерно 20-30.

3.Сейчас все хранится в Excel файлах, нету структуры данных, поэтому появилась необходимость создать Базу данных для нужд работников, а именно:
1) Одновременный ввод данных в формы многими работниками.
2) Просмотр данных в виде таблиц.
3) Легкий импорт/экспорт в Excel таблицы. (Некоторые данные получаются только в виде Excel файлов из других баз данных, появляется необходимость постоянного обновления записей базы данных на новые из Excel файла)
4) Получение отчетов о продажах и т.д.
5) Построение графиков исходя из запросов и таблиц.

4.Есть:
1) на всех компьютерах установленный MS Office 2013 (без Access)
2) на 2 компьютерах установлен MS Access 2013. (Есть возможность на остальные установить бесплатный Access Runtime 2013)
3) начатый проект в MS Access 2013, где есть логин форма и в зависимости от пользователя выбор разрешенной ему формы. (Разделено на 2 файла, Front end, Back end)

5.Знания:
1) MS Office 2013 (Access, Excel)
2) VBA
3) Основы HTML + CSS
4) Основы создания SQL запросов.

6.Объемы БД:
1) Есть отчет из интернета, где 3млн строчек и около 15 колонок. (Было 5 разделенных excel файлов, с горем пополам, закинул в один файл MS Access) в Access он весит 1гб.
2) Есть много разных отчетов, где около 150 тысяч строк и 100 колонок.
3) И всякие разные мелкие файлы.
Все это хранится в Excel файлах.

7.Сроки и ограничения:
- Нужно создать основу, где уже будут хоть какие-то отчеты в течении 15 дней.

- Без доп. вложений. (без покупки лицензий на сторонний софт)

8.Предположительные решения:
1) MS Access (Front End) + MS Access (Back End)
2) MS Access (Front End) + MS SQL Server Express 2012 (Back End) (нужно будет обучиться управлением SQL server)
3) ASP.NET + MS SQL Server Express 2012
4) Готовое бесплатное решение, предназначенное для этих целей. (типо Joomla)
5) Php + MYSQL

Что можете посоветовать в данном случае? (учитывая срок в 15 дней и время на обучение пользования решений 8.3-8.5)
SQL запрос или словари для слияния листов
 
Уже разобрался:
Код
SELECT t1.[Produkta nosaukums],t1.[Produkta kods],t1.[Polises numurs],t1.[OCTA numurs],t1.[Izdosanas datums],t1.[Sakuma datums],t1.[Beigu datums],t1.[Partrauksanas datums],t1.[Apdr# nemejs],t1.[Apdr# nemeja pers#kods],t1.[Automasinas marka],t1.[Automasinas modelis],t1.[Automasinas numurs],t1.[Auto izlaiduma datums],t1.[GWP sakotneja],t1.[GWP pec izmainam],t1.[Polises statuss], t2.[FLEET], t2.[Territory] FROM [CRRATYLV$] as t1 LEFT JOIN [FLEET$] as t2 ON t1.[Polises numurs] = t2.[Polises numurs] where t1.[Produkta kods] = 440 or t1.[Produkta kods] = 430
:D существует ли другой метод выбора полей, кроме как перечисление их названий, написанное вручную?  
SQL запрос или словари для слияния листов
 
Спасибо! С "#" все работает.

Как сделать при выгрузке SELECT,  JOIN с листом FLEET где Polises numurs = Polises numurs ?

Пока что дошел только до такого извращенства: :)
SELECT   t1.[Produkta nosaukums],t1.[Produkta kods],t1.[Polises numurs],t1.[OCTA   numurs],t1.[Izdosanas datums],t1.[Sakuma datums],t1.[Beigu   datums],t1.[Partrauksanas datums],t1.[Apdr# nemejs],t1.[Apdr# nemeja   pers#kods],t1.[Automasinas marka],t1.[Automasinas modelis],t1.[Automasinas   numurs],t1.[Auto izlaiduma datums],t1.[GWP sakotneja],t1.[GWP pec   izmainam],t1.[Polises statuss] FROM [CRRATYLV$] as t1 where t1.[Produkta   kods] = 440 or t1.[Produkta kods] = 430
Пробую в конце дописать LEFT JOIN [FLEET$] AS t2 ON t1.[Polises numurs] = t2.[Polises numurs], выдает ошибку.
Изменено: alessandro2981 - 13.07.2015 17:23:15
SQL запрос или словари для слияния листов
 
А как вы тогда проверили, работает ли у вас такой код или нет? Без подключения к ADODB.

Вот код который я использую для создания SQL подключения к книге, нашел его на этом форуме( автор: R Dmitry)
Код
Public Function ADOd(ByVal strSql$, ByVal FilePath$, ByVal OutputRange As Range, _
ByVal FieldsName As Boolean, ByVal OutputFieldsName As Boolean)
'==============================================================================

Dim sCon As String, FieldName As String
Dim rs As Object, cn  As Object
Set rs = CreateObject("ADODB.Recordset")
Set cn = CreateObject("ADODB.Connection")
If FieldsName Then FieldName = "Yes" Else FieldName = "No"
Select Case CLng(Split(Application.Version, ".")(0))
    Case Is < 12
        sCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & FilePath _
          & ";Extended Properties=""Excel 8.0;HDR=" & FieldName & ";IMEX=1"";"
    Case Is >= 12
        sCon = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & FilePath _
        & ";Extended Properties=""Excel 12.0;HDR=" & FieldName & ";IMEX=1"";"
End Select

cn.Open sCon
If Not cn.State = 1 Then Exit Function
Set rs = cn.Execute(strSql)
If Not FieldsName Then OutputFieldsName = False
 If OutputFieldsName Then
    For i = 0 To rs.Fields.Count - 1
    OutputRange.Offset(0, i) = rs.Fields(i).Name
    Next
    Set OutputRange = OutputRange.Offset(1, 0)
 End If
 DoEvents
OutputRange.CopyFromRecordset rs
rs.Close:  cn.Close
Set cn = Nothing: Set rs = Nothing
End Function
Код
Sub SQL()
Dim strSql2$
strSql2 = Sheets("MACRO").[c1]
Sheets("sqls").[a1].CurrentRegion.ClearContents
Call ADOd(strSql2, ThisWorkbook.FullName, Sheets("sqls").[a1], True, True)
Sheets("sqls").Activate
End Sub
SQL запрос или словари для слияния листов
 
TheBestOfTheBest, может у меня перед sql кодом что-то не правильно. Можете прислать ваш sql код целиком, где создается ADODB.Connection и т.д?
Изменено: alessandro2981 - 13.07.2015 16:29:41
SQL запрос или словари для слияния листов
 
Тогда вообще выдает ошибку на строке:
Set rs = cn.Execute(strSql)

Run-time error '-2147217904 (80040e10)':
No value given for one or more required parameters.
SQL запрос или словари для слияния листов
 
Тоесть после импорта файла сделать замену в коллонках точек на "_" ? и потом только работать с запросами?
SQL запрос или словари для слияния листов
 
А как быть с SQL, когда есть точки в названиях? Решил сделать тестовый запрос:
Код
select [Polises numurs], [Polises statuss], [Apdr. Nemejs] from [CRRATYLV$] where [Produkta kods] = 440

Выдает ошибку о не правильном [Apdr. Nemejs]
Удалить формулу и оставить значение
 
Код
Sub ConvertToVaules()

If ActiveSheet.AutoFilterMode = True Then
        Dim rArea As Range
            For Each rArea In Selection.SpecialCells(xlCellTypeVisible).Areas
            rArea.Value = rArea.Value
            rArea.NumberFormat = "0"
        Next             
Else
        With Selection
            .NumberFormat = "0"
            .Value = .Value
        End With
End If

End Sub

Попробуйте такой код, он также лечит после того, как сделано Paste as values, когда числовые данные всеравно остаются текстом.
Изменено: alessandro2981 - 13.07.2015 17:44:46
SQL запрос или словари для слияния листов
 
Здравствуйте, который раз уже сталкиваюсь с проблемой из-за не понимания принципа написания SQL запросов в excel или использование словарей. В интернете очень мало такой информации, особенно доступной для соображения. На Youtube вообще не нашел видео на эту тему.

Попробовал сделать через массивы, и выгрузку из них. Получилось все очень тормознуто, минут 20 обрабатывает 140 000 строк из-за огромного количества For, IF, Next.

Думаю SQL запрос как раз расщитан для такого и справится намного быстрее:

1. Лист CRRATYLV и DATA добавляются с помощью макроса из другой книги, это я сделал.
1.1. Лист CRRATYLV постоянно новый
2. В Лист FLEET из листа "DATA" вытаскиваются значения Produkta kods, Polises numurs, FLEET, Territory
3. Нужно взять все значения из листа CRRATYLV только из коллонок перечисленных в Sheets("MACRO").Range("A2:A" & Lastrow)
3.1. Выбрать только те строки, где Produkta kods = 430 и 440
4. Скопировать отсортированные значения из листа "CRRATYLV" на лист "DATA", при этом подставляя значения Коллонок (FLEET, Territory) из листа FLEET где Produkta kods = Produkta kods AND Polises numurs = Polises numurs
5. В коллонках Auto Year, Period на листе DATA будут формулы, так что с ними ничего делать не надо

Подскажите, как это можно реализовать. Заранее спасибо!
Изменено: alessandro2981 - 13.07.2015 14:00:04
Использование словарей как альтернативу Vlookup
 
Здравствуйте, снова столкнулся с похожей проблемой из-за непонимания работы словарей и массивов. Попробовал применить здесь предыдущие способы, все без результатно.

Все расписал в файле примера:

1.Лист CRRATYLV и DATA добавляются с помощью макроса из другой книги, это я сделал.
2. Нужно создать макрос, который берет все значения из листа CRRATYLV только из коллонок перечисленных в Sheets("MACRO").Range("A2:A" & Lastrow)
3. Выбирает только те строки, где Produkta kods = 430 и 440
4. Сравнивает, были ли такие уже записи на Листе DATA, сравнивает по Polises numurs
5. Если в  Sheets("MACRO").Range("B2:B" & Lastrow) стоит U, тогда обновляет эти коллонки новым значением из Листа CRRATYLV в Листе DATA
6. Если на листе DATA не было найдено строки с таким Polises numurs, то макрос добавляет эту строку
7. Коллонки FLEET, FLEET DATE на листе DATA не должны затрагиваться

Пробовал создать макрос через массивы, но дойдя до этапа копирования значений совсем запутался в нем. (Макрос есть в этом файле, но думаю там теперь уже никто ничего не поймет в нем)
Как можно это реализовать более простым способом?
Использование словарей как альтернативу Vlookup
 
Smiley, Если это один и тот же файл, то все должно быть впорядке. А как быть, если этот файл каждую неделю новый? Не думаю что сработает просто переименовать заменить файл, где стоит к нему ссылка в Access. Или этот способ работает в данном случае?
Использование словарей как альтернативу Vlookup
 
Smiley, Думал по поводу Access, было бы супер, но тут не все так просто  :)

1. На рабочих копьютерах нету Access, нужно будет каждый раз загружать с флешки Portable версию.
2. Один из файлов подгружаю с сайта, в день по 300 записей.
3. Другой файл это под заказ выбранные поля из огромной базы данных сервера, который находится в другой стране. Генерируется и приходит по э-майлу в csv формате. С ним работает весь офис для подготовки отчетов и анализа данных, продаж.
4. Данные вводятся на сервер путем ввода через консоль PuTTY, где каждое значение вбивается отдельно, никакого импорта из excel и прочего там не предусмотренно.
5. Где-то раз в неделю запрашиваем новый отчет, приходит новый csv файл.

Не думаю, что можно как-то в access сделать постоянное обновление базы данных из новых сгенерированных excel файлов.
Изменено: alessandro2981 - 30.06.2015 17:14:10
Использование словарей как альтернативу Vlookup
 
Smiley, А можно ли как-то вытягивать таким способом значения из разных книг Excel, не открывая их?
Допустим, что есть 3 рабочих книги, с такими же названиями как и у листов, только теперь они содержат по 1 листу:

Foto.xlsm - открыт и содержит макрос

Эти нет смысла открывать, так как много времени уходит на их открытие и закрытие (файлы по 60мб):
Data.xlsx
AnotherData.xlsx  
Использование словарей как альтернативу Vlookup
 
Сложность в том, что я еще пока не понимаю принцип работы запросов и словарей) Запрос может и смогу написать как-то, хоть и коряво но может и будет работать, а словари пробовал понять по статьям в интернете, вообще мимо, смысл не могу уловить, как все происходит...  :D
Использование словарей как альтернативу Vlookup
 
Как раз готовил файлик с примерами и комментариями)) Все подробно рассписал и разукрасил  :)

Лист ("Foto") собирает данные с двух других листов
Использование словарей как альтернативу Vlookup
 
Здравствуйте, пробую разобраться с созданием словарей в Excel VBA. Не могу понять их принцип.

Задача такая - Имеется таблица на листе ("Data") с огромным колличеством строк и коллонок: (сверху A,B это буква коллонки; слева номер строки)
AB…..CB
1
……
11Код продуктаНомер продуктаФотография
124001Yes
1341021No
1442013Yes
15430222Yes
1644033No
Нужно добавить в словарь только те значения, у которых в коллонке А номер = 440, и добавить на другой лист ("Foto") эти значения, где:
AB….E
1Номер продуктаФото
2
3
Через Select Case сделал, но скорость обработки не самая быстрая получилась, хочу научиться через словари это делать или через SQL запросы.
"Органайзер" для макросов
 
Здравствуйте, что можете посоветовать для хранения наработок макросов, кодов AutoIT и прочих программных кодов? Желательно чтобы было переносное решение, так как пользуюсь этим на разных компьютерах.
Может есть какой-то сайт связанный с Google аккаунтом?

Или если создавать свой блог для записей, то какой бесплатный хостинг можете посоветовать?
Вывод значений из Excel в DOS
 
Через Au3Info показывает, что окно PuTTY не содержит текста. Поэтому, наверное, единственный метод, это чтение лог файла, и то он какой-то весь кривой, так как все записано в строчку, но при обновлении окна не факт, что он создает новую строку..  
Вывод значений из Excel в DOS
 
Hugo, Спасибо за направление мыслей!

Написал код в AutoIT, использовал много раз Sleep() для ожидания обработки программы - PuTTY, но хотелось бы заменить его на какой-то более умный подход.
В PuTTy настроил так, чтобы создавался putty.txt файл, куда записывается лог обработки.

Хотелось бы сделать так, чтобы Autoit проверял putty.txt файл на то, обновился ли он и добавилась ли туда такая-то строка.

Как это можно реализовать в AutoIT по 2 принципам? 1) подсчет строк Начала(RowE) и Конца(LastRow) этого этапа 2) по содержанию значения в строках (LastRow - RowE)
Вывод значений из Excel в DOS
 
Есть база данных сделанная в DOS системе, сервера находятся в другой стране. Поэтому просто импортировать данные из Excel нет возможности.
Предположим, у нас есть такая таблица, откуда макрос при вводе должен брать по 1 символу и вводить как буд-то вручную с клавиатуры, так как DOS не поддерживает copy/paste.
ProductPolice NRНужно поставить
4409005587T
4409005642T
4409005790T
4409005817T
Далее действия такие:
Уже открыта DOS система.
Макрос вводит в нее 440. То есть сначала 4, потом 4, потом 0. Нажимает TAB. Далее пишет так же 9005587. Нажимает ENTER, HOME, "g", ENTER, 7 раз стрелку вниз, "z", ENTER, 1 раз стрелку вниз, "999",  ENTER, "F9", "F8", Взял из 3 коллонки букву T и написал в DOS, ENTER, "F9", "F9" (...Небольшая задержка...), "F2", HOME, "x", ENTER, "F9", HOME, "x", ENTER.
И теперь заного все то же самое. И так для 2000 записей. Нужно чтобы учитывал небольшие задержки системы.
Вывод значений из Excel в DOS
 
Здравствуйте, хочу узнать, можно ли как-то записать макрос, который будет управлять DOS системой, в которой управление ведется засчет клавиатуры (Всякие нажатия, например Tab, стрелки, буквы). И сам вводить значения из таблицы excel. А то надо ввести 2000 значений, руками это делать проблематично. А по сути дела происходят одни и те же комманды.
Использование переменной для выбора диапазона
 
Сделал то, что хотел  :)
Теперь чтобы добавить нужные коллонки нужно всего лишь добавить Названия коллонок в массив. Спасибо всем за помощь!
Код
Dim WB1 As Workbook, WB2 As Workbook
Set WB1 = ActiveWorkbook

Sheets("CRRATYLV").AutoFilterMode = False

    WB1.Sheets("CRRATYLV").Select
    Set WB2 = Workbooks.Add
'    Set WB2 = ActiveWorkbook
    Worksheets(1).Name = "DATA"
    WB1.Activate
'Dim LastrowCR As Long
'LastrowCR = WB1.Worksheets("CRRATYLV").Range("A" & Rows.Count).End(xlUp).Row
Dim Nname() As Variant
Dim xy As Long
Dim yx As Integer
Nname = Array("Produkta nosaukums", "Polišu izdevēji")
yx = UBound(Nname, 1)
For xy = 0 To yx

'    Produkta nosaukums
Dim PNf As Range, PrN As Long, Fcoll As String
    With Worksheets("CRRATYLV").Rows("1:1")
        Set PNf = .Find(What:=Nname(xy), LookAt:=xlWhole, MatchCase:=False, SearchFormat:=False)
            If Not PNf Is Nothing Then
            PrN = PNf.Column
            End If
    End With
    Set PNf = Nothing
    lngI = Cells(Rows.Count, PrN).End(xlUp).Row
    Range(Cells(1, PrN), Cells(lngI, PrN)).Copy
    WB2.Worksheets("DATA").Cells(1, xy + 1).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
Application.CutCopyMode = False
Next xy
End
Использование переменной для выбора диапазона
 
Пытливый, Спасибо за помощь! Все работает. А то часто сталкиваюсь с этой проблемой, когда указываю Range через переменные. Тогда чтобы добавить еще коллонки, просто скопировать и вставить код и изменить what find?

А можно ли как-то вынести в массив find what и сделать конструкцию для этого через For? для того, чтобы код не выглядил громозким
Изменено: alessandro2981 - 16.06.2015 09:04:45
Использование переменной для выбора диапазона
 
Мне всеравно надо делать сводную таблицу в новом файле, так как нет смысла держать все коллонки. Там около 100 коллонок, нужны только 10 из них. При 100 коллонках вес файла будет в районе 100мб, при 10 будет значительно меньше.
Использование переменной для выбора диапазона
 
Есть файл, в котором очень много коллонок, нужно сделать Pivot Table, но все коллонки не нужны, нужны только некоторые. Поэтому, чтобы конечный файл не был огромным и Pivot не зависал, нужные коллонки выгружаю в отдельную Книгу, с которой позже работаю.
Попробовал сделать предыдущий пример Range(columns(Prn)).Copy , ошибка осталась та же.

Сделал пример файла.
Страницы: 1 2 3 След.
Наверх