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

Страницы: 1 2 След.
sumifs (VBA) работает медленно
 
всем доброго времени суток
у меня есть маленький код:
Код
Sub test()
Dim lr As Long
    With Sheets("продукт")
        lr = .Cells(3, 2).Value + 4
        Set fn = Application.WorksheetFunction
        For r = 5 To lr
            .Cells(r, 4).Formula = fn.SumIfs([procJanV], [procChainV], .Cells(r, 2), [procBrandV], .Cells(r, 3))
        Next r
    End With
End Sub

работает очень медленно, потому что вставляет данные в каждую ячейку отдельно
есть ли другой вариант? чтобы работал по быстрее
заранее спасибо за потраченное время
оптимальная формула для расчета дисконта
 
всем доброго времени суток
если клиент покупает товар на 10 000 000 руб., то скидка составляет 15%, а если на 100 000 000 руб., то 1%.
а если клиент покупает товар на 22 500 000 руб., то сколько процентов составляет скидка?
как написать оптимальную формулу для этой задачи? тестовый файл во вложении
буду очень признателен за любые идеи
Заранее спасибо за потраченное драгоценное время
возможно ли создать публичную функцию внутри Class Module?
 
всем доброго времени суток
у меня есть class module:
Код
Option Explicit
Public WithEvents eBx1 As MSForms.TextBox
Public WithEvents eBx2 As MSForms.TextBox
...
до Public WithEvents eBx50 As MSForms.TextBox


Private Sub eBx1_Change()
With Application
    .EnableEvents = False
    .ScreenUpdating = False
End With
    If eBx1.Tag = "" Then Exit Sub
    Dim lc1 As Long, lc2 As Long, r As Integer, Str
    Str = Split(eBx1.Tag, ";")
    If UBound(Str) < 1 Then Exit Sub
    lc1 = val(Str(0))
    lc2 = val(Str(1))
    With Worksheets("updateEvent")
        If .Cells(5, 2).Value = .Cells(1, 1).Value Then
            .Cells(3, lc1).Value = Format(val(eBx1.Value) / 100, "#0%")
        Else
            .Cells(3, lc2).Value = Format(val(eBx1.Value) / 100, "#0%")
        End If
    End With
    With eBx1
        If Not IsNumeric(.Text) And .Text <> "" Then
            .Text = Left(.Text, Len(.Text) - 1)
            .SelStart = Len(.Text)
        End If
    End With
With Application
    .EnableEvents = True
    .ScreenUpdating = True
End With
End Sub

Private Sub eBx2_Change()
With Application
    .EnableEvents = False
    .ScreenUpdating = False
End With
    If eBx2.Tag = "" Then Exit Sub
    Dim lc1 As Long, lc2 As Long, r As Integer, Str
    Str = Split(eBx2.Tag, ";")
    If UBound(Str) < 1 Then Exit Sub
    lc1 = val(Str(0))
    lc2 = val(Str(1))
    With Worksheets("updateEvent")
        If .Cells(5, 2).Value = .Cells(1, 1).Value Then
            .Cells(4, lc1).Value = Format(val(eBx2.Value) / 100, "#0%")
        Else
            .Cells(4, lc2).Value = Format(val(eBx2.Value) / 100, "#0%")
        End If
    End With
    With eBx2
        If Not IsNumeric(.Text) And .Text <> "" Then
            .Text = Left(.Text, Len(.Text) - 1)
            .SelStart = Len(.Text)
        End If
    End With
With Application
    .EnableEvents = True
    .ScreenUpdating = True
End With
End Sub
...
до Private Sub eBx50_Change()

возможно ли создать публичную функцию внутри Class Module?
затем использовать ее внутри UserForm
использую следующий код внутри UserForm
Код
'function for import data from eventsFC to sheet
Dim eVal1() As New eventFC 'название Class Molude
Dim eVal2() As New eventFC
...
до Dim eVal50() As New eventFC
Private Sub UserForm_Initialize()
Application.EnableEvents = False
Application.ScreenUpdating = False
    Dim c, r As Integer
    If Sheets("updateEvent").Cells(1, 2).Value = "New" Then
    Else
        ReDim eVal1(1 To 12)
            For c = 1 To 12
               Set eVal1(c).eBx1 = eventsFC.frmEvent.Controls("txtBrand1_" & c)
            Next c
        ReDim eVal2(1 To 12)
            For c = 1 To 12
               Set eVal2(c).eBx2 = eventsFC.frmEvent.Controls("txtBrand2_" & c)
            Next c
...
до 
        ReDim eVal50(1 To 12) 
           For c = 1 To 12
               Set eVal50(c).eBx50 = eventsFC.frmEvent.Controls("txtBrand50_" & c)
            Next c
    End If
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub
можно ли добавить в этот код еще один цикл?
код у меня работал когда использовал в User Form 12 наименование товара
основная задача заключается в том что если пользователь меняет данные в UserForm, данные должны менятся внутри Excel
есть ли у вас какая-то идея по этому поводу
заранее спасибо за потраченное время
Суммирование из двух листов с условиями
 
всем доброго времени суток
нужна ваша помощь
какую формулу лучше использовать для суммирования данных из двух листов с условиями?
подробно все написано внутри файла (файл во вложении)
заранее спасибо за потраченное время
Авто запуск все формулы внутри одного листа, если ТОЛЬКО значение одной ячейки в другом листе меняется
 
всем доброго времени суток
как всем известно в экселе все взаимосвязанные формулы автоматически запускаются (или внучную), когда данные меняются
есть ли возможность запустить все формулы внутри одного листа, если ТОЛЬКО значение одной ячейки на другом листе меняется?
например, есть много взаимосвязанных формул внутри одного листа (например, лист 1), они запускаются автоматически ТОЛЬКО тогда, когда значение ячейки А1 (Лист 2) меняется
заранее спасибо
Создание классов на n строк товара в UserForm
 
всем доброго времени суток
у меня есть следующий обычный код:
Код
Private Sub txtUfcProd1_1_Change()
    If Worksheets("updatingFC").Cells(5, 2).Value = Worksheets("updatingFC").Cells(1, 1).Value Then
        Worksheets("updatingFC").Cells(3, 37).Value = txtUfcProd1_1.Value
    Else
        Worksheets("updatingFC").Cells(3, 49).Value = txtUfcProd1_1.Value
    End If
End Sub

Private Sub txtUfcProd1_2_Change()
    If Worksheets("updatingFC").Cells(5, 2).Value = Worksheets("updatingFC").Cells(1, 1).Value Then
        Worksheets("updatingFC").Cells(3, 38).Value = txtUfcProd1_2.Value
    Else
        Worksheets("updatingFC").Cells(3, 50).Value = txtUfcProd1_2.Value
    End If
End Sub

Private Sub txtUfcProd1_3_Change()
    If Worksheets("updatingFC").Cells(5, 2).Value = Worksheets("updatingFC").Cells(1, 1).Value Then
        Worksheets("updatingFC").Cells(3, 39).Value = txtUfcProd1_3.Value
    Else
        Worksheets("updatingFC").Cells(3, 51).Value = txtUfcProd1_3.Value
    End If
End Sub

Private Sub txtUfcProd1_4_Change()
    If Worksheets("updatingFC").Cells(5, 2).Value = Worksheets("updatingFC").Cells(1, 1).Value Then
        Worksheets("updatingFC").Cells(3, 40).Value = txtUfcProd1_4.Value
    Else
        Worksheets("updatingFC").Cells(3, 52).Value = txtUfcProd1_4.Value
    End If
End Sub

Private Sub txtUfcProd1_5_Change()
    If Worksheets("updatingFC").Cells(5, 2).Value = Worksheets("updatingFC").Cells(1, 1).Value Then
        Worksheets("updatingFC").Cells(3, 41).Value = txtUfcProd1_5.Value
    Else
        Worksheets("updatingFC").Cells(3, 53).Value = txtUfcProd1_5.Value
    End If
End Sub

Private Sub txtUfcProd1_6_Change()
    If Worksheets("updatingFC").Cells(5, 2).Value = Worksheets("updatingFC").Cells(1, 1).Value Then
        Worksheets("updatingFC").Cells(3, 42).Value = txtUfcProd1_6.Value
    Else
        Worksheets("updatingFC").Cells(3, 54).Value = txtUfcProd1_6.Value
    End If
End Sub

Private Sub txtUfcProd1_7_Change()
    If Worksheets("updatingFC").Cells(5, 2).Value = Worksheets("updatingFC").Cells(1, 1).Value Then
        Worksheets("updatingFC").Cells(3, 42).Value = txtUfcProd1_7.Value
    Else
        Worksheets("updatingFC").Cells(3, 54).Value = txtUfcProd1_7.Value
    End If
End Sub
...

как вы уже знаете, с помощью данного кода все изменения автоматически заносятся в определенную ячейку из формы
форма большая и много ячеек, есть ли возможности оптимизировать данный код?
заранее спасибо
выбор между датами в сводной таблице (VBA)
 
всем доброго времени суток
у меня данные обновляются ежедневно
и у меня есть сводная таблица, в сводной таблице надо показать только данные за последние 3 дня
использую следующий код:
Код
Sub select_last_3_days()
Application.ScreenUpdating = False
Dim StartDate As Date
Dim EndDate As Date

StartDate = Sheets("analytics").Range("AC2").Value
EndDate = Sheets("analytics").Range("AD2").Value
    
    With Worksheets("analytics").PivotTables("PivotTable3").PivotFields("HistoryUpdateDate")
        .ClearAllFilters
        .PivotFilters.Add Type:=xlDateBetween, Value1:=StartDate, Value2:=EndDate
    End With

Application.ScreenUpdating = True
End Sub
 
пишет следующую ошибку


использую: DD.MM.YYYY формат


нужна ваша помощь, есть ли у вас какая-либо идея, как исправить???
заранее спасибо за потраченное драгоценное время
Изменено: hk1209 - 17.12.2014 13:02:18
фильтр сводной таблицы (VBA) Office 2007
 
всем доброго времени суток
у меня дома office 2013, но на работе office 2007
вчера вечером написал код для фильтра в сводных таблицах
код работает в офисе 2013, но запускаю в офисе 2007, он не работает
вот часть кода, где не работает:
Код
...     
With Worksheets("analytics").PivotTables("PivotTable3").PivotFields("companyName")
        .ClearAllFilters
        .PivotFilters.Add2 Type:=xlValueIsLessThan, DataField:=Worksheets("analytics").PivotTables( _
        "PivotTable3").PivotFields("Sum of AvPrice"), Value1:=Sheets("Dashboard").Range("B8").Value
End With
 ...
пишет что не поддерживает такого метода


есть у вас какая-либо идея, почему не работает в офисе 2007?
заранее благодарю за потраченное драгоценное время
преобразование горизонтальный массив в вертикальный (VBA)
 
всем доброго времени суток
имею горизонтальный массив и его надо преобразовать в вертикальный (см. влож.)
имею около 30 колонок и более 10 000 строк (ежемесячно увеличивается кол-во строк и колонок)
есть ли идея как это реализовать?
буду очень признателен
заранее спасибо за потраченное время  
обновление данных в TexBoxes (UserForm) VBA
 
всем доброго времени суток
имею следующий UserForm с TextBoxes


при нажатии на Show Form (кнопка) открывается
имею следующие данные и они обновляются в зависимости от фильтра


как подтягивать данные с ячейки на TextBoxes (VBA), впервые сталкиваюсь, поэтому прошу вашей помощи
использую следующий код:
Код
Private Sub UserForm1_Activate()
    TextBox1.Value = Worksheets("Sheet1").Range("C37").Value
End Sub

но ничего не подтягивается
прошу направить меня на правильный путь
заранее спасибо
Изменено: hk1209 - 22.11.2014 21:45:21 (доп инфо (code))
преобразование текстовый формат в значение (VBA)
 
всем доброго времени суток
имею макрос собирает данные из 40 различных таблиц в одну
данные выгружаются из определенного сайта, следовательно, нет возможности изменить форматы исходных данных
цены выгружаются в следующем формате
4 600,00р.
после обработки с помощью макроса удаляю "р."
использую следующий код:
Код
.... 
 
   With Sheets("array") 
      ......
            .Range("D2", .Range("D2").End(xlDown)).Replace What:="р.", Replacement:="" 
      ......
       End With
 ....
после обработки цены примут следующий вид:  
когда выделяем определенную ячейку нажимаем F2, затем Enter, то затем примет следующий вид

итоговая таблица большая, следовательно, нет возможности выполнить эту задачу вручную
есть ли какая-нибудь идея как исправить эту ошибку и получить как значение?
может быть что-то надо дописать?
заранее спасибо за потраченное драгоценное время
скопировать определенную ячейку и диапазон (VBA)
 
всем доброго времени суток
искал везде не не смог найти

использую следующий код:
Код
Sub TestCopy()
PastRow1 = Sheets("Sheet2").Range("A65536").End(xlUp).Row + 1
    With Sheets("Sheet1")
        .Range (.Cells(1, 1)), .Range(.Cells(1, 3), .Cells(1, 5)).Copy
        Sheets("Sheet2").Range("A" & PastRow1).PasteSpecial xlPasteValues
    End With
End Sub
 

как скопировать только A1, F1:H1, а не A1:H1?
прошу вашей помощи
заранее спасибо
скопирование каждую 3 строку (VBA)
 
всем доброго времени суток
есть одна таблица, надо скопировать определенные строки этой таблицы
использую следующий код:

Код
Sub x()
Dim rng As Range
Dim FirstRow As Long
For FirstRow = 5 To 683 Step 3
   Sheets("Sheet1").Range(Cells(FirstRow, 1), Cells(FirstRow, 5)).Copy
Next FirstRow
End Sub
надо скопировать каждую 3 строку начиная со строки 5
в этом коде только, копируется последняя строка
что-то пропускаю, нужная ваша помощь
заранее спасибо
Изменено: hk1209 - 07.11.2014 13:52:30
С помощью какой программы можно создать Map_Shapes (например, карту Москвы по АО)?
 
Всем доброго времени суток
прошу вашей помощи
С помощью какой программы можно создать Map_Shapes в Excel (например, карту Москвы по АО или районам)?
затем можно использовать данную карту для анализа деятельности (продажи, стоки, расходы) компании по АО Москвы (типа отчета)
заранее спасибо
консолидация данных из трех таблиц (VBA)
 
всем доброго времени суток
у меня есть 3 таблицы, в них попадают данные в зависимости от фильтра и определенных условий, затем данные обрабатываются и консолидируются в одну таблицу
иногда бывает что данные не попадают в какую-нибудь таблицу, во время обработки нет проблем, но во время консолидации копируется заголовки тех таблиц, которые нет данных
с помощью каких функций можно сделать так, чтобы пропустили этих таблиц?
прошу направить меня
заранее спасибо
выбор диапазона с одной строкой (VBA)
 
всем доброго времени суток
возникла следующая задача
как нам известно для выбора диапазона используем следующий код:
Код
Sub select_array()
    With Sheets("Sheet1")
        .Range("V3", .Cells(.Range("V3").End(xlDown).Row, .Range("V3").End(xlToRight).Column)).Select
    End With
End Sub
 
код хорошо работает, когда 2 и более строк
у меня есть таблица (10 столбцов, кол-во строк меняется в зависимости от фильтра) в нем попадает данные в зависимости от фильтра
когда попадает только 1 строк то с помощью этого кода выбирается 10 колонок и 1048576 строк (см. рис ), по идее только первый строк, к сожалению не так
а когда 2 и более строк то работает хорошо
что надо добавить в этот код, чтобы при обработке выбрался только 1 строк, если попадает только 1 строк?
буду признателен, если есть какие-то идеи
заранее спасибо
Изменено: hk1209 - 04.09.2014 14:31:17
Запуск макроса с формы
 
всем доброго времени суток
у меня есть следующий код:
Код
Sub select()
    Sheets("Array").Range("V3", Cells(Range("V3").End(xlDown).Row, Range("V3").End(xlToRight).Column)).ClearContents 'удалить значение
    beg = 0
    For Each cell In Sheets("Array").Range("S8:S" & Cells(Rows.Count, 11).End(xlUp).Row)
        If cell > 0 And cell <= 3 Then
            If beg = 0 Then beg = cell.Row
            fin = cell.Row
        End If
    Next
    Sheets("ArrayMap").Range("K" & beg & ":T" & fin).Copy
    Sheets("ArrayMap").Range("V3").PasteSpecial Paste:=xlPasteValues
    Sheets("ArrayMap").Range("V:AE").Sort Key1:=Range("AE3"), Order1:=xlDescending, Header:=xlYes
End Sub
 
код хорошо работает, когда активен лист "Array", во время использования файла я скрываю "Array", и код запускается с листа "Result" из формы
когда скрываю лист "Array" и запускаю макрос из формы, то выходить следующая ошибка "application defined or object defined error"
знаю что здесь ошибка в ссылках, но вроде правильно указал, но не работает, прошу вашей подсказки, заранее спасибо
выбор определенного диапазона в зависимости от значений столбца (VBA)
 
всем доброго времени суток
Нужна ваша помощь или подсказки
столкнулся со следующей проблемой
у меня есть таблица, состоит из трех столбцов: регион, сток (в неделях) и продаж (у.е.)
как нам известно для выбора таблицы используем следующий код:
Код
Sub select_all()
    Range("A4", Cells(Range("B4").End(xlDown).Row, Range("A4").End(xlToRight).Column)).Select
End Sub
 
но у меня другая проблема:
как выбирать определенный диапазон в таблице в зависимости от значений столбца (В)
1) stock <=3
2) 3<stock<=8
3) stock>8

подробное описание во вложении
надеюсь на вашу поддержку
заранее спасибо
добавление значения в пузырьках (VBA)
 
всем доброго времени суток
добавляю значение внутри пузырьков, значение добавляется сверху, но если они большие то внутри одной появляется много значений
возможно ли добавить внутри одного пузырька только одно значение?
использую следующий код:
Код
'добавить значение
Sub AddText(Optional fnt As Integer = 20, Optional tp As String = "number")
'удалить старых значений
    Call DellText
    Dim Ctr As Integer
    Dim myRng As Range
    Dim r As Integer
    Dim shpsArr(88) As String
    Dim x As Integer
    Set myRng = ThisWorkbook.Names("regText").RefersToRange
    For r = 1 To myRng.Count
        Dim l As Integer
        Dim t As Integer
        Dim s As Integer
        Dim regId As String
        Dim nshp As Shape
        Dim cPnt As RegionCenterPoint
        regId = myRng(r).Offset(0, -1).Value
        Set cPnt = cPointRussia("Buble_" & regId)
        s = 20
        l = cPnt.Left - s * 0.5
        t = cPnt.Top - s * 0.5
        Set nshp = ThisWorkbook.Sheets("Map").Shapes.AddTextbox(msoTextOrientationHorizontal, l, t, s, s)
        'форматирую фигуру
        With nshp
            .Name = "NewText_" & regId
            .Fill.Visible = msoFalse
            .Line.Visible = msoFalse
            .TextFrame2.VerticalAnchor = msoAnchorMiddle
            .TextFrame2.HorizontalAnchor = msoAnchorNone
            .TextFrame2.AutoSize = msoAutoSizeNone
            .TextFrame2.TextRange.Font.Size = fnt
            .TextFrame2.WordWrap = msoFalse
            .TextFrame2.TextRange.ParagraphFormat.Alignment = msoAlignCenter
            .ZOrder msoBringToFront
        End With
        'подписываю
        Select Case tp
        Case "n"
            nshp.TextFrame2.TextRange.Characters.text = regId
        Case "t"
            nshp.TextFrame2.TextRange.Characters.text = myRng(r).Value
        End Select
        'заношу фигуру в массив
        shpsArr(x) = nshp.Name
        x = x + 1
    Next r
    Dim grp As Shape
    Set grp = ThisWorkbook.Sheets("Map").Shapes.Range(shpsArr).Group
    grp.Name = "gr_Text"
    grp.ZOrder msoBringToFront
End Sub
 
см. рис, чтобы вам было понятно:

надеюсь на вашу идею или подсказки
заранее спасибо
изменения списка в ComboBox
 
всем доброго времени суток
использую следующий код при изменении списка в ComboBox
Код
Private Sub ComboBox6_Change()
    If ComboBox6.Value = "Distr_1" Or ComboBox6.Value = "Distr_2" Or ComboBox6.Value = "Distr_3" Or _
    ComboBox6.Value = "Distr_4" Or ComboBox6.Value = "Distr_5" Or ComboBox6.Value = "Distr_6" Or ComboBox6.Value = "Distr_7" Then
       Call DellBuble
       Call DellText
       OptionButton1.Value = False
       OptionButton3.Value = False
       OptionButton4.Value = False
       OptionButton5.Value = False
       OptionButton6.Value = False
       OptionButton7.Value = False
       OptionButton8.Value = False
    End If
End Sub 
и еще в книге есть диапазон DistrName, перечисляется все наименование дистрибьютора
Наименование дистрибьютора меняется в зависимости от отчета или периода, следовательно DistrName тоже меняется
есть ли возможности привязать DistrName к коду?, вместе перечисления всех дистрибьюторов, т.е. чтобы не изменить код при изменении наименование дистрибьютора, только меняем DistrName
заранее спасибо
Изменено: hk1209 - 13.08.2014 12:37:42 (доп инфо)
Как определить долю продаж региона в сводной таблице (с помощью формулы)?
 
всем доброго времени суток
Как определить долю продаж региона в сводной таблице (с помощью формулы)?
мне известно что есть стандартная функция (см.  ), но я буду использовать значение новой колонки в других целях, следовательно, если использую стандартной функции, то не могу использовать значение данной колонки далее, так как не видна колонка в Calculated Field
сталкивались ли с такой проблемой ранее
буду признателен, если есть какие-то идеи
заранее спасибо
сохранение выбранного OptionButton в форме при закрытии
 
всем доброго времени суток
У меня есть форма. В форме использую несколько
а) ComboBox (Бренд, Наименование товара, Неделя)
б) OptionButton
1. Заполнение карты
- по Фед. округам
- скрыть
2. Значение
- код региона
- прирост
- скрыть
3) пузырьки
- показать
скрыть

написал код (ComboBox):
если мы выбираем определенного бренда, наименование товара и недели, и закрываем форму и открываем заново, то наши выбранные настройки автоматически подтягиваются из ячейки и нам не придется заново выбирать

но вот эту идею не смог реализовать по сравнению с OptionButton
например:
если выбираем 1) по фед. округам 2) прирост 3) показать
если закрываем то они исчезают и придется перевыбирать заново, это как то не удобно
возможно ли дописать код, чтобы сохранились выбранные optionbutton?
чтобы всем было понятно выложил файл
есть ли идеи или какие-то ссылки чтобы реализовать данную идею
заранее спасибо
Изменено: hk1209 - 05.08.2014 16:18:21
работа с Shapes: возможно ли взять точку (.Left, .Top) добавления нового shape_2-а (на shape_1) из shape_1, а не из координаты листа?
 
всем доброго времени суток
возможно ли взять точку (.Left, .Top) добавления нового шейпа "Buble" из "shape_region", а не из координаты листа?
использую следующий код:

Код
Option Explicit
'константы
Const gr_South As String = "shape_region_01;shape_region_23"

'Show Form
Sub ShowForm()
    frm_main.Show
End Sub

'добавить код региона
Sub AddText_Southern(Optional fnt As Integer = 20, Optional tp As String = "number")
'удалить код региона
    Call DellText_Southern
    Dim Ctr As Integer
    Dim myRngSouthern As Range
    Dim r As Integer
    Dim shpsArr(6) As String
    Dim x As Integer
    Set myRngSouthern = ThisWorkbook.Names("regText_Southern").RefersToRange
    For r = 1 To myRngSouthern.Count
        Dim l As Integer
        Dim t As Integer
        Dim s As Integer
        Dim regId As String
        Dim nshp As Shape
        Dim cPnt As RegionCenterPoint
        regId = myRngSouthern(r).Offset(0, -1).Value
        Set cPnt = cPointSouthern("Buble_" & regId)
        s = 20
        l = cPnt.Left - s * 0.5
        t = cPnt.Top - s * 0.5
        Set nshp = ThisWorkbook.Sheets("Map").Shapes.AddTextbox(msoTextOrientationHorizontal, l, t, s, s)
        'форматировать фигуру
        With nshp
            .Name = "NewText_" & regId
            .Fill.Visible = msoFalse
            .Line.Visible = msoFalse
            .TextFrame2.VerticalAnchor = msoAnchorMiddle
            .TextFrame2.HorizontalAnchor = msoAnchorNone
            .TextFrame2.AutoSize = msoAutoSizeNone
            .TextFrame2.TextRange.Font.Size = fnt
            .TextFrame2.WordWrap = msoFalse
            .TextFrame2.TextRange.ParagraphFormat.Alignment = msoAlignCenter
            .ZOrder msoBringToFront
        End With
        'подписывать номера региона
        Select Case tp
        Case "n"
            nshp.TextFrame2.TextRange.Characters.text = regId
        Case "t"
            nshp.TextFrame2.TextRange.Characters.text = myRngSouthern(r).Value
        End Select
        'заносить фигуру в массив
        shpsArr(x) = nshp.Name
        x = x + 1
    Next r
    Dim grp As Shape
    Set grp = ThisWorkbook.Sheets("Map").Shapes.Range(shpsArr).Group
    grp.Name = "gr_Text"
    grp.ZOrder msoBringToFront
End Sub

'удалить код региона
Sub DellText_Southern()
    Dim shp As Shape
    For Each shp In ActiveSheet.Shapes
        If LCase(shp.Name) Like LCase("*text*") Then
            shp.Delete
        End If
    Next shp
End Sub
 
вот таким образом указываю координаты:
Код
Option Explicit
Function cPointSouthern(n As String) As RegionCenterPoint
    Dim Buble_01 As New RegionCenterPoint
    Dim Buble_23 As New RegionCenterPoint

    Buble_01.Name = "Buble_01"
    Buble_23.Name = "Buble_23"

    Buble_01.Left = 358
    Buble_23.Left = 400

    Buble_01.Top = 255
    Buble_23.Top = 195

    Dim arrBubles(1) As RegionCenterPoint
    Set arrBubles(0) = Buble_01
    Set arrBubles(1) = Buble_23
    Dim p As Variant
    For Each p In arrBubles()
        If p.Name = n Then
            Set cPointSouthern = p
            Exit For
        End If
    Next p
End Function
 

использую следующий Class Module:
Код
Private bublName As String
Private bublTop As Integer
Private bublLeft As Integer
Property Let Name(s As String)
    bublName = s
End Property
Property Get Name() As String
    Name = bublName
End Property
Property Let Top(s As Integer)
    bublTop = s
End Property
Property Get Top() As Integer
    Top = bublTop
End Property

Property Get Left() As Integer
    Left = bublLeft
End Property
Property Let Left(s As Integer)
    bublLeft = s
End Property
 
хотел добавить код региона на карту России, сначала разработал для офис 2007, все точки были в центре каждого региона, там не были проблемы
хотел открыть в офис 2013, но там все точки не попали в центр каждого региона (см. рис.)
понятие не имею из-за чего, но есть ли возможности взять координаты из самого shape-а, а не из листа?
есть ли у вас какие-то идеи или приложение?
Заранее спасибо
Изменено: hk1209 - 06.08.2014 12:14:32 (доп инфо)
объектная переменная не установлена (VBA), object variable or with block variable not set vba
 
все доброго времени суток
имею следующий код:
Код
Sub AddText(Optional fnt As Integer = 20, Optional tp As String = "number")

    Call DellText
    Dim Ctr As Integer
    Dim myRng As Range
    Dim r As Integer
    Dim shpsArr(88) As String
    Dim x As Integer
    Set myRng = ThisWorkbook.Names("regText").RefersToRange
    For r = 1 To myRng.Count
        Dim l As Integer
        Dim t As Integer
        Dim s As Integer
        Dim regId As String
        Dim nshp As Shape
        Dim cPnt As RegionCenterPoint
        regId = myRng(r).Offset(0, -5).Value
            If Sheets("Map").Range("D1").Value = "Russia" Then
                Set cPnt = cPointRussia("Buble_" & regId)
            ElseIf Sheets("Map").Range("D1").Value = "Central Federal District" Then
                Set cPnt = cPointCentral("Buble_" & regId)
            End If
        s = 20
        l = cPnt.Left - s * 0.5 'ошибка здесь
        t = cPnt.Top - s * 0.5
        Set nshp = ThisWorkbook.Sheets("Map").Shapes.AddTextbox(msoTextOrientationHorizontal, l, t, s, s)
       
        With nshp
            .Name = "NewText_" & regId
            .Fill.Visible = msoFalse
            .Line.Visible = msoFalse
            .TextFrame2.VerticalAnchor = msoAnchorMiddle
            .TextFrame2.HorizontalAnchor = msoAnchorNone
            .TextFrame2.AutoSize = msoAutoSizeNone
            .TextFrame2.TextRange.Font.Size = fnt
            .TextFrame2.WordWrap = msoFalse
            .TextFrame2.TextRange.ParagraphFormat.Alignment = msoAlignCenter
            .ZOrder msoBringToFront
        End With
       
        Select Case tp
        Case "n"
            nshp.TextFrame2.TextRange.Characters.text = regId
        Case "t"
            nshp.TextFrame2.TextRange.Characters.text = myRng(r).Value
        End Select
      
        shpsArr(x) = nshp.Name
        x = x + 1
    Next r
    Dim grp As Shape
    Set grp = ThisWorkbook.Sheets("Map").Shapes.Range(shpsArr).Group
    grp.Name = "gr_Text"
    grp.ZOrder msoBringToFront
End Sub
 
данный код добавляет код региона на карту России
если одна карта, то работает хорошо, а если 2 карты, то выдает ошибку
прошу вашей помощи, не могу найти ошибку
если выбираем целиком карту россии, то код работает без ошибок, а если выбирает карту центрального федерального округа, то выдает ошибку
заранее спасибо
Изменено: hk1209 - 31.07.2014 15:05:26
Возможно ли в пузырьковой (bubble) диаграмме показывать значение 4 переменных?
 
всем доброго времени суток
у меня есть следующие данные:
1) код региона,
2) продажи (USD),
3) запасы в неделях (weeks)
4) прирост продажи (%)
возможно ли реализовать в пузырьковой диаграмме показывать значение 4 переменных?
Х - код региона, У - запасы в неделях, значение Bubble - продажи, а внутри Bubble значение "прироста продаж (%)"
цвет bubble меняется в зависимости от значение "запасы в неделях"
>=3 - красный, от 3,01 до 8 - зеленый, больше 8 - желтый
пример во вложении
буду рад, если будет какие-то идеи или ссылки
заранее спасибо
Изменено: hk1209 - 28.07.2014 14:46:44 (доп инфо)
возможно ли не привязать название листа к коду?, название 2-го листа меняется ежемесячно
 
всем доброго времени суток
использую следующий код:
Код
For Each TempSht In .Worksheets
    If TempSht.Name = "Clients ALL" Then
        Sheets("Clients ALL").Select
        '---my Code 1---
    Else
        Sheets("Clients May-June").Select
        '---my Code 2---
    End If
Next

название второго листа "Clients May-June" меняется ежемесячно, если отчет июньский то "Clients May-June", а если июльский, то "Clients June-Jule"
возможно ли не привязать название листа к коду?
есть ли у вас какие-то идеи, буду очень признателен
заранее спасибо
выбор определенного диапазона (VBA)
 
всем доброго времени суток
у меня появилась следующая задача
как нам известно для выбора определенного диапазона есть несколько вариантов

1) для выбора используемых ячеек начиная с определенной ячейки используем:
Код
Sub select_range()
Range(Cells(2, 4), Cells.SpecialCells(xlCellTypeLastCell)).Select
End Sub
 
2)
Код
Sub select_range_2()
Range("D2", Range("E2").End(xlDown).End(xlToRight)).Select
End Sub
 
но они не подходят для моей таблицы (см вложение)
хочу выбирать ячейки внутри черной линии
буду признателен, если есть какие-то идеи
заранее спасибо
подсчет общее количество листов из нескольких книг (VBA)
 
всем доброго времени суток
как подсчитать суммарное количество листов из нескольких книг
использую следующий код, но он подсчитает только количество листов последней книги, а пропускает всех предыдущих

Код
.............................................. 
With .Workbooks.Open _
                    (Filename:=iPath & iTempFileName, UpdateLinks:=False, ReadOnly:=True)
                    iNumFiles = iNumFiles + 1
                    iNumSheets = ActiveWorkbook.Worksheets.Count   
................................................  
MsgBox "Successfully merged " & iNumSheets & " Sheets! " & iNumFiles & " Workbooks!", vbInformation, "Finally" 
End Sub

кол-во книг считается правильно
есть ли у вас какие-то идеи?
Заранее спасибо
Объединение нескольких книг в одну (VBA), внутри одной книги может быть несколько листов
 
всем доброго времени суток
у меня есть несколько (около 20) excel-овский файл, внутри одного файла есть несколько листов (от 3 до 20)
хочу объединить их в один файл "combine_workbooks", написал код, вроде работает, но не объединяет в один файл
не видает никакой ошибки, не могу понять в чем ошибка
файл во вложении
прошу вашей помощи
заранее спасибо
Изменено: hk1209 - 23.07.2014 21:08:37
Цикл выполнения операций к всем листам (VBA)
 
всем доброго времени суток
у меня есть следующий код:
Код
    Sheets("1").Select
    Range("B1").Select
    Selection.Copy
    Range("B4", .Range("B4").End(xlDown)).Offset(-1, -1).Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False

    Sheets("2").Select
    Range("B1").Select
    Selection.Copy
    Range("B4", Range("B4").End(xlDown)).Offset(-1, -1).Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    
    Sheets("3").Select
    Range("B1").Select
    Selection.Copy
    Range("B4", Range("B4").End(xlDown)).Offset(-1, -1).Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
 

в файле может быть от 2 до 20 листов
хочу чтобы одна операция выполнилась для всех листов, т.е. цикл повторения одной операции
использую следующий код:

Код
Sub Combine_Sheets()
  
   Dim sh As Worksheet
 
    For Each sh In ActiveWorkbook.Sheets
    Range("B1").Select
    Selection.Copy
    Range("B4", ActiveSheet.Range("B4").End(xlDown)).Offset(-1, -1).Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Next  
End Sub 

но он выполняется только для активного листа, а для остальных не выполняется
прошу вашей помощи
заранее спасибо
Страницы: 1 2 След.
Наверх