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

Страницы: 1
Копирование рисунков в Excel с сохранением пропорций
 
Всем привет!

Подскажите, кто сталкивался со следующей ситуацией и как ее решить.
В книге Excel есть лист, на котором есть рисунок созданный с помощью Camera (функции Excel). Рисунок определенного размера (ширина и высота).
Есть необходимость перемещения данного листа в другую книгу.
При копировании листа теряются пропорции. Как правильно скопировать лист, чтоб абсолютно все рисунки с пропорциями сохранились? В моем случае на листе около 20 рисунков и все пропорции "слетают".

Выложить файл к сожалению не могу. Проверить это не сложно. В Excel выделить диаапазон с помощью Camera, а потом скопировать этот лист с рисунком в другую книгу.

Спасибо за ответы.
SQL запрос из EXCEL (выбор дат)
 
Добрый день!

Подскажите, что не так в запросе, а именно в BETWEEN и AND ?
Выдает ошибку "Дата содержит ошибку в выражении date BETWEEN #" & d1 & "# AND #" & d2 & "# "
Код
  d1 = Format("01" & "." & Month(Right(Range("B5").Value, 10)) & "." & Year(Right(Range("B5").Value, 10)), "dd/mm/yyyy")
  d2 = Format(Right(Range("B5").Value, 10), "dd/mm/yyyy")  

  Set Conn = CreateObject("ADODB.Connection")
  Set rs = CreateObject("ADODB.Recordset")
    
  sconnect = "Provider=MSDASQL.1;DSN=Excel Files;DBQ=" & Report & ";HDR=Yes';"
  Conn.Open sconnect
  sSQLString = "SELECT date, Variable2, Variable3, Variable3 [выборка$]" & _
  "WHERE date BETWEEN #" & d1 & "# AND #" & d2 & "# "

  rs.Open sSQLString, Conn
  Set QT1 = Worksheets("1").QueryTables.Add(rs, Range("A1"))
  QT1.Refresh
  
  rs.Close
  Conn.Close
Автофильтр дат VBA
 
Всем привет!

Подскажите что может быть неверно при установке автофильтра для столбца с датами?
Имеются следующие данные:
Код
Dim Year As Long, Month As Long, Date_oper As Long
Dim Period As Date

Period = Format(Date_oper & "." & Month & "." & Year, "dd.mm.yyyy")
                    If IsEmpty(Date_oper) = False Then
                        ActiveSheet.Range("Фильтр").AutoFilter Field:=3, Criteria1:=Period
                    Else
                        ActiveSheet.Range("Фильтр").AutoFilter Field:=3
                    End If
Фильтрует, а выборки по фильтру нет, соответственно что-то не так с форматом Period мне кажется.
Кто подскажет в чем может быть проблема?
Максимальное значение даты в столбце VBA
 
Всем привет!
Помогите решить задачу по нахождению максимального значения даты в столбце с помощью кода.
Проблема заключается в том, что использовать функцию MAX не предоставляется возможным, т.к. в этом столбце есть текстовые значения.
Формат даты если подвести курсор к значениям - общий.
Нашел на зарубежных форумах код. Перебирает значения, формирует массив дат, и потом там находит максимальное значение.
Но мне выдает 0. Подскажите почему?
Буду признателен за помощь.
Код
Sub test()
Dim Date_Array() As Date, i As Long, j As Long
With Sheets("Отчет")
    For i = 12 To 3479
        If IsDate(.Range("C" & i).Value) Then
            j = j + 1
            ReDim Preserve Date_Array(1 To j)
            Date_Array(j) = .Range("C" & i).Value
        End If
    Next
End With
MsgBox IIf(j = 0, "No date", Application.Max(Date_Array))
End Sub
Выборка уникальных значений из указанного диапазона VBA
 
Добрый день!

Помогите решить следующую задачу.
Мне нужно из диапазона выбрать только уникальные значения и вставить полученный результат в определенную область на другом листе.
Код срабатывает без ошибки. Но результат нулевой, пустые ячейки.
Заранее спасибо за ответы.
Код
Sub Extra_Fields()
    Dim x, avArr, li As Long
    Dim avVals
    Dim rVals As Range, rResultCell As Range
    Dim i As Long
    
    Application.Calculation = xlCalculationManual
    Application.ScreenUpdating = False
    Application.EnableEvents = False
    
    i = ThisWorkbook.Worksheets("Отчет").Cells(Rows.Count, 6).End(xlUp).Row
    On Error Resume Next
    Set rVals = Worksheets("Отчет").Range(Cells(12, 6), Cells(i, 6))
    Set rVals = Intersect(rVals, rVals.Parent.UsedRange)
    avVals = rVals.Value
    Set rResultCell = Worksheets("Test").Range(Cells(1, 1), Cells(1, 1))
    ReDim avArr(1 To Rows.Count, 1 To 1)
    With New Collection
        On Error Resume Next
        For Each x In avVals
            If Len(CStr(x)) Then
                .Add x, CStr(x)
                If Err = 0 Then
                    li = li + 1
                    avArr(li, 1) = x
                Else
                    Err.Clear
                End If
            End If
        Next
    End With
    If li Then rResultCell.Cells(1, 1).Resize(li).Value = avArr
    
    Application.Calculation = xlCalculationAutomatic
    Application.ScreenUpdating = True
    Application.EnableEvents = True
    
End Sub
Изменено: Limos - 18.08.2017 13:56:36
Поиск максимальной даты в диапазоне (VBA)
 
Добрый день, форумчане.

Подскажите как корректно прописать код для поиска максимальной даты в диапазоне с помощью кода VBA ?
Код
Sub Check()

Dim iMax As Long

iMax = WorksheetFunction.Max(Worksheets("Отчет").Range(Cells(27, 3), Cells(29, 3)))
MsgBox (iMax)

End Sub
Пытался способом выше, но ничего не выходит, в иксель есть еще функция МАКСА, но нигде не могу найти как ее применить в VBA.
Выдает ошибку 1004.

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

У меня в коде ошибка 13 (тип пропущен), кто подскажет где именно и из-за чего?
Дебагом просмотрел, лист находит, а вот как начинает источник обновлять, то ошибка.
Код
Sub Refresh_SourceData_PivotTables()

Dim sh As Worksheet, DataArea As Range
Dim lLastRowPT41 As Long, lLastRowPT42 As Long

For Each sh In ThisWorkbook.Worksheets
    If sh.Name Like "Реестр подключ*" Then ' перебор листов для поиска по условию
        Set DataArea = sh.Range("A1").CurrentRegion
        Exit For
    End If
Next sh
            Worksheets("Свод").PivotTables("СводнаяТаблица3").ChangePivotCache ActiveWorkbook. _
            PivotCaches.Create(SourceType:=xlDatabase, SourceData:=DataArea, _
            Version:=xlPivotTableVersion14) ' обновление источника сводной таблицы
            
            Worksheets("Свод").PivotTables("СводнаяТаблица10").ChangePivotCache ActiveWorkbook. _
            PivotCaches.Create(SourceType:=xlDatabase, SourceData:=DataArea, _
            Version:=xlPivotTableVersion14) ' обновление источника сводной таблицы

lLastRowPT41 = Cells(Rows.Count, 1).End(xlUp).Row
lLastRowPT42 = Cells(Rows.Count, 2).End(xlUp).Row

MsgBox (lLastRowPT41 & "  " & lLastRowPT42)

End Sub
Обновление источника сводной таблицы VBA
 
Добрый день!

Подскажите пожалуйста что неправильно в коде на обновление источника сводной таблицы?
Выдает ошибку Run-time error '91' Object variable or With block variable not set
Что может быть не так?
Код
Sub Refresh_SourceData_PivotTables()
 
    Dim sh As Worksheet
    Dim DataArea As Range
     
    For Each sh In ThisWorkbook.Worksheets
        If sh.Name Like "Реестр RSh*" Then
            MsgBox sh.Index
            Range("A1").Select
            Selection.CurrentRegion.Select
            DataArea = "Sheet" & sh.Index & "!R1C1:R" & Selection.Rows.Count & "C" & Selection.Columns.Count
            MsgBox DataArea
             
            Exit For
        End If
    Next sh
     
    Worksheets("Свод").PivotTables("СводнаяТаблица4").ChangePivotCache ActiveWorkbook. _
            PivotCaches.Create(SourceType:=xlDatabase, SourceData:=DataArea, _
            Version:=xlPivotTableVersion14)
 
End Sub
Получение индекса листа при неполном указании названия листа VBA
 
Добрый день!

Подскажите как правильно получить следующую информацию.
Нужно получить индекс листа при неполном указании названия этого листа. Есть следующий код.
Код
MsgBox Worksheets("Лист_номер*").Index
Звездочка означает, что неважно какие символы будут дальше.
Как это правильно сделать?

Заранее спасибо.
ПОИСКПОЗ в VBA по двум критериям
 
Добрый день, форумчане.
Подскажите как решить одну задачку в коде VBA.
В Икселе есть такая формула поиска строки по двум критериям: {ПОИСКПОЗ(значение1&значение2;массив1&массив2;0)} - функция массива, считает все хорошо, находит нужную строку
Пытаюсь реализовать ее в VBA:
Код
Find4 = WorksheetFunction.Match(Find2 & Find3, Sheets("Куда").Range("B:B") & Sheets("Куда").Range("C:C"), 0)
Выдает ошибку Type mismatch (Error 13) - я так понимаю не найдено совпадений, из-за того что в случае Икселя, это формула массива, а тут нет.

Кто подскажет как исправить ошибку и реализовать поиск по двум критериям в функции ПОИСКПОЗ в VBA ?

Заранее всем спасибо!
Замена значения в другом закрытом файле Excel
 
Добрый день!

Есть следующий код приведенный ниже.
Он прекрасно работает в самом этом файле. Находит и заменяет нужное значение.
Кто подскажет как правильно обратиться из другой книги и изменить данные с помощью этого кода?
Книга закрыта.
Код
Sub Replace()

  Workbooks("Файл в другом месте").Worksheets("Лист").Rows(1).Replace _
  What:="Indicator Type", Replacement:="Indicator_Type", _
  SearchOrder:=xlByRows, MatchCase:=True

End Sub
Автофильтр с указанием критерия (диапазон)
 
Добрый день!

Подскажите какая синтаксическая ошибка в следующем коде в Criteria1 :
Это автофильтр с указанием критерия, который ссылается на определенный лист и диапазон
Код
ActiveSheet.Range("Отчет").AutoFilter Field:=2, Criteria1:="Sheet("Cities").Range("A1")"
 
Переименовывать файл Excel при его закрытии (VBA)
 
Добрый день!

Подскажите пожалуйста как сделать так, чтобы при закрытии файла Excel, его название переименовывалось автоматически определенным образом?
Есть такие событийные процедуры:
Код
Private Sub Workbook_BeforeSave (ByVal SaveAsUI As Boolean, Cancel As Boolean)    
End Sub 
Private Sub Workbook_AfterSave (ByVal Success As Boolean)    
End Sub
Кто сталкивался с таким вопросом, то подскажите.
Например файл называется "Отчет", а после закрытия, он автоматически переименовывается в "Отчет 18.05.2017".
Событие по изменению ячейки на листе (VBA)
 
Доброго времени суток форумчане!

Помогите решить одну проблему с которой я столкнулся, а это следующее.
Есть код макроса, установлены фильтры и выпадающие списки.
И мне туда нужно вписать код, который указан ниже. Все для того, чтоб если произойдет изменение в ячейки B4, то срабатывало условие.
Пытаюсь вызвать данную процедуру Call Worksheet_Change, но не работает.
Вызывать основной макрос из нижеуказанной процедуры мне не нужно, а вот с основного макроса обратится к этой процедуре нужно.
Кто подскажет как это сделать?
Заранее спасибо за помощь.
Код
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
If Not Intersect(Range("B4"), Target) Is Nothing Then
   If City = "Город1" Then
      [b5].Validation.Delete
      [b5].Validation.Add Type:=xlValidateList, Formula1:=" Район1, Район2 "
      [b5].Validation.InputMessage = "Выберите район!"
    End If
End If
Application.EnableEvents = True
End Sub
Запрос SQL из VBA для 2 файлов Excel
 
Доброй ночи форумчане!

Подскажите почему выдает ошибку "run-time error '424' object required" в следуещем коде:
Код
Sub Macros()
    
  DBPath = "C:\Users\Андрей\Downloads\База.xlsx"
  sconnect = "Provider=MSDASQL.1;DSN=Excel Files;DBQ=" & DBPath & ";HDR=Yes';"
  conn.Open sconnect
  sSQLSting = "SELECT * FROM [Sheet1$]"
 
  rs.Open sSQLSting, conn
  Set QT1 = ActiveSheet.QueryTables.Add(rs, Range("A1"))
  QT1.Refresh
 
  rs.Close
  conn.Close
 
End Sub

Мне надо с помощью sql запроса обратиться к файлу excel для получения данных, а потом вставить эти данные в текущую страницу?

Придрался к строке с "conn.Open sconnect".
Изменено: Limos - 11.05.2017 00:22:48
Создание сводной таблицы (VBA)
 
Добрый день!

Подскажите пожалуйста кто поможет создать сводную таблицу как указано в примере (лист Сводная), но с помощью кода VBA.
Набросок кода также есть.
Схожесть участков последовательности
 
Добрый день!

Коллеги, кто сталкивался с задачей сопоставления участков последовательностей на схожесть?
Есть у меня пример, я его пытался решить путем функции КОРРЕЛ, но не получается адекватного решения.
Схожесть на примере этого маленького участка примерно 40%, но не как не 99,98%.

Подскажите, может есть еще способы, до которых я не додумался? Заранее спасибо за Ваши комментарии.
Найти максимальное значение в массиве по критерию
 
Доброго времени суток форумчане!

Подскажите пожалуйста как найти максимальное значение в массиве по критерию.
В чем вопрос. В примере есть "Значение1", "Значение2". Если в колонке "Value" находится "меньше", то найти по "Значение1" в столбце "Цена1" максимальное значение. Если в колонке "Value" находится "больше", то найти по "Значение1" в столбце "Цена2" максимальное значение. Также проделать и для среднего значения вместо максимального. Заранее спасибо за помощь.
Копирование формул в цикле
 
Добрый вечер!

Подскажите пожалуйста в таком вопросе. Как сделать так, чтобы формулы, которые копируются в нижеприведенном макросе, не были одинаковыми во всех скопированных ячейках? Нужно чтоб они смещались, вот как например, при обычном копировании ячеек (Ctrl+C Ctrl+V) в Excel.

Код
Public Sub Data()
Dim j, z As Long
    No = Range("minN").Value
    Nk = Range("maxN").Value
    For j = No To Nk - 1
         Worksheets("Result").Range(Worksheets("Result").Cells(13, (7 * j) + 12), Worksheets("Result").Cells(18, (7 * j) + 13)).Formula = Worksheets("Result").Range("L13:M18").Formula
    Next j
End Sub 
Сейчас получается, что везде одна и та же формула.
Форматирование диапазона ячеек с циклом
 
Форумчане, подскажите как отформатировать диапазон ячеек с циклом? Необходимо с цифрового формата преобразовать в процентный, а потом еще отсортировать по убыванию значения.
Допустим есть диапазон размером 1 ячейку по горизонтали и 4 ячейки по вертикали. Этот диапазон повторяется 10 раз через каждые 9 ячеек вправо.
Вот пример кода. Но тут что-то не так... помогите разобраться...
Код
Public Sub Formating()
Dim j, z As Long
    No = 1
    Nk = 10
    For j = No To Nk
         z = Format(Worksheets("Лист").Range(Worksheets("Лист").Cells(1, 9 * j), Worksheets("Лист").Cells(4, 9 * j).Value, "Percent"))
    Next j
End Sub
 
Цикл со смещением диапазона ячеек
 
Доброго времени суток.
Подскажите пожалуйста что не так в цикле со смещением диапазона ячеек.

Есть диапазон ячеек под названием "tempW", 5 ячеек по горизонтали, 11 ячеек по горизонтали, находится на одном листе. Мне нужно его переместить на другой лист и продублировать 100 раз со смещением вправо, смещая каждую его ячейку на 7 ячеек вправо. Что не так в коде? Выдает ошибку 1004.
Код
For x = 1 To 100
       Worksheets("2").Range(Cells(1, 7 * x), Cells(11, (6 * x) + 5)).Value = Worksheets("1").Range("tempW").Value
Next x 
Включение переменных в диапазон Range в VBA
 
Доброго времени суток форумчане.

Подскажите пожалуйста кто-нибудь из Вас сталкивался с проблемой включения переменных в диапазон Range в VBA.
Существует некий диапазон Range. Есть 10 переменных, которые составляют этот диапазон.

Как можно было б их (переменные) включить в Range ? Может через массив, и как ? Но хотелось бы через Range.
[ Закрыто] Поиск последовательностей в массиве
 
Доброго времени суток форумчане!

Нужна помощь в изучении кода макроса.
Есть следующий код.
Код
Sub test()
Dim oCell As Range
Dim sVerRange$, sDigits$, n&, x%, sRange$, s$

For Each oCell In ActiveSheet.Range("F16:F20")
    sDigits = sDigits & oCell.Value
Next

For Each oCell In ActiveSheet.Range("A1:A15")
    sVerRange = oCell.Value
    s = oCell.Address & ":" & oCell.Offset(4).Address
    For x = 1 To 4
         sVerRange = sVerRange & oCell.Offset(x).Value
    Next x
    If sVerRange = sDigits Then
        n = n + 1
        If IsEmpty(sRange) Then
            sRange = s
        Else
            sRange = sRange & Chr(10) & s
        End If
    End If
Next
MsgBox "кол-во рядов : " & n & Chr(10) & "Строки: " & Replace(sRange, "$", "")
Debug.Print sDigits
End Sub
 
Суть его в том, чтобы взять отрезок "F16:F20" и найти такой же отрезок в массиве "A1:A15". Результатом будет являться количество таких совпадений, а также адреса этих отрезков в массиве.
Проблема в следующем: в данном примере указано только 5 ячеек в отрезке, мне же нужно указывать и меньше 5 и больше 5 ячеек. Когда я просто изменяю адрес отрезка и адрес массива, то ничего не получается. Нужна Ваша помощь. Что мне здесь в коде нужно еще изменять?
Макрос для поиска ряда чисел в массиве
 
Доброго времени суток!

Очень нужна Ваша помощь в решении следующего вопроса.
Мне необходимо в столбце найти определенную последовательность, посчитать количество таких совпадений.
А также необходим адрес этих ячеек.
В данном примере нужно в столбце A1:A15 найти ряд F16:F20.  
Сопостовление списков по времени
 
Добрый день!

Подскажите какой функцией воспользоваться чтобы сопоставить значения в таблицах по времени в формате 0:00:00 ?
Обычная формула ВПР не работает. Формат приводил к равному знаменателю и в одном списке и во втором, результатов нет.
Цикл с использованием двух файлов Excel
 
Доброго времени суток!
Очень нужна Ваша помощь в нахождение ошибки в коде макроса.

Я хотел в этом коде наладить цикл копирования с файла "Расчет 2" листа "Прогноз" сначала ячейки C1 в файл "Расчет" лист "База" в ячейку I4. Получить данные с ячейки J4, потом вставить в ячейку E1 файла "Расчет 2" листа "Прогноз". Процесс нужно повторять столько раз, сколько заполненных строк в файле "Расчет 2". Смещать C1 и E1 файла "Расчет" вниз нужно на одну ячейку, ячейки I4 и J4 файла "Расчет 2" остаются на месте.

Код
Sub Расчет() 

Windows("Расчет 2.xlsm").Activate 
Sheets("Прогноз").Select 

Dim x As Integer 
NumRows = Range("C2",Range("C2").End(xlDown)).Rows.Count 
Range("C2").Select 
For x = 1 To NumRows 

Range("C1").Select 
Selection.Copy 
Windows("Расчет.xlsm").Activate 
Sheets("База").Select 
Range("I2").Select 
ActiveSheet.Paste 
Range("J4").Select 
Selection.Copy 
Windows("Расчет 2.xlsm").Activate 
Sheets("Прогноз").Select 

Dim w As Integer 
NumRows = Range("E2",Range("E2").End(xlDown)).Rows.Count 
Range("E2").Select 
For w = 1 To NumRows 

Range("E1").Select 
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ 
:=False, Transpose:=False 

Next 

ActiveCell.Offset(1, 0).Select 
Next 

End Sub

Страницы: 1
Наверх