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

Страницы: 1
Производительность при соединении с БД через ADODB
 
Доброго времени суток!
Раньше с базами данных никогда не работал, вообще. С VBA то только познакомился.
Так вот вопрос: при каких условиях будет выше оптимизация - открыть соединение один раз при запуске книги или же открывать его каждый раз при старте определённой процедуры. Слабо пока представляю эти процессы. Просто не хотелось бы потом тратить уйму времени на переписывание кода. У меня и так старые функции с новыми уже контрастируют, по качеству написания. Не хотелось бы и тут сделать себе сделать дополнительные проблемы.

Заранее благодарю!
Создать переменные и объекты, которые хранятся вне процедуры
 
Цитата
Sanja написал:  ЧТО ТАКОЕ ПЕРЕМЕННАЯ И КАК ПРАВИЛЬНО ЕЁ ОБЪЯВИТЬ?
Прочитал внимательнее, понял, что Static хранит переменные только в пределах одной процедуры. Спасибо =)
На самом деле всё теперь понял, спасибо. Самое забавное, что эту статью я и читал, да только важные условия все упустил...  
Изменено: Lex4990 - 05.09.2017 23:24:47
Создать переменные и объекты, которые хранятся вне процедуры
 
Вот как. А я это в макросе делал, запускал его на старте и ждал чуда... Только как понять "общий модуль"? Они действуют только в пределах одного модуля?
Создать переменные и объекты, которые хранятся вне процедуры
 
Добрый вечер!
Возможно ли сделать, чтобы переменные и объекты хранились всё время от открытия и до закрытия рабочей книги Excel? До сих пор этот вопрос не стоял остро, и я прятал данные на листах, между процедурами. Сейчас уже очень бы пригодилось хранить объекты и массивы на протяжении всей работы книги. Думал, что это можно сделать через уровни доступа, private/static. Но, может я делаю не так - по завершению процедуры переменная удаляется из памяти. Прошу подсказать =) Спасибо.  
Вопросы по пользовательским классам
 
Начал изучать пользовательские классы. Но есть ряд теоретических вопросов.
Я понял как создать простой класс с рядом свойств и методов. Во всех источниках пишут, что можно создать классы идентичные встроенным классам по возможности.
Суть просто. Из класса я хочу сделать объект ячейки, среди свойств которого будут номер и список товаров. И вот здесь у меня вопрос. Допустим свойство, которое будет хранить номер прописать не сложно. А вот перечень товаров... Допустим что, класс ячейки будет называться Number, а её номер будет хранится в Number.ID
Список товаров должен быть в Number.SKU. Но ведь товаров много. И должно быть что-то вроде Number.SKU(1) = 5478375, Number.SKU(2) = 6757596(по примеру Sheets(1).Cells) и т.д.
И вот не совсем улавливаю как это всё решить.
Тут же вопрос, можно ли объекты класса(или переменны) держать в течении всего времени, пока открыта книга. То есть при запуске я создал объекты ячеек, забрав информацию из бд(файла), и далее использовать данные из этих объектов во других процедурах, не выгружая их до закрытия книги. Я даже не понял, как это с переменными сделать.
Прошу прощения, если сильно нагромаждено. Сейчас у меня ячейки с товарами хранятся тупо в таблице. И вот начал читать про классы и обнаружил, что через них реализовать необходимый функционал будет куда проще, и быстрее.
Если есть обучающие материалы/статьи на эту тему - поделитесь ссылкой. Теорию без примеров тяжело понимать. А примеры, что я нахожу описывают простенькие классы с парой свойств и небольшим методом, который что-нибудь вычитает.
Заранее благодарю за помощь!
Не работает unprotect
 
Цитата
Sanja написал:
Может Вам нужен
ActiveSheet.Unprotect (Password = sss)
Точно! Вот я идиот. И при этом когда в ручную проверял, нажимал же кнопку "снять защиту с листа", а внимания не обращал.

Правда теперь выдаёт ошибку Object Required....
P.S. с ошибкой разобрался! Не правильно функцию написал. Всем огромное спасибо за помощь! =)
Репутацию тут нельзя менять?
Изменено: Lex4990 - 18.08.2017 23:08:44
Не работает unprotect
 
Цитата
Юрий М написал:
А я вот на первую строчку даже внимания не обратил... И не нужно огрызаться. Мой вариант работает?
Прошу прощения.
Нет. И что более странно, попробовал прямо прописать пароль без переменной. Тоже не работает. Теперь я совсем в тупике.  
Не работает unprotect
 
Цитата
Юрий М написал:
Переменная? Мы об этом должны были догадаться?
Именно догадаться. Прочитав первую строку кода, где она назначается.
P.S. так тоже не работает. Да и на сколько знаю, не имеет значения. Я уже по всякому пробовал - от того и недоумеваю.  
Изменено: Lex4990 - 18.08.2017 22:54:43
Не работает unprotect
 
Но sss - это переменная, в которой хранится пароль. Просто книг много и пароли разные. Назначался пароль тоже через переменную, всё назначилось.
Может быть это имеет значение. Макрос работает в Excel 2010, а формат книги, с которой снимается пароль - 2003.  
Изменено: Lex4990 - 18.08.2017 22:50:40
Не работает unprotect
 
Добрый вечер! Уже с ума схожу, но не могу понять, почему не работает команда Unprotect
Код
sss = Left(Dir(file, vbNormal), 6)
    ActiveWorkbook.Unprotect (Password = sss)
    Range("F11").Select
    ActiveSheet.Paste
    ActiveWorkbook.Protect Password = (Left(Dir(file, vbNormal), 6)), UserInterfaceOnly = True
    ActiveWorkbook.Save
    ActiveWorkbook.Close
Всё предельно просто, казалось бы. Но пароль не снимается и соответственно вставка не происходит. Пароль точно верный, ибо если тоже самое ввести вручную, то всё работает.
VBA. Открыть лист по текущей дате
 
Код
Sub OpenF()
Dim a As String 'путь к родительской папке
Dim b As String 'путь к папке, где находится файл
Dim c As String 'имя файла, который нужно открыть
Dim dt as string
 
a = Sheets("Адрес").Range("B1") 'указываем значение переменной а, которое является путем к родительской папке
b = Sheets("Адрес").Range("B2") 'указываем значение переменной b, которое является путем к папке, где находится файл
c = Sheets("Адрес").Range("B3") 'указываем значение переменной c, которое является названием файла

dt = format(Now(), "mmm")
dt = switch( dt = "Январь", "ЯНВ", dt = "Февраль", "ФЕВ" и т.п. и т.д.)
 
Application.Workbooks.Open a & b & c 'открываем файл
Sheets(dt).Activate
 
End Sub
Изменено: Lex4990 - 18.08.2017 15:44:11
VBA. Открыть лист по текущей дате
 
Автор просил открывать лист по дате, а не проверять есть ли он.
Но пусть я и не делал этого, в теории можно перебирать коллекцию листов циклом и проверять есть ли лист с искомым названием.  
VBA. Открыть лист по текущей дате
 
Как вариант
Код
dim dt as string
dt = format(Now(), "mmm")

dt = switch( dt = "Январь", "ЯНВ", dt = "Февраль", "ФЕВ" и т.п. и т.д.)
Could not set .SourceRow property
 
Большое спасибо! Буду пробовать. Конечно хотелось бы обойтись без создания листа. Ибо в случае ошибки - этот лист не удаляется и место расположения файлов становится видно пользователю, что не нужно. Они и так не особо спрятаны. Ещё раз спасибо!
Could not set .SourceRow property
 
Совершенно случайным образом возникает ошибка Could not set .SourceRow property Недостаточно памяти.
У меня есть пользовательская форма, которая при инициализации собирает список файлов из двух разных папок и записывает их в таблицу на вновь созданном листе. После, из созданной таблицы данные назначаются в ListBox на форме через .SourceRow. На форме есть чекбоксы, которые регулируют из какой папки собрать список файлов. При их переключении случайным образом выскакивает ошибка. Я думал, что может необходимо очистить список, но команда .Clear не работает, а функция .SourceRow = "" стабильно выдаёт туже самую ошибку. В чём проблема?
Код в инициализации формы
Код
Private Sub UserForm_Initialize()
With task_list
.ColumnCount = 7
.ColumnHeads = True
End With
    Application.ScreenUpdating = False
    cb_uncomp = True
    Dim D, sh, y As Boolean
    For Each sh In Sheets
       If sh.Name = "_список заданий" Then y = True: Exit For
    Next
    If y = True Then
        Application.DisplayAlerts = False
        Sheets("_список заданий").Delete
    End If
    Call create_task_list
End Sub
Код в create_task_list
Код
Sub create_task_list()
'糺・・褪・ ・・ ・・task_manage_form
Dim task_bd As String
    Dim posinstr_f As Long
    Dim posinstr_l As Long
    Dim str_ln As Long
    Dim task_par() As String
    Dim mypath As String
    Dim task_list_h As Long
    
    
    Worksheets.Add
    ActiveSheet.Name = "_頌鶴 鈞萵湜・
    Cells(1, 1) = "ヘ黑褞"
    Cells(1, 2) = "ム鰀萵・
    Cells(1, 3) = "PLU"
    Cells(1, 4) = "ム鶴"
    Cells(1, 5) = "ム鰀萵・
    Cells(1, 6) = "ヘ珸浯濵"
    Cells(1, 7) = "ム・
    i = 1
    If task_manage_form.cb_uncomp = True Then
    mypath = "C:\Users\User\Documents\vba\task_bd\uncompleted\"
    Filename = Dir(mypath, vbNormal)
    ReDim task_par(6, i)
    Do While Filename <> ""
        If Filename <> "." And Filename <> ".." Then
            ReDim Preserve task_par(6, i)
            posinstr_f = 1
            posinstr_l = 1
                For Z = 1 To 6
                posinstr_l = InStr(posinstr_f, Filename, "&")
                If posinstr_l = 0 Then
                posinstr_l = Len(Filename) - 3
                End If
                str_ln = (posinstr_l - posinstr_f)
                Cells(i + 1, Z) = Mid(Filename, posinstr_f, str_ln)
                task_par(Z, i) = Mid(Filename, posinstr_f, str_ln)
                posinstr_f = posinstr_l + 1
                Next Z
            Cells(i + 1, 7) = "淲 鈞粢褊・
            Cells(i + 1, 8) = mypath & Filename
            i = i + 1
        End If
        Filename = Dir
    Loop
    If Cells(2, 1) <> "" Then
    End If
    End If
    If task_manage_form.cb_comp = True Then
    mypath = "C:\Users\User\Documents\vba\task_bd\completed\"
    Filename = Dir(mypath, vbNormal)
    ReDim task_par(6, i)
    Do While Filename <> ""
        If Filename <> "." And Filename <> ".." Then
            ReDim Preserve task_par(6, i)
            posinstr_f = 1
            posinstr_l = 1
                For Z = 1 To 6
                posinstr_l = InStr(posinstr_f, Filename, "&")
                If posinstr_l = 0 Then
                posinstr_l = Len(Filename) - 3
                End If
                str_ln = (posinstr_l - posinstr_f)
                Cells(i + 1, Z) = Mid(Filename, posinstr_f, str_ln)
                task_par(Z, i) = Mid(Filename, posinstr_f, str_ln)
                posinstr_f = posinstr_l + 1
                Next Z
            Cells(i + 1, 7) = "鈞粢褊・
            Cells(i + 1, 8) = mypath & Filename
            i = i + 1
        End If
        Filename = Dir
    Loop

    End If
    
    If Cells(2, 1) <> "" Then
    If Cells(3, 1) <> "" Then
    task_list_h = Range(Cells(2, 1), Cells(2, 1).End(xlDown)).Count
    Else
    task_list_h = 1
    End If
    End If


With task_manage_form.task_list
If task_manage_form.cb_comp = True Or task_manage_form.cb_uncomp = True Then
.RowSource = "A2:G" & (task_list_h + 1)
Else
.RowSource = "A2:G2"
End If
End With
Exit Sub
End Sub

Заранее благодарю за хоть какую-нибудь помощь!  
Обращение к кнопке на Multipage
 
Благодарю за ответы!
Обращение к кнопке на Multipage
 
Может есть какие-нибудь статьи на эту тему?... Я в VBA только начал, и то, что там написано пока всё тёмный лес. Разбираться нужно.  
Обращение к кнопке на Multipage
 
Прикладываю. При нажатии кнопки нужно, чтобы сработал макрос "test"
Обращение к кнопке на Multipage
 
Доброго времени суток всем!/
Подскажите пожалуйста, как обратится к кнопке на Multipage.
Объект Multipage размещён прямо на листе. В нём есть несколько кнопок, не могу задать выполнения макроса по нажатию. Как только не извращался. В интернете так и не смог найти способа. Всё про работу с формами. Как мне показалось, это немного другое. Может ошибаюсь, но ответа не нашёл. При редактировании кнопки, даже пункт Edit Code не активен.
Заранее спасибо =)
Страницы: 1
Наверх