Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
Изменить макросы VBA в большом количестве книг
 
Дмитрий(The_Prist) Щербаков, Спасибо. Кажется то что нужно. Буду пробовать

Нашел еще на Python
https://askdev.ru/q/ispolzuyte-python-dlya-vstavki-makrosov-v-elektronnye-tablicy-240183/
https://stackoverflow.com/questions/19505676/use-python-to-write-vba-script
Изменить макросы VBA в большом количестве книг
 
По системе раскидано куча excell файлов с vbs скриптов внутри каждого.
Там простой скрипт: по нажатию на кнопку, берётся список файлов из определённой папки и запихивается в дроп-лист определённой клетки.
Проблема в том, что поменялся путь/адрес доя папки. Что бы скрипт работал, нужно открывать редактор в экселе и менять переменную

Есть ли возможность как-то автоматически пройтись по всем экселевским файлам, и при условии что внутри Y скрипт, внести в него изменения (в коде), ну или заменить его на другой (наверное как вариант удалить внутренний и импортировать BAS файл)

Как такое можно осуществить? На чём?
Знаю Python, но не могу подобрать нужной библиотеки для этого. Всё что нашел, не позволяет VBS редактировать
VBscript как узнать номер строки или номер столбца выбранной ячейки используя ACE.OLEDB и SQL запрос?
 
Это действительно - выход.
Но что делать со старыми файлами, где нет такого листа?

Получилось запустить питон из VBS. Осталось подобрать библиотеку, и прикрутить передачу параметров из VBS в скрипт питона.
Ну и с синтаксисом питона покопаться в доках
VBscript как узнать номер строки или номер столбца выбранной ячейки используя ACE.OLEDB и SQL запрос?
 
Андрей VG, не подскажите ли бесплатную библиотеку по работе с xls файлами?
Мне по сути то требуется - экспорт в XML или CSV. Конечно, хотелось бы сразу в нормальном виде. Но можно и потом XML/CSV переделать.

Может есть волшебный способ из VBScript запускать скрипты на питоне?
Изменено: Alex_Dom - 9 сен 2019 14:06:41
VBscript как узнать номер строки или номер столбца выбранной ячейки используя ACE.OLEDB и SQL запрос?
 
Я в экселе использую именнованные ячейки с конкретной целью - не переписывать скрипты, в случае изменения верстки экселевского файла (поменялось положение ячейки с B1 на J1 - лезь в код).
Не использовать именованные ячейки, это как книгу на 96 полос верстать, или дипломную работу в ворде, не используя стили.

Мне требуется вывести данные из таблицы, количество строк в которой неизвестно, но известно что она начинается с ячейки CustomerName.

На сервере можно запустить шел/JScript/VBscript
Они запускаются модулем серверной программы. Которая в скрипт еще и внутренние переменные данные передаёт.
VBscript как узнать номер строки или номер столбца выбранной ячейки используя ACE.OLEDB и SQL запрос?
 
Эх...
В VBA всё было проще
Код
i = Range("CustomerName").Row
Нельзя на сервер использовать Excel.Application, нужно через какуюнибудь библиотеку читать xls файл
Видимо через ACE.OLEDB мне никак не получится получить номер строки нужной ячейки.
Значение ячейки не уникально :(

Может посоветуете какую библиотеку для чтения xls без экселя?
VBscript как узнать номер строки или номер столбца выбранной ячейки используя ACE.OLEDB и SQL запрос?
 
Вот пример.
Код
'Читаем данные из XLS файла
Dim connStr, objConn, getNames
connStr = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & inputFile & ";Extended Properties=""Excel 12.0 xml;HDR=No;IMEX=2;"";"

Set objConn = CreateObject("ADODB.Connection")
'Open Connection
objConn.open connStr

'Define recordset and SQL query
'тут мы через SQL запрос вытаскиваем данные из ИМЕННЫХ ячеек экселевского файла. Всё это в массив
Set rs = objConn.execute("SELECT * FROM JobNamber,CustomerName,CutTools")

'присваиваем значения переменным из массива
DO WHILE NOT rs.EOF
JobNamber = rs.Fields(0)
CustomerName = rs.Fields(1)
CutTools = rs.Fields(2)
rs.MoveNext
Loop


'Close connection XLS and release objects
objConn.Close
Set rs = Nothing
Set objConn = Nothing

Собственно, если я делаю запрос

Код
Set rsRow = objConn.execute("SELECT * FROM CustomerName")
Как мне в rsRow получить номер строки этой ячейки а не данные из неё?

VBscript как узнать номер строки или номер столбца выбранной ячейки используя ACE.OLEDB и SQL запрос?
 
Использую VBscript  для чтения XLS файла на сервере без использования Excel используя библиотеку ACE.OLEDB
Как узнать номер строки или номер столбца выбранной ячейки?
Я правильно понимаю, ACE.OLEDB позволяет читать xls только через SQL запросы?
Подключение библиотеки через VBA
 
Спасибо большое. Всё заработало. Материал почитаю. Нужно разбираться
Подключение библиотеки через VBA
 
Если я через референцес подключаю, то всё ок.
https://yadi.sk/i/CYNeWJ0QmXTzMg
Но мне нужно подключать не вручную, а через скрипт.
Ошибка:
https://yadi.sk/i/xEu4Q3Lhu_Ysuw
Изменено: Alex_Dom - 20 авг 2019 14:10:44
Подключение библиотеки через VBA
 
Не получается скриптом подключить библиотеку для работы с MySQL
Код
Dim s As String
s = "C:\Program Files\Common Files\System\ado\msado15.dll"
ThisWorkbook.VBProject.References.AddFromFile s
    Dim oConn As Object
    Set oConn = New ADODB.Connection
    
    
    oConn.Open "DRIVER={MySQL ODBC 3.51 Driver};" & _
        "SERVER=localhost;" & _
        "DATABASE=pprint;" & _
        "UID=root;" & _
        "PASSWORD=;" & _
        "PORT:3306;" & _
        "charset=cp1251;" & _
        "Option=3;"
 'Ïîëó÷åíèå äàííûõ èç áàçû äàííûõ
        Dim cmd As ADODB.Command 
    Set cmd = New ADODB.Command
    
    Dim rec As ADODB.Recordset 
    Set rec = New ADODB.Recordset
    Set cmd.ActiveConnection = oConn 
    cmd.CommandText = "SELECT * FROM tools  WHERE IDCUT= '" & mstr & "'" 
    cmd.CommandType = adCmdText
    cmd.Execute
    rec.Open cmd

    With rec

        
    Distorsia = Replace(.Fields("HDist").Value, ",", ".")
    Zub = .Fields("zub").Value
        DPrint = Replace(.Fields("HPrint").Value, ",", ".")
    Polimer = Replace(.Fields("HPolimer").Value, ",", ".")

        'äëÿ ïîëèìåðà 1.7
        Polimer17 = Replace(.Fields("Hpolimer_17").Value, ",", ".")
        Distorsia17 = Replace(.Fields("Hdist_17").Value, ",", ".")
    Vsheet = Replace(.Fields("Vsheet").Value, ",", ".")

        HCountItem = .Fields("HCountItem").Value
    VCountItem = .Fields("VCountItem").Value

    End With

Пробую напрямую dll добавить.
Код
Dim s As String
s = "C:\Program Files\Common Files\System\ado\msado15.dll"
ThisWorkbook.VBProject.References.AddFromFile s
Где ошибка?
VBA данные из MySQL в переменные
 
Отлично. Спасибо большое.
Осталось сообразить пару страничек на PHP для вывода таблицы и её правки.
Изменено: Alex_Dom - 20 авг 2019 10:52:32
VBA данные из MySQL в переменные
 
Спасибо огромное.

Вот так работает:
Код
 'Получение данных из базы данных
   Dim cmd As ADODB.Command  'переменная в которой будет запрос
    Set cmd = New ADODB.Command
    
    Dim rec As ADODB.Recordset 'переменная в которой будет результат запроса
    Set rec = New ADODB.Recordset
    Dim test As String
    Set cmd.ActiveConnection = oConn 'указываем соединение из примера выше
    cmd.CommandText = "SELECT * FROM tools  WHERE IDCUT= 'A1014'" 'собственно, запрос
    cmd.CommandType = adCmdText
    cmd.Execute
    rec.Open cmd

    With rec
    test = .Fields("HPrint").Value
    test1 = .Fields("Vsheet").Value
    End With
  • Не подскажите, нужно ли как-то закрывать соединение с БД?
    У меня же к БД будут подключаться и другие пользователи с запросами.
  • И как в запрос вставить переменную? Т.е. вместо A1014 подставить переменную CutTools
VBA данные из MySQL в переменные
 
Есть БД с таблицей

Подключаюсь по коду:
Код
' Собственно, попробовать подключиться к БД:
    Dim oConn As Object
    Set oConn = New ADODB.Connection
    
    oConn.Open "DRIVER={MySQL ODBC 3.51 Driver};" & _
        "SERVER=localhost;" & _
        "DATABASE=pp_cut;" & _
        "UID=root;" & _
        "PASSWORD=;" & _
        "PORT:3306;" & _
        "charset=cp1251;" & _
        "Option=3;"
 'Получение данных из базы данных
    Dim cmd As ADODB.Command  'переменная в которой будет запрос
    Set cmd = New ADODB.Command
    
    Dim rec As ADODB.Recordset 'переменная в которой будет результат запроса
    Set rec = New ADODB.Recordset
    Dim test As String
    Set cmd.ActiveConnection = oConn 'указываем соединение
    cmd.CommandText = "SELECT HDist FROM tools  WHERE IDCUT= 'A1014'" 'собственно, запрос
    cmd.CommandType = adCmdText
        
    Set rec.ActiveConnection = oConn
    rec.Open cmd
    
    oConn.Close
Брал из примера

Собственно, вот в чём вопрос:
У меня порядка 8 столбцов в таблице. По запросу нужно найти строку в столбце IDCUT = некой переменной. Далее из результата (у нас же выходит одна строка) нужно столбцы в переменные записать.
Например переменная test = колонке 'HPrint', test1 = Vsheet

Как это сделать?
VBA скрипт для Excel - Как вставить значение из mdb файла Access по SQL запросу без названия столбца
 
Спасибо. Заработало
Код
Sub SQLQuery_1()
Dim varConn As String
Dim varSQL As String   
    Range("A1").CurrentRegion.ClearContents
   
    varConn = "ODBC;DBQ=\\Server-esko\ae_base\BD_CutTools.mdb;Driver={Driver do Microsoft Access (*.mdb)}"
   
    varSQL = "SELECT HCountItem FROM cut_tools WHERE cut_name='A141'"
   
         With ActiveSheet.QueryTables.Add(Connection:=varConn, Destination:=Cells(1, 1))
         .FieldNames = False
             .CommandText = varSQL
             .Name = "Query-39008"
             .Refresh BackgroundQuery:=False  
         End With
End Sub
Изменено: Alex_Dom - 20 фев 2019 20:14:50
VBA скрипт для Excel - Как вставить значение из mdb файла Access по SQL запросу без названия столбца
 
Я не силён в VBA. Не подскажете код решения?
VBA скрипт для Excel - Как вставить значение из mdb файла Access по SQL запросу без названия столбца
 
Использую VBA скрипт в  Excel для вставки в ячейку таблицы Excel данных по SQL запросу из БД Access (файл mdb).
Вот сам скрипт. Он работает:
Код
Sub SQLQuery_1()
Dim varConn As String
Dim varSQL As String
  
    Range("A1").CurrentRegion.ClearContents
  
    varConn = "ODBC;DBQ=\\Server-esko\ae_base\BD_CutTools.mdb;Driver={Driver do Microsoft Access (*.mdb)}"
  
    varSQL = "SELECT HCountItem FROM cut_tools WHERE cut_name='A141'"
  
         With ActiveSheet.QueryTables.Add(Connection:=varConn, Destination:=Cells(1, 1))
             .CommandText = varSQL
             .Name = "Query-39008"
             .Refresh BackgroundQuery:=False
         End With
  
End Sub
Проблема в том, что в Excel вставляется помимо результата SQL запроса, еще и название столбца(ов) Access. Как сделать что бы не вставлялись названия столбцов?
VBA Экспорт в XML из таблицы значений без дублей сравнивая 2 столбца
 
Вот так мне нужно
VBA Экспорт в XML из таблицы значений без дублей сравнивая 2 столбца
 
Помогли с решением на другом форуме.
Выкладываю. Вдруг кому-то пригодится.
Код
  i = Range("FirstID").Row 'возвращаем номер строки первой ячейки в таблице дизайнов

  With CreateObject("scripting.dictionary")
    .comparemode = vbTextCompare 'не различать регистр
    Do
      .Item(Cells(i, 2) & vbTab & Cells(i, 3)) = Cells(i, 1)
      i = i + 1
    Loop Until Cells(i, 2) = ""  'пока не будет пустой ячейки с именем файла

    For Each x In .keys
      Set FILE = xml.createElement("File")
      FILE.setAttribute "ID", .Item(x)
      FILE.Text = Split(x, vbTab)(0)                          ' название файла
      FILE.setAttribute "Angle", Split(x, vbTab)(1)            ' угол поворота
      objRoot.appendChild FILE
    Next
  End With
VBA Экспорт в XML из таблицы значений без дублей сравнивая 2 столбца
 
Есть таблица:
Номер название файла угол поворота
Экспортирую её в XML.
Последовательно дважды формируется XML. Сначала все строки в определенном формате без угла поворота, только название файла, потом второй блок XML где нужно и название файла, и угол поворота. НО! во втором блоке нужны значения строк без дублей (если название файла и угол одной строки совпадает с другой, то объединить) .
Файл приложил.
Страницы: 1
Наверх