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

Страницы: 1
указание диапазона из текстовой переменной, Range(x), где x = "cells(1, 1)"
 
Добрый день!
столкнулся с проблемой в чужом коде.

есть переменная, x = "A1", а дальше идет указание диапазона в формате Range(x)
Изменяю x = "cells(1, 1)" и Range(x) перестает работать.

Подскажите, как заставить Range(x) начать работать? Может какие-то дополнительные функции есть Range(func(x))?

Буду очень признателен.
Отключить уведомления об опечатке в формуле, В формуле обнаружена опечатка. Мы предлагаем следующее исправление:
 
Добрый день!

Подскажите пожалуйста, как в Excel отключить уведомления об опечатке в формуле. Чтобы он автоматом заменял
Изменено: CrazyRabbit - 18.07.2020 12:20:10
SQL открывает книгу, вместо того, чтобы подключиться к ней, Файл работает на удаленном рабочем столе
 
Добрый день, коллеги!
У меня есть большой Excel файл, в котором огромное количество макросов. На локальном компьютере все работает идеально. Когда его перенесли на удаленный сервер, он там 2 месяца работал нормально, но сейчас появилась проблема, к которой я не знаю как подступиться.
В макросе есть такая строчка подключения SQL к файлу данных:
Код
con.Open ("Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & ThisWorkbook.FullName & "; Extended Properties=""Excel 12.0;HDR=No;IMEX=1""")
Если раньше, на переменную con задавалась книга как объект, сейчас на удаленном сервере, он повторно открывает файл (в режиме чтения соответственно).
Прошу подсказку, где можно искать причину изменения поведения кода?


Более полный кусок кода:
Код
    Set con = CreateObject("ADODB.Connection")
    Set rst = CreateObject("ADODB.Recordset")
        con.Open ("Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & ThisWorkbook.FullName & "; Extended Properties=""Excel 12.0;HDR=No;IMEX=1""")
            
            rst.Open "(Select F3 as ДатаОпер, F2 as ДатаЗап, F4 as Факт, 0 as План FROM [Факт$] WHERE F1 = '" & lc & "')" & _
            "union all (Select t1.ДатаОпер, t1.ДатаЗап, 0 as Факт, t1.План from " & _
            "(Select F1 as ЛС, F3 as Согл, F4 as ДатаОпер, F2 as ДатаЗап, F5 as План FROM [План$] WHERE F6 ='1' and F1 = '" & lc & "') t1 " & _
            "INNER JOIN (Select F1 as ЛС, F3 as Согл, F4 as ДатаОпер, F5 as План, MAX(F2) as ДатаЗап FROM [План$] WHERE F1 = '" & lc & "' GROUP BY F1, F3, F4, F5) t2 " & _
            "ON t1.ЛС=t2.ЛС AND t1.ДатаЗап=t2.ДатаЗап and t1.Согл=t2.Согл and t1.План=t2.План and t1.ДатаОпер=t2.ДатаОпер) " & _
            "order by ДатаОпер Desc", con

            plfa.Cells(2, 1).CopyFromRecordset rst
        rst.Close
        con.Close
Требуется Аналитик 80 тыс.руб, Постоянная работа.
 
Открыта вакансия в должности Аналитика.
Требования:
Высокие знания Excel
Высокие знания VBA
Средние знания SQL

Знание Power Query, Power Pivot и Power BI будет преимуществом.

Условия
Адрес: МО, г. Химки. Юбилейный проспект
Оклад 80 000 руб. (на руки). Схема серая
график работы: пн-пт, время с 8:00 до 17:00 или с 11:00 до 20:00. Изо дня в день может меняться.

Подробнее в личку.
SQL в Power Pivot, Синтаксис
 
Добрый день!

При работе в Power Pivot хочу вытянуть данные из Access. Предлагается 2 варианта, вытянуть всю таблицу или через SQL-запрос. Лопатил несколько часов интернет, но так и не нашел, как пишутся там запросы. Единственное, что нашел, так это странный запрос из SQL-server.

Если у кого есть, выложите сюда хотя бы простенький рабочий запрос. Что-нибудь вроде Select [Продажи].[Фамилия] from [Продажи] Where  [Цена]> 10
При перебросе большого объема данных - ошибка, Выдает ошибку в случайных местах
 
Добрый день!
Есть на роутере жесткий диск (далее удаленный диск).
У роутеру подключено 10 человек.
Процесс: запускается макрос, который перебрасывает данные  на удаленный диск в Access (100 Мб где-то) и обратно в Excel на локальном компьютере (синхронизация данных). Код работает 5-10 минут.
Столкнулся с проблемой: периодически макрос выдает ошибку на разных строках. Жму Debug и продолжаю макрос и он удачно выполняется. Подскажите, как сделать так чтобы макрос не прерывался. Эта ошибка вылетает в 70% случаев синхронизаций. Иногда 2 раза за 1 выполнение.
Пробовал ему устанавливать перерывы на 10 секунд - не помогает.
Буду рад любой идее.

Если кому интересно то вот код:
Код
Sub Синхронизатор()
ThisWorkbook.Save
    If FolderExists("\\keenetic_viva\DEZ-Disk") Then
                Application.ScreenUpdating = False
                Application.Calculation = xlCalculationManual
                Application.EnableEvents = False
                Application.DisplayStatusBar = False
                Application.DisplayAlerts = False
    Dim bazname As String
    Dim ws As Worksheet, k As Integer
    Dim ws2 As Worksheet: Set ws2 = ThisWorkbook.Sheets("Форма_обновления")
    Dim wss As Worksheet
    Dim Cn As Object, s As String
    Dim i As Long, adr As String
    k = 1
        For Each wss In ThisWorkbook.Worksheets
            Application.Wait Now + TimeSerial(0, 0, k)
            s = IIf(wss.Name = "Согл_статус", "", "and t1.[л/с] = t2.[л/с]")
            bazname = wss.Name
                Set ws = ThisWorkbook.Sheets(bazname)
                i = ws.Cells(Rows.Count, 1).End(xlUp).Row
                If bazname <> "Адрес" And bazname <> "Долг_последний" And bazname <> "ЖДСправка" Then
                    If Len(Dir("\\keenetic_viva\DEZ-Disk\01Аналитика\1.2 база данных\1.2.10 Центральная база\" & bazname & ".accdb")) Then
                    
                        Call база(bazname)
                        Set con = CreateObject("ADODB.Connection")
                        Set rst = CreateObject("ADODB.Recordset")
                        con.Open ("Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & ThisWorkbook.FullName & "; Extended Properties=""Excel 12.0;HDR=Yes;IMEX=1""")
                        If ws2.Cells(1, 1) = "л/с" Then
                                rst.Open "Select t1.* From " & _
                                "(SELECT * FROM [Форма_обновления$]) t1 " & _
                                "Left join (SELECT * FROM [" & bazname & "$]) t2 on t1.[Идентификатор] = t2.[Идентификатор] " & s & _
                                "Where t2.[Идентификатор] is null and t1.[л/с] is not null", con
                                ws.Cells(i + 1, 1).CopyFromRecordset rst
                            rst.Close
                                rst.Open "Select t1.* From " & _
                                "(SELECT * FROM [" & bazname & "$]) t1 " & _
                                "Left join (SELECT * FROM [Форма_обновления$]) t2 on t1.[Идентификатор] = t2.[Идентификатор] " & s & _
                                "Where t2.[Идентификатор] is null and t1.[л/с] is not null", con
                        Else
                                rst.Open "Select t1.* From " & _
                                "(SELECT * FROM [Форма_обновления$]) t1 " & _
                                "Left join (SELECT * FROM [" & bazname & "$]) t2 on t1.[Идентификатор] = t2.[Идентификатор] " & s & _
                                "Where t2.[Идентификатор] is null", con
                                ws.Cells(i + 1, 1).CopyFromRecordset rst
                            rst.Close
                                rst.Open "Select t1.* From " & _
                                "(SELECT * FROM [" & bazname & "$]) t1 " & _
                                "Left join (SELECT * FROM [Форма_обновления$]) t2 on t1.[Идентификатор] = t2.[Идентификатор] " & s & _
                                "Where t2.[Идентификатор] is null", con
                        
                        
                        End If
                        Range(ws2.Cells(2, 1), ws2.Cells(ws2.Cells(Rows.Count, 1).End(xlUp).Row, ws2.Cells(1, ws2.Columns.Count).End(xlToLeft).Column)).Clear
                        ws2.Cells(2, 1).CopyFromRecordset rst
                        rst.Close
                        con.Close
                        Call InsertTotable(bazname)
                    End If
                Else
                    If bazname = "Долг_последний" Or bazname = "ЖДСправка" Then
                        Call база(bazname)
                        Set con = CreateObject("ADODB.Connection")
                        Set rst = CreateObject("ADODB.Recordset")
                        con.Open ("Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & ThisWorkbook.FullName & "; Extended Properties=""Excel 12.0;HDR=Yes;IMEX=1""")
                            rst.Open "(SELECT * FROM [Форма_обновления$])", con
                            wss.Cells(2, 1).CopyFromRecordset rst
                        rst.Close
                        con.Close
                    Else
                        If bazname = "Адрес" Then
                            i = ws.Cells(Rows.Count, 1).End(xlUp).Row
                            wss.Rows("2:" & i).ClearContents
                            adr = "\\keenetic_viva\DEZ-Disk\01Аналитика\1.2 база данных\1.2.10 Центральная база\Адрес.xlsb"
                            Set con = CreateObject("ADODB.Connection")
                            Set rst = CreateObject("ADODB.Recordset")
                            con.Open ("Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & adr & "; Extended Properties=""Excel 12.0;HDR=Yes;IMEX=1""")
                                rst.Open "(SELECT * FROM [Адрес$])", con
                                wss.Cells(2, 1).CopyFromRecordset rst
                            rst.Close
                            con.Close
                        End If
                    End If
                End If
        Next wss
                Application.ScreenUpdating = True
                Application.Calculation = xlCalculationAutomatic
                Application.EnableEvents = True
                Application.DisplayStatusBar = True
                Application.DisplayAlerts = True
                MsgBox "Синхронизация завершена"
    Else
        MsgBox "Не удалось установить соединение с диском"
    End If
End Sub
Sub база(bazname As String)
Dim con As ADODB.connection
Dim rst As ADODB.Recordset
Dim obst As Worksheet: Set obst = ThisWorkbook.Sheets("Форма_обновления")
Dim col As Integer, fulnam As String, Connect As String, Source As String
    fulnam = "\\keenetic_viva\DEZ-Disk\01Аналитика\1.2 база данных\1.2.10 Центральная база\" & bazname & ".accdb"
    Set con = New ADODB.connection
    obst.Cells.Clear
    con.Open connectionString:="Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & fulnam & ";"
    
        Set rst = New ADODB.Recordset
            rst.Open Source:="SELECT * FROM [" & bazname & "]", ActiveConnection:=con
            
            For col = 0 To rst.Fields.Count - 1
                obst.Range("A1").Offset(0, col).Value = rst.Fields(col).Name
            Next
            obst.Cells(2, 1).CopyFromRecordset rst
        Set rst = Nothing
    con.Close
    Set con = Nothing
End Sub

Sub asdf()
    If FolderExists("\\keenetic_viva\DEZ-Disk") Then
        x = 1
    Else
        x = 2
    End If
End Sub
Function FolderExists(ByRef path As String) As Boolean
   On Error Resume Next
   FolderExists = GetAttr(path)
End Function
Sub InsertTotable(bazname As String)
    Const adOpenStatic = 3
    Const adOpenKeyset = 1
    Const adLockOptimistic = 3
    Const adLockReadOnly = 1
    Dim sCon As String, sSql As String
    Dim Cn As Object, q As Object
    Dim Sh As Worksheet, rs As Object
    Set Sh = ThisWorkbook.Sheets("Форма_обновления")
    Dim irow As Long: irow = Sh.Cells(Rows.Count, 1).End(xlUp).Row
    If irow >= 2 Then
        Dim lColumnsCnt As Integer: lColumnsCnt = Sh.Cells(1, Sh.Columns.Count).End(xlToLeft).Column
        
        
        rx = Sh.Range(Sh.Cells(2, 1), Sh.Cells(irow, lColumnsCnt))
        Set Cn = CreateObject("ADODB.Connection")

        Cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=\\keenetic_viva\DEZ-Disk\01Аналитика\1.2 база данных\1.2.10 Центральная база\" & bazname & ".accdb"
        If Cn.State <> 1 Then
            Exit Sub
        End If
        Set rs = CreateObject("ADODB.Recordset")
        rs.Open "SELECT [" & bazname & "].* FROM [" & bazname & "]", Cn, adOpenKeyset, adLockOptimistic
        
        Set q = Sh.Rows("1:1").Find(What:="Идентификатор", LookAt:=xlWhole)

        If Not q Is Nothing Then
            For i = 1 To UBound(rx, 2)
                If Sh.Cells(1, i) <> "Дата соглашения прописью" And Sh.Cells(1, i) <> "Дата первоначального взноса" Then
                    If Left(Sh.Cells(1, i), 4) = "Дата" Or Left(Sh.Cells(1, i), 5) = "Время" Then
                        Sh.Columns(i).TextToColumns Destination:=Sh.Cells(1, i)
                    End If
                End If
            Next i
On Error GoTo 100
            For n = 1 To UBound(rx)
                If rx(n, 1) <> "" Then
                    rs.AddNew
                    For i = 1 To UBound(rx, 2)
                        If rx(n, q.Column) <> "" Then
                            If Sh.Cells(1, i) = "Дата соглашения прописью" Or Sh.Cells(1, i) = "Дата первоначального взноса" Then
                                rs(i - 1) = rx(n, i)
                            Else
                                Select Case Left(Sh.Cells(1, i), 4)
                                Case "Дата", "Врем"
                                    rs(i - 1) = CDate(rx(n, i))
                                Case Else
                                    rs(i - 1) = rx(n, i)
200
                                End Select
                            End If
                        End If
                    Next
                End If
            Next
        End If
        rs.Update
        rs.Close
        Cn.Close
        Set rs = Nothing
        Set Cn = Nothing
    End If
Exit Sub
100
rs(i - 1) = CCur(rx(n, i))
GoTo 200
End Sub
Изменено: CrazyRabbit - 21.02.2018 12:48:04
ADO SQL INSERT INTO в другой Excel, Вставить данные из текущего файла в другой файл
 
Добрый день, коллеги!
Столкнулся с проблемой добавления данных в другой файл средствами ADO.

Описание задачи: Есть текущий файл с "лист1". средствами VBA ADO добавляются данные в последнюю строку. Необходимо чтобы эти данные добавлялись и в другую книгу Excel (C:\Книга2.xlsb) на "лист2" через SQL, где есть точно такая же по структуре таблица.

На текущий момент имею код, который VBA пропускает, но данные не перемещает.
Код
Sub dobavit()
   adress2 = "C:\Книга2.xlsb" 'адрес новой книги
   Set rst = CreateObject("ADODB.Recordset")
      rst = "INSERT INTO [Лист2$] IN '" & adress2 & "' 'Excel 12.0;' SELECT * FROM Лист1"       'из текущего листа1 в книгу2.лист2
End Sub

В интернете нашел подобные решения, но у меня они не работают для вставки в Excel
вставка в Excel:
https://support.microsoft.com/ru-ru/help/295646/how-to-transfer-data-from-ado-data-source-to-excel-w...
https://msdn.microsoft.com/en-us/library/office/ff834799.aspx

вставка в Access:
http://www.planetaexcel.ru/forum/index.php?PAGE_NAME=message&FID=1&TID=76831&amp...

Прошу помощи.
Ссылка на код VBA
 
Здравствуйте.
Мне в руки попал файл, в котором есть кнопка, которая открывает код VBA. Сделать аналогичную у меня не получается.
Прошу пояснить как делаются такие гиперссылки.
Заранее спасибо.
Открытие bat файла
 
Добрый день!
У меня есть макрос, который запускает bat файл с помощью строки
Код
TestValue = Shell("C:\pdf2txt\YourPage.bat", 1)
Но, данный код периодически срабатывает, а бывает и не срабатывает. Хотелось бы получить код, который срабатывает всегда.

Пробовал
Код
CreateObject("WScript.Shell").Run "C:\pdf2txt\YourPage.bat"
, но не работает.

Заранее спасибо.
Запуск макроса с переменной из другой книги
 
Здравствуйте коллеги.
Требуется помощь, т.к. нигде данной инфы найти не могу.
Есть в закрытой книге макрос
Код
sub БДданные(x, y)
...
end sub
Из другой книги нужно запустить данный макрос с заданными переменными

Обычный вариант запуска не работает.
Код
Workbooks("C:\Книга2.xlsm").Open
Application.Run "'Книга2.xlsm'!Module1.БДданные(x, y)"
Заранее Спасибо!
Открыть Access средствами VBA Excel
 
Добрый день!
Есть много Excel.csv файлов, которые пополняются каждый день.
Я хочу создать Excel.xlsb, который объединит новые файлы, откроет Access. Тот при открытии вытянет из Excel.xlsb все данные. Далее Access закрывается.

Проблемы в открытии Access файла. Нашел код:
Код
Dim db As DAO.tabledef
Dim DBE As New DAO.DBEngine
Set db = DBE.OpenDatabase("Y:\adress\база.mdb")
Но для этого надо подключить библиотеку "Microsoft DAO 3.6 Object Library". Но у меня она не подключается, пишет: "Error in loading dll"
Можно ли каким то другим образом открыть Access или просто влить туда данные?

Заранее спасибо
Microsoft Office 2010.
Новые надстройки, Новые примочки в надстройках
 
Добрый день!
Хочу сделать надстройку под себя с максимальным количеством полезных примочек.
Прошу поделиться надстройками с открытым кодом.
Корректировка фильтра через VBA, Убрать лишнюю запись из фильтра
 
Добрый день!
Уважаемые профи по VBA, не смог найти ответ на свой вопрос с помощью интернета, поэтому все таки решил задать вопрос через форум.

Допустим имеется столбец "А" с множеством фамилий. Подскажите с помощью какой команды VBA можно указать, что бы из фильтра исключались, например фамилии "Иванов" и "Петров"

Заранее благодарю.
Страницы: 1
Наверх