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

Страницы: 1 2 След.
Обновление базы данных Access (accdb) данными из Excel макросом
 
Привет всем!

Недавно попытался написать код обновления базы данных Access (accdb) данными из Excel макросом, который находится в Excel (примеры во вложенных файлах). Но при выполнении появляется ошибка  Run-time error '3704':Операция не допускается, если объект закрыт. Пробовал добавить SET NOCOUNT ON в SQL-запрос, но получил ошибку синтаксиса SQL.
Как исправить ошибку 3704?
Правильные ли я подключил библиотеки:
Microsoft Access 15.0 Object Libray
Microsoft ActiveX Data Objects 2.8 Library
Microsoft ActiveX Data Objects Recordset 6.0 Library?

Правильный ли выбрал Provider=Microsoft.ACE.OLEDB.12.0?
OC - Windows 7 SP 1 64-bit, Office - 2016.
Подскажите, пожалуйста.

Вот код:
Код
Option Explicit
Dim EA As Excel.Application
Dim WB As Excel.Workbook
Dim WS As Excel.Worksheet
Dim strValue$, idcode&, strSQL$
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset

Public Sub transferAccPr()

Set EA = Excel.Application

EA.ScreenUpdating = False
EA.DisplayAlerts = False
EA.StatusBar = False

Set EA = Excel.Application
Set WB = EA.Workbooks("TestExcel.xlsm")
Set WS = WB.Worksheets("Лист1")

Set cn = New ADODB.Connection
cn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\TestAccessBD.accdb;"
cn.Open

strValue = WS.Cells(2, 2).Value
idcode = WS.Cells(2, 1).Value

'strSQL = "SET NOCOUNT ON UPDATE Products SET [Item] = " & " '" & strValue & "'" & " WHERE Products.[CodeId]= 4"
strSQL = "UPDATE Products SET [Item] = " & " '" & strValue & "'" & " WHERE Products.[CodeId]= 4"

Set rs = cn.Execute(strSQL)

rs.Close

cn.Close

EA.ScreenUpdating = True
EA.DisplayAlerts = True

End Sub
Изменено: BretHard120 - 22.02.2017 09:06:25
Как заменить любое выражение внутри скобок?
 
Привет, всем.
Как заменить любое выражение внутри скобок? В ячейке A1 выражение со скобками "апельсин (мандарин мандарин)", нужно получить "апельсин" (пример во вложенном файле). Попробовал два метода. Ни один не работает. Как правильно? Подскажите, пожалуйста. Код:
Код
Option Explicit
Dim WEA As Excel.Application
Dim WB As Excel.Workbook 
Dim WS As Excel.Worksheet 
Dim strValue$(1 To 10)
Dim nRegExp As RegExp


Public Sub replaceValue()

Set WEA = Excel.Application

WEA.ScreenUpdating = False
WEA.DisplayAlerts = False
WEA.StatusBar = False

Set WEA = Excel.Application
Set WB = WEA.Workbooks("Замен внутри скобок.xlsm")
Set WS = WB.Worksheets(1)

Set nRegExp = New RegExp

With WS

strValue(1) = .Cells(1, 1).Value
strValue(3) = Replace(strValue(1), "(*)", "")

nRegExp.Pattern = "(w\*)"
strValue(2) = nRegExp.Replace(strValue(1), "")


End With


WEA.ScreenUpdating = True
WEA.DisplayAlerts = True

End Sub
Как узнать длину массива, если он задан через функцию Array?
 
Привет, всем
Как узнать длину массива, если он задан через функцию Array (пример во вложенном файле)? Строка i = arrTest.Ubound выдает ошибку. Подскажите, пожалуйста. Код:
Код
Dim WEA As Excel.Application
Dim WB As Excel.Workbook
Dim WS As Excel.Worksheet
Dim arrTest

Public Sub replaceValue()

Set WEA = Excel.Application

WEA.ScreenUpdating = False
WEA.DisplayAlerts = False
WEA.StatusBar = False

Set WEA = Excel.Application
Set WB = WEA.Workbooks("Длина массива.xlsm")
Set WS = WB.Worksheets(1)


arrTest = Array(1, 2, 3, 43, 5)
'i = arrTest.Ubound

WEA.ScreenUpdating = True
WEA.DisplayAlerts = True

End Sub
Изменено: BretHard120 - 23.07.2016 13:10:56
Регулярное выражение не ищет по шаблону
 
Привет, всем
Есть строка, где регулярное выражение должно найти дату вида "01.07.2015" и присвоить переменной strDate. Но strDate остается "Empty". В чем может быть причина? Подскажите, пожалуйста. Пример во вложенном файле. Код:
Код
Dim WEA As Excel.Application
Dim WB As Excel.Workbook
Dim WS As Excel.Worksheet
Dim WSR As Range
Dim regDate As RegExp
Dim srtDate

Public Sub regExpProcedure()

Set WEA = Excel.Application

WEA.ScreenUpdating = False
WEA.DisplayAlerts = False

Set WEA = Excel.Application
Set WB = WEA.Workbooks("Ðåãóëÿðíîå âûðàæåíèå.xlsm")
Set WS = WB.Worksheets(1)
Set regDate = New RegExp

With WS

For Each WSR In Range(.Cells(1, 1), .Cells(1, 4))

        If WSR.Value Like regDate.Pattern = ("\w{2}.\w{2}.\w{4}") Then strDate = WSR.Value

Next WSR

End With

WEA.ScreenUpdating = True
WEA.DisplayAlerts = True

End Sub
Как заполнить двухмерный динамичный массив?
 
Привет, всем.
Как заполнить двухмерный динамичный массив? Пишет ошибку ("Run-time error'9' Subscript out of range") в строке ReDim Preserve ARR_Extract(1 To n, 1 To i). Пример во вложенном файле. Подскажите, пожалуйста.
Код
Option Explicit
Option Base 1
Dim WEA As Excel.Application
Dim WB(1 To 30) As Excel.Workbook 
Dim WS(1 To 30) As Excel.Worksheet
Dim i&, y&, n&, k&
Dim iLastRow&(1 To 30) 
Dim iLastColumn&(1 To 30)

Public Sub test_Procedure()
Set WEA = Excel.Application

WEA.ScreenUpdating = False 
WEA.DisplayAlerts = False 

Set WEA = Excel.Application
Set WB(1) = WEA.Workbooks("Двухмерный динамичный массив.xlsm")
Set WS(1) = WB(1).Worksheets(1)

iLastRow(1) = LastRow_FA(WS(1), 1)
iLastColumn(1) = LastColumn_FA(WS(1), 1)

For n = 1 To iLastRow(1)      
    For i = 1 To iLastColumn(1)
        ReDim Preserve ARR_Extract(1 To n, 1 To i)    
        ARR_Extract(n, i) = WS(1).Cells(n, i).Value
    Next i
Next n

WEA.ScreenUpdating = True
WEA.DisplayAlerts = True
End Sub

Private Function LastColumn_FA(WSF As Excel.Worksheet, ifun&)
With WSF
LastColumn_FA = .Cells(ifun, .Columns.Count).End(xlToLeft).Column
End With
End Function

Private Function LastRow_FA(WSF As Excel.Worksheet, ifun&)
With WSF
LastRow_FA = .Cells(.Rows.Count, ifun).End(xlUp).Row
End With
End Function
Найти соответствующие значения из другого диапазона и вернуть их построчно через формулу массива
 
Привет, всем
Есть два диапазона A1:B5 и F1:G12 с названиями столбцов "Код" и "Категория" (пример во вложенном файле). Как в первый диапазон вернуть все соответствующие значения из второго диапазона из столбца "Категория" через формулу массива с использованием разделителя "/"? Чтобы, к примеру, в ячейке B2 было значение "A/C"? Я попробовал использовать формулу: {=ЕСЛИ(A2:A5=F2:F12;G2:G12)&"/"}, но она возвращает ЛОЖЬ/ для всего диапазона. Макросы и UDF не подойдут.

Подскажите, пожалуйста.
Что означает Version 1.0 CLASS?
 
Привет, всем.
Разбирая чужой код, нашел строчку (KVPairs.cls):
Код
VERSION 1.0 CLASS
BEGIN
  MultiUse = -1  'True
End
Часто ее вижу, но не могу найти нормального объяснения. Что она значит?
Причем VBE подчеркивает ее красным, а сами файлы .cls открываются у меня не как модули классов, а как обычные модули .bas. Приходится создавать отдельные модули и просто туда копировать код. С чем это связано? Настройки в VBE не те стоят? Подскажите, пожалуйста.
Изменено: BretHard120 - 07.04.2016 13:10:02
Подсчитать одной формулой количество звонков за два несвязанных между собой промежутка времени
 
Привет, всем.
Есть диапазон с датами звонков. Можно ли подсчитать одной формулой количество звонков за два несвязанных между собой промежутка времени (например, с 1.01.16 по 4.01.16 и с 20.01.16 по 31.01.16). Я попробовал сделать это с помощью формулы: =СЧЁТЕСЛИ(A2:A38;ИЛИ("<4.01.16";">19.01.16")) , которая явно неправильная. Можно, конечно, два раза ввести формулу СЧЁТЕСЛИ: =СЧЁТЕСЛИ(A2:A38;"<4.01.16")+СЧЁТЕСЛИ(A2:A38;">19.01.16"). Но можно ли это сделать одной формулой через ИЛИ? Пример во вложенном файле.
Создание диаграммы с помощью макроса
 
Привет, всем. Я попытался сделать создание диаграммы с помощью макроса и получил такой код (пример во вложенном файле Module 3):
Код
Dim WE As Excel.Workbook
Dim WS As Excel.Worksheet
Dim r1 As Range
Dim r2 As Range
Dim myMultiAreaRange As Range

Sub Proverka()

Set WE = Application.Workbooks("Диаграмма.xlsb")
Set WS = WE.Worksheets("Лист1")

With WS

Set r1 = .Range(.Cells(1, 1), .Cells(13, 2))
Set r2 = .Range(.Cells(1, 4), .Cells(13, 4))
Set myMultiAreaRange = Union(r1, r2)
myMultiAreaRange.Select
.Shapes.AddChart.Select
ActiveChart.ChartType = xlLine
ActiveChart.SetSourceData myMultiAreaRange

End With

End Sub
Но в строке .Shapes.AddChart.Select возникает 1004 ошибка.

Попробовал сделать тоже самое с помощью макрорекодера, но в результате VBA не смог запустить свой же код с такой же ошибкой в строке ActiveSheet.Shapes.AddChart.Select (Module 4).

Подскажите, пожалуйста, как это исправить.  
Как выделить несвязанный диапазон в VBA?
 
Привет, всем.
Как выделить несвязанный диапазон в VBA без использования стиля A1 (пример в прикрепленном файле)? Получилось вот, что:
Код
Public Sub Proverka()

Set WE = Application.Workbooks("Диапазон.xlsm")
Set WS = WE.Worksheets("Лист1")

With WS

.Range(.Cells(1, 1), .Cells(13, 2)).Select 'работает

'.Range("A1:B13,D1:D14").Select 'работает
'.Range(.Cells(1, 1), .Cells(13, 2), .Cells(1, 4), .Cells(13, 4)).Select 'не работает

End With

End Sub
Через A1 получается, а через обычную запись (для меня более удобную) - нет. Подскажите, пожалуйста.
Как установить MZ-Tools 3.0 для всех пользователей на компьютере?
 
Привет, всем
Недавно решил попробовать MZ-Tools 3.0. Проблема в том, что панель программы отобразилась только для пользователя с правами администратора, а для пользователей с обычными правами ее нет. Смотрел справку - ничего не нашел. Подскажите, пожалуйста, как ее установить для всех пользователей?
Как правильно воспользоваться свойством GetSaveAsFilename?
 
Привет, всем
В файле Тест.xlsm во вкладке "test" есть кнопка, при нажатии на которую должно появляться диалоговое окно сохранения файлов. После чего должен сохраняться первый лист файла в виде отдельной книги в определенную папку. Я попытался сделать это через Application.GetSaveAsFilename (для определения пути для сохранения), но появляется ошибка. Конечно, можно воспользоваться InputBox для определения пути к папке, но можно ли приспособить под эту задачу GetSaveAsFilename? Недостаток InputBox для меня в том, что нужно набирать путь файла в этом окне, а не выбирать папку непосредственно на диске.
Как запустить макрос, реагирующий на события, через свою надстройку?
 
Привет, всем.
Есть простой макрос, меняющий цвет активной ячейки.
Я поместил этот макрос в событие Worksheet_SelectionChange. Цвет ячейки меняется автоматически.
Я также сделал надстройку в файле (test), меняющую цвет ячейки при нажатии.
Чтобы настройка было доступна для любого листа, я поместил ее папку вместо Personal.xlsb
Можно ли объединить эти два подхода, т.е., чтобы процедура в Worksheet_SelectionChange включалась только, если нажата кнопка в надстройке для любого активного листа (не только Тест.xlsm)? Т.е. вызвать событие Worksheet_SelectionChange через надстройку для ActiveSheet? Как следует изменить код?
Вложенный файл - Тест.xlsm
Изменено: BretHard120 - 27.07.2015 16:04:20
Как извлечь из словаря случайную пару "ключ - значение"?
 
Привет, всем.
В файле "Пример словаря" создается словарь DictW. Ключ - английское слово, значение - русский перевод. Подскажите, пожалуйста, как из этого словаря извлечь случайную пару "Ключ - значение" и поместить его в строке 10? Можно, конечно, использовать значение ячеек, но меня интересует работа со словарем.
Как извлечь значения словаря, если это массивы?
 
Привет, всем.
В файле "Данные.xlsm" хранятся данные, с помощью которых формируется словарь. При этом ключ название магазина ("Магазин 1" и др.), а значения словаря массив из данных по продажам апельсинов, мандаринов и киви.
В файл "Таблица.xlsm" мне удалось перенести ключи этого словаря. Но как перенести значения  по продажам апельсинов, мандаринов и киви, соответственно , в столбцы 2,4,6? Подскажите, пожалуйста.
Можно, конечно, просто приравнять значения ячеек в обоих файлах, но меня интересует работа именно со словарем.
Код в файле "Таблица.xlsm"
Найти сумму значений с проверкой условия на другом листе
 
Привет, всем!
Есть лист с номенклатурой и значением продаж (первый лист "Сумма по нескольким критериям (4).xlsm" ). Как с помощью функции СУММПРОИЗВ или другой функции найти сумму значений с проверкой условия на другом листе (условие "да", второй лист)?
У меня получилась следующая формула:
Код
=СУММПРОИЗВ($C$2:$C$14*ЕЧИCЛО(ПОИСКПОЗ($A$2:$A$14;'Проверка номенклатуры'!$A$2:$A$7))*ЕЧИСЛО(ПОИСКПОЗ('Проверка номенклатуры'!$B$2:$B$7;"да")))
Но выдает ошибку (скорей всего из-за того, что диапазоны на листах разных размеров). Подскажите, пожалуйста, как набрать формулу правильно.
Можно ли в функции СУММЕСЛИМН в условии указать больше одного элемента?
 
Привет, всем.

С помощью формулы "СУММАЕСЛИМН" я подсчитал сумму с использованием двух условий (Магазин 1, <> манго, пример во вложенном файле).  Можно ли в одном условии указать больше одного элемента? К примеру, не просто не равно манго, а не равно манго и ананасу (т.е. некоторому массиву данных). Вариант, просто дописать еще одно условие не подходит, т.к. у формулы есть ограничение в 127 условий и нужный массив будет создан с помощью макроса автоматически.
Как по словарю удалить строки?
 
Привет, всем.
Есть два файла: "Начальные данные.xlsb" и "Массив данных.xlsb" (пример во вложенном файле). Из файла  "Начальные данные.xlsb" в макросе формируется словарь (Ключ - Номенклатура, Свойство  - актуальность). Нужно, чтобы вся номенклатура со свойством равным "Нет" удалялась из файла " Массив данных.xlsb" (т.е. целиком удалялась строка). Я написал (целиком код в файле "Начальные данные.xlsb" ) следующие:
Код
For n = 2 To Lt(1)
    oDict.Add Key:=WS(1).Cells(n, 1).Value, Item:=WS(2).Cells(n, 2).Value
    For i = Lt(2) To 2 Step -1
        If WS(2).Cells(i, 1).Value = oDict.Key(WS(1).Cells(n, 1).Value) & _
        oDict.Item(WS(1).Cells(n, 1).Value) = "Нет" Then WS(2).Rows(i).Delete
Next i: Next n 
В oDict.Key(WS(1).Cells(n, 1).Value) & oDict.Item(WS(1).Cells(n, 1).Value) = "Нет" появляется ошибка неправильного использования свойства. Подскажите, пожалуйста, как правильно оформить код.

Раньше в макросах я просто удалял строки через сравнения значений ячеек, т.е  WS(2).Cells(i, 1).Value =  WS(1).Cells(n, 1).Value, но решил попробывать использовать словари, т.к. они ускоряют работу кода.
Как посчитать сумму по месяцам?
 
Привет, всем
Есть столбец с датами, а в соседнем столбце значения (пример во вложенном файле). Можно ли формулой (наподобие СУММАЕСЛИ), посчитать сумму по месяцам в третьем столбе?

Подскажите, пожалуйста.
Можно ли свойства LinkedCell и ListFillRange элемента ActiveX "Поле со списком" привязать к переменным в макросе?
 
Привет всем
На листе есть ComboBox (пример во вложенном файле). Свойства LinkedCell (C9) и ListFillRange(A1:A5) заданы вручную. Как в макросе привязать их к переменным t и k? Чтобы с помощью макроса менялся диапазон данных и связанная ячейка (получилось C8 и A1:A25)?
Подскажите, пожалуйста.
Изменено: BretHard120 - 14.08.2014 12:42:26
Как сформировать динамичный массив из названий отмеченных флажков на форме?
 
Привет, всем
Как сформировать динамичный массив из названий отмеченных флажков на форме? Написал:
Код
Private Sub CommandButton1_Click()
y = 0

For Each Flag In Controls
    If Flag.Value = True Then
        nst(y) = Flag.Caption: y = y + 1
        ReDim Preserve nst(y): Debug.Print nst(y)
    End If
Next

End Sub
 
Но появляется ошибка №9 в строчке  nst(y) = Flag.Caption: y = y + 1. Подскажите,пожалуйста, как правильно? Пример во вложенном файле.
Как с помощью цикла задать начальное состояние флажков на форме?
 
Привет, всем
Есть форма, на которой есть несколько элементов "Флажок" (пример во вложенном файле). При активации формы можно, конечно, задать состояние с помощью CheckBox.Value = 1 для каждого флажка. Но можно ли сделать все это с помощью цикла? Я попытался написать:
Код
For i = 1 To 5
      CheckBox(i).Value = 1
Next i 
В результате выдает ошибку.
Подскажите, пожалуйста.
Из Правил: 2.6. Один вопрос - одна тема. Не следует в открываемой теме обозначать и задавать сразу несколько вопросов. [МОДЕРАТОР]
Как сохранить через код VBA файл в формате xlam?
 
Привет, всем.
Есть некий файл ("Пример использования форматов.xlsb"). Как через код VBA сохранить его в формате xlam? Т.е какое значение должно быть у параметра FileFormat при сохранении книги через SaveAs?
Если пользоваться макрорекодером, то при сохранении в формате xlsb появляется xlExcel12. А если сохранить в xlam, то рекодер ничего не отображает.
Подскажите, пожалуйста.
Как перенести макросы обработки события листа в другой файл?
 
Привет всем
Как перенести макросы обработки события листа в другой файл?

Суть задачи такая. Есть готовый макрос обработки события листа (нумерованный список - взял из примеров на сайте, файл - Пример.xlsm). Нужно автоматически перенсти этот макрос на три листа другой книги (Проба работы с классами.xlsm). Я попытался перенсти с помощью создания нового модуля класса, но при выполении появляется 91 ошибка.

Подскажите, пожалуйста, как нужно подкорректировать код, чтобы все работало?
Можно ли полностью закрыть файл, не закрывая при этом вызываемую им форму?
 
Привет, всем.
Можно ли полностью закрыть файл, не закрывая при этом вызываемую им форму?

Форма UserForm1 ("Форма.xlsm") отрывает файл ("Файл.xlsm"). При закрытии этого файла (через BeforeClose) открывается другая форма UserForm2. Проблема в том, что пока  UserForm2 не закрыта, файл продолжает быть открытым. Максимум, что мне удалось добиться - это свернуть окно "Файл.xlsm" на панель задач. Подскажите, пожалуйста, существует ли способ полностью закрыть файл при активной форме UserForm2? Либо сделать возможным редактирование файла не закрывая форму UserForm1 (если ее не скрыть файл нельзя редактировать, даже если активировать окно "Файл.xlsm")?
Как можно активировать форму при закрытии определенного файла?
 
Привет всем
Создал простенькую форму, которая открывает определенный файл. При этом путь до файла задается в отдельном окне. Как можно снова сразу активировать форму, при изменении  и закрытии файла? Пример приложил.
Как правильно ввести формулу округления в VBA
 
Привет, всем :)
Объясните, пожалуйста, в чем ошибка.
Если с помощью макроса ввести формулу округления до ближайшего меньшего числа в виде
WSP.Cells(2, 2).FormulaR1C1 = "=ROUNDDOWN(RC" & 1 & "/" & "3.5,0)" то она срабатывает
А если чуть изменить на  WSP.Cells(2, 2).FormulaR1C1 = "=ROUNDDOWN(RC" & 1 & "/" & 3.5 & ",0)", то выдает ошибку 1004.

Также если записать  WSP.Cells(2, 2).FormulaR1C1 = "=ROUNDDOWN(RC" & 1 & "/" & bk & ",0)", bk  с типом Long, то все нормально работает.
А если изменить тип на Single, то опять выдает ошибку.
Как правильно записать формулу в коде, чтобы она срабатывала с типом  Single?

Пример во вложенном файле.
Как найти наибольшее повторение по условию?
 
Привет всем  :)  
Как найти наибольшее повторение по условию? К примеру, Магазин 1 встречается в диапазоне 3 раза и номер повторения ищется с помощью формулы =СЧЁТЕСЛИ($A$2:A2;A2). А какую формулу нужно ввести, чтобы в столбце С отображалась наибольшее количество повторений (т.е. 3), напротив ячейки с Магазином 1? Пример во вложенном файле.
Расстановка номеров повторений
 
Привет всем :)

Подскажите, пожалуйста,  как с помощью формулы в Excel 2007 расставить номера повторений? Например, Магазин 3 встречается в столбце три раза. Нужно, чтобы в соседнем столбце, когда Магазин 3 встречается первый раз, стояла цифра "1", при втором "2" и т.д. Пример во вложенном файле.
Можно программно ввести формулу, которая частично будет состоять из данных в макросе?
 
Привет, всем  :)  

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

Нужно посчитать продажи апельсинов по магазинам (пример во вложенном файле). Для этого я использовал формулу СУММЕСЛИМН.  Можно ли для этой формулы использовать цикл, задав условия для диапазонов внутри макроса? Вот, что получилось у меня

Код
Dim WEP As Excel.Workbook
Dim WSP As Excel.Worksheet
Dim i&, m$
Dim n(2 To 3) As String


Public Sub Prostanovkaformul()

Set WEP = Application.Workbooks("Программный ввод формулы.xls")
Set WSP = WEP.Worksheets(1)

n(2) = "Магазин 1"
n(3) = "Магазин 2"

m = "апельсины"

For i = 2 To 3
    WSP.Cells(i, 4).Value = "=SUMIFS(RC[-1]:R[7]C[-1],RC[-3]:R[7]C[-3]," & "n(i)" & ",RC[-2]:R[7]C[-2]," & "m" & ")"
Next i

End Sub

 
В таком виде формула возвращает ноль. Если убрать кавычки у n(i) и "m",  то VBA отобразить ошибку. Есть ли правильная запись?
Изменено: BretHard120 - 13.12.2013 14:51:21 (не добавил файл)
Страницы: 1 2 След.
Наверх