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

Страницы: 1 2 3 След.
Обновление базы данных Access (accdb) данными из Excel макросом
 
Цитата
Андрей VG написал:
Может стоит проще? Сразу обновить?
Спасибо, помогло.
Обновление базы данных 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
Как заменить любое выражение внутри скобок?
 
Цитата
А перед первой скобкой всегда пробел?
Нет.
Код
nRegExp.Pattern = "\(.+\)"
Спасибо. То, что нужно.
Как заменить любое выражение внутри скобок?
 
Привет, всем.
Как заменить любое выражение внутри скобок? В ячейке 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?
 
Привет, всем
Как узнать длину массива, если он задан через функцию 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
Как заполнить двухмерный динамичный массив?
 
Цитата
Grr написал:  BretHard120 , Почему вы не хотите прислушаться к моему совету и отказаться от циклов?
Если брать этот упрощенный пример, то да. Я думал про то, чтобы просто все загнать в массив таким образом, но проект несколько сложнее и данный метод не подойдет (используются промежуточные словари).  Все равно спасибо за ответы, просто напишу чуть больше кода.
Как заполнить двухмерный динамичный массив?
 
Цитата
JayBhagavan написал:
BretHard120 , почитайте справку про  ReDim Preserve - можно менять ТОЛЬКО последнюю размерность, а Вы пытаетесь менять обе размерности.
Заменил строчку на
Код
 ReDim Preserve ARR_Extract(1 To 16, 1 To i)
Теперь затирается все кроме элементов с индексом (16,i) и первые элементы измерений с 1 по 15 (т.е. ARR_Extract(1,1)=10, ARR_Extract(1,2) = Empty и т.д.)
Как можно этого избежать?
Как заполнить двухмерный динамичный массив?
 
Привет, всем.
Как заполнить двухмерный динамичный массив? Пишет ошибку ("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?
 
Ясно, спасибо.
Что означает Version 1.0 CLASS?
 
VERSION 1.0 CLASS - это я как понимаю версия сборки определенного класса. Но что означает:
Код
BEGIN
  MultiUse = -1  'True
END

?
Что означает 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?
 
Цитата
Читайте про Union:

Спасибо, помогло. Вот, что получилось:
Код
Dim WE As Excel.Workbook
Dim WS As Excel.Worksheet
Dim r1 As Range
Dim r2 As Range
Dim myMultiAreaRange As Range

Public Sub Proverka()

Set WE = Application.Workbooks("Диапазон.xlsm")
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

End With

End Sub
Как выделить несвязанный диапазон в 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?
 
TSN, спасибо огромное то, что нужно
Как правильно воспользоваться свойством GetSaveAsFilename?
 
Цитата
JayBhagavan написал: Это?
Попробовал, вроде то, у меня почему-то объявления
Declare Function SHGetPathFromIDList Lib 'shell32.dll' _Alias 'SHGetPathFromIDListA' (ByVal pidl As Long, ByVal pszPath As String) As Long
Declare Function SHBrowseForFolder Lib 'shell32.dll' _Alias 'SHBrowseForFolderA' (lpBrowseInfo As BROWSEINFO) As Long
выделяет как ошибку. В чем может быть причина?
Я правильно понимаю, что это ссылки на библиотеки внутри винды?
Ссылка на Microsoft Scripting Runtime стоит.
Как правильно воспользоваться свойством GetSaveAsFilename?
 
Да, это косяк был. Но по невнимательности. Основной же вопрос был как задать с помощью GetSaveAsFilename нужный мне путь, чтобы сохранить отдельный лист (или по-другому, но чтобы можно было самому выбрать папку, а не вводить в InputBox или внутри макроса). Макрос поправил.
Как правильно воспользоваться свойством GetSaveAsFilename?
 
Привет, всем
В файле Тест.xlsm во вкладке "test" есть кнопка, при нажатии на которую должно появляться диалоговое окно сохранения файлов. После чего должен сохраняться первый лист файла в виде отдельной книги в определенную папку. Я попытался сделать это через Application.GetSaveAsFilename (для определения пути для сохранения), но появляется ошибка. Конечно, можно воспользоваться InputBox для определения пути к папке, но можно ли приспособить под эту задачу GetSaveAsFilename? Недостаток InputBox для меня в том, что нужно набирать путь файла в этом окне, а не выбирать папку непосредственно на диске.
Как запустить макрос, реагирующий на события, через свою надстройку?
 
В моем случае Personal не подходит.

Цитата
Skif-F написал: Можно сделать надстройку, но надо изменить код (см. вложение)
Нажатие на   включает или выключает изменение цвета ячейки при вводе значения
Спасибо большое, помогло.
Как запустить макрос, реагирующий на события, через свою надстройку?
 
Привет, всем.
Есть простой макрос, меняющий цвет активной ячейки.
Я поместил этот макрос в событие Worksheet_SelectionChange. Цвет ячейки меняется автоматически.
Я также сделал надстройку в файле (test), меняющую цвет ячейки при нажатии.
Чтобы настройка было доступна для любого листа, я поместил ее папку вместо Personal.xlsb
Можно ли объединить эти два подхода, т.е., чтобы процедура в Worksheet_SelectionChange включалась только, если нажата кнопка в надстройке для любого активного листа (не только Тест.xlsm)? Т.е. вызвать событие Worksheet_SelectionChange через надстройку для ActiveSheet? Как следует изменить код?
Вложенный файл - Тест.xlsm
Изменено: BretHard120 - 27.07.2015 16:04:20
Страницы: 1 2 3 След.
Наверх