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

Страницы: 1
Оптимизация программного кода: Connection, RecordSet, Оптимальное использование программного кода при прописывании Connection, RecordSet
 
Добрый день, уважаемые.

"Заморочился" написать максимально удобный+быстрый код в связи с чем возникли следующие вопросы:

- Имеется большое кол-во подключений (ConnectionString)  и каждый раз в каждой процедуре прописываю:

Код
1. Dim cn as ADODB.Connection
2. Dim rs as ADODB.RecordSet

3. cn.Open ConnectionString "..."
4. cn.Close
5. Set cn=Nothing

Есть идея строки 1-3 вынести в глобальные Const ...
насколько это корректно? (и стабильно работает)
как правильно прописывать Connection: создавать отдельную процедуру где все прописать? или использовать глобальные переменные? или локально увеличивая код прописывать одно и тоже(строки 1-5) в каждой процедуре?

Заранее спасибо!
[ Закрыто] Оптимизация кода
 
Добрый день, уважаемые.

"Заморочился" написать максимально удобный+быстрый код в связи с чем возникли следующие вопросы:

- Имеется большое кол-во подключений (ConnectionString)  и каждый раз в каждой процедуре прописываю:
строка 1: Dim cn as ADODB.Connection
строка 2: Dim rs as ADODB.RecordSet

строка 3: cn.Open ConnectionString "..."
строка 4: cn.Close
строка 5: Set cn=Nothing

Есть идея строки 1-3 вынести в глобальные Const ...
насколько это корректно? (и стабильно работает)
как правильно прописывать Connection: создавать отдельную процедуру где все прописать? или использовать глобальные переменные? или локально увеличивая код прописывать одно и тоже(строки 1-5) в каждой процедуре?
Архив и последний файл
 
Добрый день, уважаемые!

Хотел бы реализовать следующую операцию.
Дано: есть архив rar с файлами txt
Необходимо: скопировать последний файл txt
Вопрос: есть ли какая-нибудь функция которая  могла это сделать? возможно ли это сделать без разархивации всего архива? (архив большой ..)

например есть функция shell с помощью которой я разархивирую весь архив,
VBA Поле со списком в ячейке
 
Доброе утро, уважаемые форумчане!

Решил создать на Листе Excel следующее: при вводе значений в А:А в столбце С:С создается автоматически выпадающий список, реализовал следующим способом:
но понимаю что возможно не учел всех будущих ошибок связанных с моим кодом.

Просьба критически посмотреть и по возможности предложить лучшее решение?

Спасибо.

Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim str As Integer
    Dim rng As Range
    Set rng = Range("A1:A3000")
    
    str = ActiveCell.Row
    If Not (Intersect(Target, rng) Is Nothing) And str <> 0 Then
        On Error GoTo error_handler
        ThisWorkbook.Worksheets("Лист1").Cells(str, 3).Validation.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:=str_Priority
    End If

    error_handler:
End Sub
Изменено: Garrik - 13.08.2015 09:53:03
Цикл по Frame
 
Добрый день!

Подскажите советом: имеется форма на которой много фреймов (около  8)  на каждом из которых много OptionButton, необходимо пройтись по каждому фрейму и проверить OptionButton на True, другими словами проверить заполняемость фреймов и в случае если пользователь не заполнил один из фреймов вывести сообщение ...

написал следующий код, но почему то выдает ошибку ...  
Код
Dim ctrl as Control 
Dim ctrl2 as Control 
 
For Each ctrl In UserForm.Controls
  If TypeOf ctrl Is MSForms.Frame Then
    For Each ctrl2 In ctrl.Controls
      If TypeOf ctrl Is OptionButton And ctrl.Value = True Then cn = cn + 1
    Next
  End If
Next
 
Скрыть пустое окно Excel
 
Добрый день, уважаемые!
Вопросик такой:
Имеется файл Excel "MainForm.xlsx" , при его открытии появляется Форма и скрывается Excel:
Код
Form1.Hide=True
Application.Visible=False 
Далее после нажатия на форме кнопки, пишу следующее: скрываю форму, делаю видимым Excel,закрываю только файл MainForm.xlsx
Код
Form1.Hide=False
Application.Visible=True
Application.DisplayAlerts=False
Windows("MainForm.xlsx").Close
Application.DisplayAlerts=True
Когда у пользователя открыт Excel все работает нормально, но когда у пользователя Excel закрыт, то в конце после скрытия формы появляется пустое окно Excel, никак не могу придумать как мне его убрать ...
Изменено: Garrik - 20.05.2014 19:04:43
Форма пользователя для ввода данных, ошибка
 
Добрый вечер, уважаемые!

Задачка следующая: Имеется база данных Access и файл Excel. В файле Excel имеется форма, которую заполняют пользователи, то есть при нажатии на файл Excel появляется форма которую пользователи заполняют и при нажатии на кнопку эти данные передаются в Access.

Все работает корректно, кроме случае когда два и более пользователей одновременно нажимают на кнопку, появляется ошибка "subscript out of range"
Код программы следующий:

Код
Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=путь к БД"
cn.Open
Код
With rs
  .CursorType = adOpenStatic
  .LockType = adLockOptimistic
  .Open "SELECT FIO, AGE FROM Table", cn
  .AddNew
  .Fields!AGE.Value = ComboBox1.Value
  .Fields!FIO.Value = ComboBox2.Value
  .Update
  .Close
End With
cn.Close
Код
Set rs = Nothing
Set cn = Nothing
Код
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
Application.EnableEvents = True 
Vba открытие файла Excel
 
Добрый день!
Имеются 2 файла Excel: необходимо перенести данные из одного в другой с сохранением.

Написал следующий код, но он очень долго выполняется ...
- можно ли как-нибудь ускорить макрос? оптимизировать ...
- может применять GetObject, а не .Open?
Код
  Dim wrkBook As Workbook
'Открываю File2
  Set wrkBook = Workbooks.Open("2.xlsm")

'Ищу последнюю строку в File2
  File2_lastrow = wrkBook.Sheets("Лист1").Cells(Rows.Count, 1).End(xlUp).Row

'Копирую данные из File1 в File2
  .Range("A" & File1_lastrow).Resize(1, 24).Copy wrkBook.Sheets("Лист1").Cells(File2_lastrow , 1)

'Сохраняю и закрываю
  wrkBook.Save
  wrkBook.Close
  Set wrkBook = Nothing
 
Ошибка c Recordset и AddNew
 
Добрый вечер, не получается решить проблему...подмогите ...

Код
Dim Conn As New ADODB.Connection
Dim rs As New ADODB.Recordset
    rs.CursorType = adOpenForwardOnly
    rs.LockType = adLockPessimistic
 

Conn.Open ConnectionString:="Provider=Microsoft.ACE.OLEDB.12.0;" & _
    "Data Source=..\BD.accdb;"

rs.Open "SELECT * FROM Flew", Conn
With rs
    .AddNew


Ошибка на строке .AddNew "3709 Текущий объект Recordset не поддерживает обновление"
вроде блокировку и курсоры задаю правильно, единственно что есть подозрения насчет библиотек может что-то не подключил ..
Изменено: Garrik - 05.08.2013 19:39:07
Ошибка при запросе из Excel в Access (работа с датами)
 
Добрый день!
Подскажите пожалуйста как мне исправить ошибку: ситуация следующая..
Имеется Excel.Лист1 и ячейки N1 и N2 в которых пользователь вносит дату начала и дату окончания(период), после чего идет обращение к базе Access:


Код
 

DateX1 = Format(Worksheets("Лист1" )  .Range("N1" )  , "mm/dd/yyyy" )  
DateX2 = Format(Worksheets("Лист2" )  .Range("N2" )  , "mm/dd/yyyy" )  

Conn.Open ConnectionString:="Provider=Microsoft.ACE.OLEDB.12.0;" & _
  "Data Source=...BD.accdb;"

rs.Open Source:="SELECT Date1,Day_of_week FROM Flow WHERE Date1 =  '" & "#" & DateX1 & "#" & "' ", ActiveConnection:=Conn, _
CursorType:=adOpenDynamic, LockType:=adLockOptimistic


вроде бы привожу даты в формат понятного для Access #mm/dd/yyyy# ....но получаю ошибку ...

ошибка "Automation error"
Изменено: Garrik - 05.08.2013 12:31:32
[ Закрыто] Сводная табл
 
Добрый день!
Подскажите пож-ста: у меня есть сводная, одно поле в которой "дата", мне нужно выводить данные за последние 30 дней,возможно ли это?
Копирование цветового диапазона!
 
Добрый день!

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

sheets("Лист1").Cells(1,1).resize(1,5)=sheets("Лист2").Cells(2,1).resize(1,5).value

значения копируется, но при этом мне хотелось бы чтобы я копировал не только значения, но и цвета ячеек.. вот тут и проблема ...пытаюсь применить Interior.ColorIndex что-то не получается...

Заранее спасибо!
Подсчет корректности звонка
 
Добрый день уважаемые!

Задачка следующая:
Нам дано разрешенное время звонка: с 9:00 по 22:00, мы должны
   1.выделить тех абонентов которые звонили в некорректное время
   2.длительность разгововра.

Пример: корректное время звонка с х = 9:00 по у = 22:00

Вариант №1:
Например абонент звонил в z = 7:00, тогда логика следующая:
если z < x и z < y , то rez = x - z  

Вариант №2:
Например абонент звонил в z = 23:00, тогда логика следующая:
если z > x и z > y , то rez = z - y

Вариант №3: вот тут проблема и требуется помощь ...
Например абонент звонил в z = 1:00 (ночи), вот тут правильный ответ rez=3 Часа, но как это зашить в программу(логику) никак не могу додуматься ...
Решение задачи с помощью Dictionary
 
Добрый день!

Задача следующая:
Имеется два листа в Excel, на Листе 1 столбец с телефонами(4954907654,...), на Листе 2 Коды городов и названия( Москва 495, Питер 812)

Задачу решил с помощью словарей ...

Каждому номеру на первом листе нужно указать город:

   
Код
    Dim a(), b(), i&
    Dim kr As Integer
 
    With CreateObject("Scripting.Dictionary")
       'заполняем словарь
        a = Sheets(2).[a1].CurrentRegion.Value
        For i = 1 To UBound(a): .Item(a(i, 2)) = i: Next
        
        b = Sheets(1).[a1].CurrentRegion.Value
        For i = 2 To UBound(b)
         kr = Mid(b(i, 1), 2, 3)
         If .exists(kr) Then Worksheets("Данные").Cells(i, 2) = Worksheets("коды").Cells(.Item(kr), 1)
          
        Next
    End With


Но тут я застопорился вот над каким моментом: у меня все работает если только код города трехзначный!, но часто бывает что код города может иметь 4-5 знаков ... как мне в данном случае быть ... каким то образом я должен искать подстроку в строке ... подскажите ...
Работа с Collection, с помощью словарей или коллекции посчитать сумму и количество
 
Добрый день!

Подскажите новичку с Collection: имеется 2 листа в Excel со следующими данными..

1 лист 1 стобец:

овца
баран
лошадь
свинья

2 лист 1 и 2 столбец:

овца 200
лошадь 100
баран 300
свинья 50
свинья 50
лошадь 100
свинья 50

Необходимо с помощью словарей или коллекции посчитать сумму и количество по каждому животному:

овца 200 1
баран 300 1
лошадь 200 2
свинья 150 3

Ситуация такая что данных по второму листу больше 60 000тыс и как я прочитал наилучший способ перебора это коллекции или словари ..
оптимизация кода(поиск и копирование по столбцам)
 
Доброго времени суток!  
 
Задача такая, дан excel-кий файл, в котором около  1 млн строк и нужно подтянуть данные с другой вкладки, я набросал такой макрос:  
 
For i = 1 To ThisWorkbook.Worksheets("Лист1").Cells(Rows.Count, "A").End(xlUp).Row  
For j = 1 To ThisWorkbook.Worksheets("Лист1").Cells(Rows.Count, "C").End(xlUp).Row  
 
If ThisWorkbook.Worksheets("Лист1").Cells(i, "A") = ThisWorkbook.Worksheets("Лист1").Cells(j, "C") Then  
 ThisWorkbook.Worksheets("Лист1").Cells(i, "B") = ThisWorkbook.Worksheets("Лист1").Cells(j, "C")  
   
Next  
Next    
 
Все работает, но медленно, можно ли как-нибудь ускорить? чем воспользоваться? чем можно заменить цикл? подскажите!  
 
Заранее благодарен!
управление кнопками
 
Доброго времени суток!  
 
Задача:  На листе имеется большое количество кнопок, хотелось бы с помощью VBA запрограммировать следующую фразу:  
                 "Если нажали commandbutton1 то"  
я понимаю что это блок If, но не знаю как определить нажатую кнопку?
узнать номер текущей строки
 
Здравствуйте, изложу полностью задачу:  
 
у меня есть список в ячейке (варианты:вася, петя, вова)  
мне нужно написать макрос который при выборе имени "вася" автоматически ставил в столбце (например С) цифру 5, при выборе пети  - 10 и так далее, где цифры 5,10 .. - это константы которые я задаю в макросе  
 
Я пытался написать вот что получилось, но работает неправильно,потому что зайдя в цикл программа мне везде ставит 8  
 
Dim rngRange As Range  
Dim MyCell As Range  
Dim srt As Integer  
Set rngRange = Range("A1:A100")  
 
For Each MyCell In rngRange  
If MyCell.Value Like "*вася*" Then Worksheets("Лист1").Cells(Selection.Row, 2) = 5  
Elseif MyCell.Value Like "*вася*" Then Worksheets("Лист1").Cells(Selection.Row, 2) = 10    
Next  
 
задача не сложная, но у меня вызвало проблему, по возможности помогите
как работать(обращаться) с большим количеством Combobox-ов
 
Здравствуйте    
 
Такая проблемка: У меня на листе1 excel-я множество элементов ActiveX - combobox-ов и я к сожалению никак не соображу как бы мне к ним обращаться(обращаться к каждому combobox-у считаю неразумным, поэтому может есть еще какой-нибудь способ):    
 
Поподробней:  каждый из combobox-ов имеет одинаковые значения(поля,например: золото,серебро,медь) и я хочу подсчитать сколько раз встречается каждое значение(например золото было выбрано 16 раз, то есть в 16 combobox-сах и т.д.).  
 
Если можете помогите. Заранее большое спасибо.
Страницы: 1
Наверх