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

Страницы: 1 2 3 4 След.
Вставка нового листа в файл XLAM
 
http://www.planetaexcel.ru/forum/index.php?PAGE_NAME=profile_view&UID=55Все ОК.
КОПИРУЕМ
Код
    Workbooks("LTE.xlam").Sheets.Add Type:="c:\temp.xlsx"
    Workbooks("LTE.xlam").Save
ВСТАВЛЯЕМ
Код
    ThisWorkbook.Sheets("Отчет").Copy Before:=ActiveWorkbook.Sheets(ActiveWorkbook.Sheets.Count)
Спасибо вам: Андрей VG, bedvit!!!
Изменено: fed_lviv - 14.01.2016 11:37:12
Вставка нового листа в файл XLAM
 
Ну я и криворукий. Запустил Ваш макрос из надстройки:
Код
    Workbooks("LTE.xlam").Sheets.Add Type:="c:\temp.xlsx"
    Workbooks("LTE.xlam").Save
Все ОК. Новый лист в надстройке есть. Теперь буду пробовать из надстройки в активный файл.
Вставка нового листа в файл XLAM
 
Хотя может и не добавляет, потомучто у меня в настройке, как было 3 листа так и остается после
Код
Workbooks("LTE.xlam").Sheets.Add Type:="c:\temp.xlsx"
Вставка нового листа в файл XLAM
 
Теперь ошибки вроди нет. Теперь пробую из настройки копировать даный лист и вставлять в активный файл. Лист добавляется но он пустой, а на том листе который я делал я имел текст.
Код
Workbooks("LTE.xlam").Worksheets("Лист3").Copy ActiveWorkbook.Sheets(3)
Вставка нового листа в файл XLAM
 
Цитата
Андрей VG написал: В редакторе VBA? Там пункт File/Save LTE.xlam - должен быть.
В меню ексель для смены формата файла
Цитата
Андрей VG написал: Вы уверены, что в вашей надстройке нет листа с именем "Лист1"?
В надстройке? Запускаю файл Книга1.xlsx, делаю в ВБА функцию, запускаю. Функция из файла Книга1.xlsx копирует Лист1 в LTE.xlam на место 3 листа. Как то так.
В надстройке есть 3 листа. 1 используется для хранения некоторых данных.
Изменено: fed_lviv - 14.01.2016 12:06:13
Вставка нового листа в файл XLAM
 
Цитата
Андрей VG написал:
Да, просто скопировать лист в надстройку, только не забыть потом её сохранить (через редактор VBA при активном проекте надстройки).
Ошибка: Метод Copy из класа Worksheet завершен неверно.
Код
Sub assd()
     Workbooks("Книга1.xlsx").Worksheets("Лист1").Copy Workbooks("LTE.xlam").Sheets(3)
End Sub
Вставка нового листа в файл XLAM
 
Цитата
Sanja написал:
Workbooks("sourceBook.xlsx").Worksheets("sourceName").Copy Workbooks("myAddIn.xlam").Sheets(1)
Не активен пункт меню "Сохранить как..."
Вставка нового листа в файл XLAM
 
Всем добрый день. Скорее проблема, не "супер умная", но я не гуру в Екселе. Когда-то сделал надстройку, теперь буду добавлять в надстройку еще одну функцию. Функция запускает форму в которую пользователь вводит некоторые значения, потом идет вычисления и после этого нужно сделать отчет на лист в таблицу. Я хочу шаблон листа сделать в надстройке. То есть шаблон копируется, создается новый лист, потом в нужные места кидаются данные из формы. Подскажите пожалуйста как вставить лист в файл формата xlam, потому что при открытие файла они не видимы, а пункт меню сохранить как... не активен.
Отображение результата запроса к БД (SQLite + ADO)
 
Ура! Если долго мучится то что нибудь получится.
Код
Sub QueryToSQLite()
    Dim driver As String
    Dim provider As String
    Dim pathToDB As String
    Dim query As String
    Dim connection As ADODB.connection
    Dim recordset As ADODB.recordset
    Dim col As Integer
    Dim row As Integer
    
    driver = "SQLite3 ODBC Driver"
    provider = "SQLITEDB"
    pathToDB = "C:\test.db"
    query = "SELECT * FROM electric;"
    Set connection = New ADODB.connection
    
    connection.ConnectionString = "DRIVER=" & driver & ";Database=" & pathToDB & ""
    'connection.ConnectionString = "Provider=" & provider & ";Data Source=" & pathToDB & ""
    connection.ConnectionTimeout = 3
    connection.CommandTimeout = 3
    connection.Open
    
    'connection.Execute ("INSERT INTO electric (amount, finally) VALUES (6666, 0);")
    
    Set recordset = connection.Execute(query)
    For col = 0 To recordset.Fields.Count - 1
        Range("A1").Offset(0, col).Value = recordset.Fields(col).Name
    Next
    Do While Not recordset.EOF
        For col = 0 To recordset.Fields.Count - 1
            Range("A2").Offset(row, col).Value = recordset.Fields(col).Value
        Next
        row = row + 1
        recordset.MoveNext
    Loop
    'Range("A1").Offset(1, 0).CopyFromRecordset recordset
        
    connection.Close
    Set connection = Nothing
    Set recordset = Nothing
End Sub


Теперь остался только OLE DB Provider, он все равно "не реагирует" на изменения.
Отображение результата запроса к БД (SQLite + ADO)
 
А, Вы напрямую в умную таблицу. Хотя все же проблема не в драйвере. Потому что в умную таблицу он хоть текст выводит. А вот моим макросом, того не делает. Драйвер ODBC, я качал с того же сайта.  
Отображение результата запроса к БД (SQLite + ADO)
 
Цитата
Андрей VG написал:
С этим как раз и нет проблем. Сейчас загрузил из тестовой базы - текст прошёл нормально
А можна код макроса посмотреть + ссылку на ODBC драйвер.  
Отображение результата запроса к БД (SQLite + ADO)
 
Пробовал вставлять значение в поле TEXT через макрос:
Потом смотрел через консоль все вставляется
Код
...
  connection.Execute ("INSERT INTO electric (amount, finally) VALUES (6666, 'dfgd');")
 ...

Отображение результата запроса к БД (SQLite + ADO)
 
Цитата
Андрей VG написал: Это скорее всего проблема с ODBC драйвером
Так я в своем макросе пробовал OLE DB Provider, он вообще только название колонок выводит.
Отображение результата запроса к БД (SQLite + ADO)
 
Пробовал делать другую таблицу, проблема не так в ДАТЕ, как в типе TEXT. Если колонка имеет тип TEXT, тогда Excel  выводит пустоту. И не важно какое значени: латиница, кирилица или цифры. Всё трансформируется в пустоту
Изменено: fed_lviv - 30.10.2015 10:07:09
Отображение результата запроса к БД (SQLite + ADO)
 
Спасибо Андрей VG, буду пробовать. Проблема что в SQLite, тип данных только: INTEGER, REAL, TEXT, BLOB, NULL. Дату предлагают сохранять:
Цитата
TEXT as ISO8601 strings ("YYYY-MM-DD HH:MM:SS.SSS").
REAL as Julian day numbers, the number of days since noon in Greenwich on November 24, 4714 B.C. according to the proleptic Gregorian calendar.
INTEGER as Unix Time, the number of seconds since 1970-01-01 00:00:00 UTC.
P.S. К сожалению, так можно только получать данные. А вносить данные в таблицу всеравно нужно через ADO  
Изменено: fed_lviv - 30.10.2015 09:34:59
Отображение результата запроса к БД (SQLite + ADO)
 
Пусть Вас скрин структуры БД не вводит в заблуждение. Путь нормально прописан, в принципе тогда и не было бы названий колонок в файле.
Отображение результата запроса к БД (SQLite + ADO)
 
Файл БД не могу загрузить - ошибка
Отображение результата запроса к БД (SQLite + ADO)
 
Всем добрый день. Делаю макрос, запрос к БД SQLite. Использую Microsoft ActiveX Data Objects 2.8 Library. Пробую два варианта: драйвер ODBC SQLite3 ODBC Driver и OLE DB Provider.
Вариант с драйвером ODBC. Вроде все гуд но почему-то не отображаются данные колонки где записана ДАТА.:


Вариант с OLE DB Provider. Только название колонок таблицы и все:

Код
Sub QueryToSQLite()

    Dim driver As String
    Dim provider As String
    Dim pathToDB As String
    Dim connection As ADODB.connection
    Dim recordset As ADODB.recordset
    Dim query As String
    Dim i As Integer
    
    driver = "SQLite3 ODBC Driver"
    provider = "SQLITEDB"
    pathToDB = "C:\test.db"
    query = "SELECT * FROM electric;"
    Set connection = New ADODB.connection
    
    'connection.ConnectionString = "DRIVER=" & driver & ";Database=" & pathToDB & ";"
    connection.ConnectionString = "Provider=" & provider & ";Data Source=" & pathToDB & ""
    connection.ConnectionTimeout = 3
    connection.CommandTimeout = 3
    connection.Open
    
    connection.Execute ("INSERT INTO electric (amount, finally) VALUES (6666, 0);")
    
    Set recordset = connection.Execute(query)
    For i = 0 To recordset.Fields.Count - 1
        Range("A1").Offset(0, i).Value = recordset.Fields(i).Name
    Next
    Range("A1").Offset(1, 0).CopyFromRecordset recordset
        
    connection.Close
    Set connection = Nothing
    Set recordset = Nothing
    
End Sub




Инициализация глобальных переменных
 
Еще раз большое всем спасибо. Вот что получилось:
КНИГА:
Код
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Save
End Sub
МОДУЛЬ:
Код
Sub MySQLQuery(control As IRibbonControl)
    FormMySQL.Show
End Sub
ФОРМА:
Код
Private Sub ButExecute_Click()
    Const title = "Ðåçóëüòàò çàïèòó"
    Dim table As ListObject
    Dim x As Range
    connection = "ODBC;DRIVER={" & Trim(TxtDriver.text) & "};SERVER=" & Trim(TxtServer.text) & ";DATABASE=" & Trim(TxtDatabase.text) & ";USER=" & Trim(TxtUser.text) & ";PASSWORD=" & Trim(TxtPassword.text) & ";"
        Worksheets.Add
        On Error GoTo Errhandler
        Set table = ActiveSheet.ListObjects.Add(xlSrcExternal, connection, True, xlYes, Range("A2"))
        With table.QueryTable
            .CommandType = xlCmdSql
            .CommandText = TxtQuery.text
            .Refresh False
            .Delete
        End With
        Set x = Range(Cells(1, 1), Cells(1, (Cells(2, Columns.Count).End(xlToLeft).Column)))
        With x
            .Merge
            .HorizontalAlignment = xlCenter
            .Font.Bold = True
            .Value = title
        End With
        Range("A1").AddComment TxtQuery.text
        Range("A1").Comment.Visible = False
    Unload FormMySQL
    Exit Sub
Errhandler:
    Application.DisplayAlerts = False
    ActiveSheet.Delete
    Application.DisplayAlerts = True
    MsgBox "Íà æàëü, òðàïèëàñÿ ïîìèëêà - " & Err & vbNewLine & Err.Description, vbOKOnly, "Ïîìèëêà"
End Sub
Private Sub UserForm_Initialize()
   Set MySheet = Workbooks("VBA.xlam").Worksheets("Ëèñò1")
    TxtDriver.text = MySheet.Range("B1")
    TxtServer.text = MySheet.Range("B2")
    TxtDatabase.text = MySheet.Range("B3")
    TxtUser.text = MySheet.Range("B4")
    TxtPassword.text = MySheet.Range("B5")
    TxtQuery.text = MySheet.Range("B6")
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
    Set MySheet = Workbooks("VBA.xlam").Worksheets("Ëèñò1")
    MySheet.Range("B1") = Trim(TxtDriver.text)
    MySheet.Range("B2") = Trim(TxtServer.text)
    MySheet.Range("B3") = Trim(TxtDatabase.text)
    MySheet.Range("B4") = Trim(TxtUser.text)
    MySheet.Range("B5") = Trim(TxtPassword.text)
    MySheet.Range("B6") = Trim(TxtQuery.text)
End Sub
Кстати надстройку учился делать по Вашему сайту, The_Prist.
Инициализация глобальных переменных
 
Всем спасибо за советы. The Prist, была такая мысль, но почему то засомневался. Просто я хочу сделать надстройук (xlam), и не знаю можна ли в ней сохранять/изменять на листе в ячейках значения.
Изменено: fed_lviv - 24.10.2015 12:25:50
Инициализация глобальных переменных
 
Опа  8-0 Если запускаю через: Разработчик-Макросы-Выполнить - все гуд. Это конечно хорошо, проблемы нет, но все же интересно, а почему когда запускаю из ВБА не происходит инициализация?  
Изменено: fed_lviv - 23.10.2015 18:59:31
Инициализация глобальных переменных
 
Извиняюсь, немного плохо описал проблему. Если закрыть окно, то при следующем запуске все поля пустые.
Инициализация глобальных переменных
 
Всем добрый день! Делаю окошко для отправки запросов к БД. Все гуд, решил сделать глобальные переменные чтобы пользователь один раз вводил свои установки (пароль, драйвер,..) а програма до закрытия ексель-файла их запоминала и тут вылезла проблемка.
Когда запускаю диалоговое окно через процедуру, глобальные переменные не прописвываються, а когда запускаю "напрямую" из ВБА все нормально. Подскажите пожалуйста что я делаю не правильно:

Инициализация переменных:
Код
Private Sub Workbook_Open()
    driverFormMySQL = "MySQL ODBC 5.3 Unicode Driver"
    ipFormMySQL = "127.0.0.1"
    databaseFormMySQL = "database1"
    userFormMySQL = "root"
    passwordFormMySQL = "1111"
    queryFormMySQL = ""
End Sub

Module1: (Обявление переменных и процедура вызова окна)
Код
Option Explicit
Public driverFormMySQL As String
Public ipFormMySQL As String
Public databaseFormMySQL As String
Public userFormMySQL As String
Public passwordFormMySQL As String
Public queryFormMySQL As String

Sub Start()
    FormMySQL.Show
End Sub



FormMySQL:
Код
Private Sub ButExecute_Click()
    Const title = "Ðåçóëüòàò çàïèòó"
    connection = "ODBC;DRIVER={" & Trim(TxtDriver.text) & "};SERVER=" & Trim(TxtIP.text) & ";DATABASE=" & Trim(TxtDatabase.text) & ";USER=" & Trim(TxtUser.text) & ";PASSWORD=" & Trim(TxtPassword.text) & ";"
    Dim table As ListObject
    Dim x As Range
        Worksheets.Add
        On Error GoTo Errhandler
        Set table = ActiveSheet.ListObjects.Add(xlSrcExternal, connection, True, xlYes, Range("A2"))
        With table.QueryTable
            .CommandType = xlCmdSql
            .CommandText = TxtQuery.text
            .Refresh False
            .Delete
        End With
        Set x = Range(Cells(1, 1), Cells(1, (Cells(2, Columns.Count).End(xlToLeft).Column)))
        With x
            .Merge
            .HorizontalAlignment = xlCenter
            .Font.Bold = True
            .Value = title
        End With
        Range("A1").AddComment TxtQuery.text
        Range("A1").Comment.Visible = False
    Unload FormMySQL
    Exit Sub
Errhandler:
    Application.DisplayAlerts = False
    ActiveSheet.Delete
    Application.DisplayAlerts = True
    MsgBox "Íà æàëü, òðàïèëàñÿ ïîìèëêà - " & Err & vbNewLine & Err.Description, vbOKOnly, "Ïîìèëêà"
End Sub
Private Sub UserForm_Initialize()
    TxtDriver.text = driverFormMySQL
    TxtIP.text = ipFormMySQL
    TxtDatabase.text = databaseFormMySQL
    TxtUser.text = userFormMySQL
    TxtPassword.text = passwordFormMySQL
    TxtQuery.text = queryFormMySQL
End Sub

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
    driverFormMySQL = Trim(TxtDriver.text)
    ipFormMySQL = Trim(TxtIP.text)
    databaseFormMySQL = Trim(TxtDatabase.text)
    userFormMySQL = Trim(TxtUser.text)
    passwordFormMySQL = Trim(TxtPassword.text)
    queryFormMySQL = Trim(TxtQuery.text)
End Sub
Изменено: fed_lviv - 23.10.2015 18:38:34
VBA импорт данных из MySQl
 
Цитата
Андрей VG написал:
"Что вы и пальцы за меня загибать будете?"
Спасибо!  :oops:
VBA импорт данных из MySQl
 
Ура, сделал. Разделил на два макроса. Если что не так, буду рад услышать:
Код
Sub Query1()
    Const title = "Все данные из таблицы"
    Const query = "SELECT * FROM table1;"
    Call CreateTableFromMySQL(title, query)
End Sub

Код
Public Sub CreateTableFromMySQL(title As String, query As String)
    Const driver = "{MySQL ODBC 5.2 Unicode Driver}"
    Const server = "192.168.1.4"
    Const database = "lte_energo"
    Const user = "wges"
    Const password = "1111"
    Const connection = "ODBC;DRIVER=" & driver & ";SERVER=" & server & ";DATABASE=" & database & ";USER=" & user & ";PASSWORD=" & password & ";"
    Dim table As ListObject
    Dim x As range
        Worksheets.Add
        Set table = ActiveSheet.ListObjects.Add(xlSrcExternal, connection, True, xlYes, range("A2"))
        With table.QueryTable
            .CommandType = xlCmdSql
            .CommandText = query
            .Refresh False
            .Delete
        End With
        Set x = range(Cells(1, 1), Cells(1, (Cells(2, Columns.Count).End(xlToLeft).Column)))
        With x
            .Merge
            .HorizontalAlignment = xlCenter
            .Font.Bold = True
            .Value = title
        End With
        range("A1").AddComment query
End Sub

P.S. Подскажите, пожалуйста, можна ли в комментариях отображать запрос SQL с подсветкой синтаксиса. То есть, можна где-то найти готовый макрос для подсветки синтаксиса SQL?
VBA импорт данных из MySQl
 
Андрей VG, большое Вам спасибо. Немного подкорректирую под себя и результат выкину на форум, может таким неопытным, как я пригодится.
VBA импорт данных из MySQl
 
Файл испортить не страшно, страшно что через какое-то время баг может появится. Мне нужно просто умная таблица, а вот эти все настройки неизвестно что настраивают:
Код
.RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .BackgroundQuery = True
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .PreserveColumnInfo = True
        .Refresh BackgroundQuery:=False

VBA импорт данных из MySQl
 
Вот, еще такое сделал но опять много неизвестных значений:
Код
    Dim qt As QueryTable
    Set qt = ActiveSheet.ListObjects.Add(SourceType:=XlListObjectSourceType.xlSrcQuery, Source:=recordset, Destination:=ActiveSheet.Range("A2")).QueryTable
    With qt
        RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .BackgroundQuery = True
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .PreserveColumnInfo = True
        .Refresh BackgroundQuery:=False
    End With

Изменено: fed_lviv - 21.10.2015 15:47:21
VBA импорт данных из MySQl
 
Пробовал, результат - чуть больше кода чем Вы написали. Другое дело что из этого
Код
ActiveSheet.ListObjects.Add(xlSrcRange, Range("$A$1:$H$10"), , xlYes).Name = _
        "Таблица1"

все что я понимаю это диапазон, все остальные значения я не знаю что означают, боюсь что-то не то сделать.
P.S. Да и диапазон, как правильно обозначить с 0 до recordset.Fields.Count - 1, а как с буковками?  :oops:
Изменено: fed_lviv - 21.10.2015 15:45:08
VBA импорт данных из MySQl
 
Всем добрый день. Делаю макрос для получения данных из БД. Разбил задачу на несколько пунктов:
1. Соединение с БД.
2. Запрос к БД
3. Вставка данных из результата запроса:
        3а Создания нового листа
        3б Вставка данных на новый лист
        3в Сделать из результата "умную таблицу"
4. Закрыть соединение с БД.
И вот пункт 3в не могу осилить. Подскажите, пожалуйста как весь этот диапазон преобразовать в умную таблицу.
Код
Sub DataFromMySQL()
    Const driver = "{MySQL ODBC 5.2 Unicode Driver}"
    Const server = "ХХХХ"
    Const database = "ХХХХ"
    Const user = "ХХХХ"
    Const password = "ХХХХ"
    Const query = "SELECT address , SUM(motors_lte.power) FROM objects JOIN motors_lte USING(idObject) GROUP BY address"
    Set connection = CreateObject("ADODB.Connection")
    Set recordset = CreateObject("ADODB.Recordset")
    connection.Open "Driver=" & driver & ";Server=" & server & ";Database=" & database & ";User=" & user & ";Password=" & password & ";"
    recordset.Open query, connection
    Sheets.Add.Name = "Лист " & Worksheets.Count + 1 & " sql"
    With recordset
        For i = 0 To recordset.Fields.Count - 1
            ActiveCell.Offset(0, i).Value = recordset.Fields(i).Name
        Next
        ActiveCell.Offset(1, 0).CopyFromRecordset recordset
    End With
    recordset.Close
    Set recordset = Nothing
    connection.Close
    Set connection = Nothing
End Sub



Изменено: fed_lviv - 21.10.2015 14:59:10
Страницы: 1 2 3 4 След.
Наверх