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

Страницы: 1 2 След.
VBA добавить чек-бокс на лист и сохранить его значение в массив
 
Подскажите пожалуйста, как просто в одну ячейку добавить чекбокс?
С ActiveX чекбоксом всё просто, делаешь что-то типа такого и всё.
Код
With Worksheets(strWsContract).OLEObjects.Add(ClassType:="Forms.CheckBox.1", Left:=81, Top:=Range("C" & rowNumber).Top + 2, Width:=15, Height:=14.25)
    .Name = "chkBox" & rowNumber
    .Object.Caption = ""
    .Object.BackColor = RGB(192, 192, 192)
    .Object.BackStyle = fmBackStyleTransparent
    .ShapeRange.Fill.Transparency = 1#
End With

А вот с обычным WinForms чек-боксом я так и не смог найти каких-то более менее вразумительных мануалов.
Нашёл только, что можно так например, но как управлять параметрами ширины, высоты, надписи, именем чек-бокса и т.д. не могу найти, а просто добавление в ячейку меня не устраивает.

Код
With ActiveSheet.CheckBoxes.Add(Range("A1").Left, Range("A1").Top, Range("A1").Width, Range("A1").Height)End With
Заранее спасибо.

Добавить на график горизонтальную линию (порог)
 
Я так и не понял, как вы это сделали. Выбираю format data series, нажимаю secondary axis, линия все равно от центра столбца к центру столбца идет и по числам куда-то уезжает....
Добавить на график горизонтальную линию (порог)
 
В общем сам нашел. Линию всё равно нужно строить по двум точкам, по 1 никак. Но её можно скрыть, а вместо нее добавить линию тренда, у которой можно сделать форкаст на 0,5 вперед и на 0,5 назад. Форматирование по вкусу.

Всем спасибо за помощь.
Добавить на график горизонтальную линию (порог)
 
grigju , там порог сделан просто серией по такому же кол-ву точек, как и сам график. Когда точек много - это выглядит нормально, а когда точки две, то выглядит тупо, как у меня на картинке, т.к. линия идёт из центра первого столбца в центр второго столбца (а мне нужно, чтобы она начиналась до первого столбца, желательно с самого начала и заканчивалась за вторым столбцом, желательно в самом конце видимой области всего графика).

Можно конечно график строить по 4 точкам... первую и последнюю объявить 0, а порог по всем четырем поставить 98%, но по-моему это костыль - не работает вариант, с 0 точками масштаб съезжает в 0 - 100 с 97,2 - 99,0. Странно, что в эксель нет просто функции добавления произвольных линий на график по заданному значению (в масштабе значений графика).
Изменено: invirtus - 29.04.2016 14:50:11
Добавить на график горизонтальную линию (порог)
 
У меня два показателя. Один показатель - это "цель" - процент, которые необходимо достичь. В данном случае - это 98%. Эту цифру на графике я хочу видеть в виде прямой горизонтальной линии, как бы задающей уровень, который нужно пересечь.

Второй показатель - это серия чисел, в данном случае - это два числа: 4 квартал 2015, 1 квартал 2016, но может быть и больше, например 2 квартал 2016, 3 квартал 2016. Как отобразить их, не суть важно. Можно столбцами, можно так же линией. Это не сложно. Основная сложность в добавлении горизонтальной черты - цели, заданной одним числом, а не серией чисел. Это просто планка. Я не знаю, как добавить планку на график.
Изменено: invirtus - 29.04.2016 14:36:30
Добавить на график горизонтальную линию (порог)
 
Добрый день.

Мне нужно построить график, где одни показатели были бы в виде колонок, а другая одна (1) цифра была бы горизонтальной чертой от начала до конца зоны графика.
Пример на картинке. Но, тут я линию "цель" сделал из двух точек, а мне нужно по одной - просто черта/граница горизонтальная по показателю и чтобы она шла слева на право от начала до конца области графика, т.е. пересекая оба столбца. Уже всё излазил, так и не нашел, как в эксель добавить произвольную горизонтальную линию с соответствующим значением. Можно конечно вручную рисовать, добавляя поверх графика объект "линия", но это изврат.

Заранее спасибо за помощь.
Метод Find не ищет строку, Find с переменным успехом то ищет, то не ищет строку без видимых изменений
 
Всем спасибо большое. Уже второй раз на эту досадную ошибку (не указываю полный путь внутри скобок) наступаю. Надеюсь запомню.
Метод Find не ищет строку, Find с переменным успехом то ищет, то не ищет строку без видимых изменений
 
Всё, я понял. Протестирую. Спасибо.
Метод Find не ищет строку, Find с переменным успехом то ищет, то не ищет строку без видимых изменений
 
Если делаю активной PrismaTools.xlsm, то код ниже срабатывает и находит всё. А если просто открыта рядом, но не активна, то вызывает Object variable not set  (Error 91)

Вот почему макрос вчера то находил, то не находил номер поставщика (а из-за on error resume next я ошибку не ловил)... ох, два часа коту под хвост
Код
Workbooks("PrismaTools.xlsm").Worksheets("Suppliers").Range(Range("A:A").Find(SupplierINN,, xlValues, xlPart).Address).Offset(, 2).Value
Изменено: invirtus - 28.07.2015 11:14:32
Метод Find не ищет строку, Find с переменным успехом то ищет, то не ищет строку без видимых изменений
 
Цитата
Sanja написал: Ага, и я про "*.xlsx" намекал
При чем здесь xlsx? Я могу ссылаться для поиска на любой файл, хоть на txt или csv при желании. Макрос у меня живет естественно в xlsm, он просто не может подругому.
Это я сюда другие файлы выложил, а код не исправил. У меня и файл xlsm и ссылка на файл xlsm.
Изменено: invirtus - 28.07.2015 18:17:49
Метод Find не ищет строку, Find с переменным успехом то ищет, то не ищет строку без видимых изменений
 
Я конечно может чего не понимаю (расширение файла надо писать при ссылке на Workbooks?), но вот...
Метод Find не ищет строку, Find с переменным успехом то ищет, то не ищет строку без видимых изменений
 
Цитата
Sanja написал: В файлах нет макросов (они в *.xlsx не живут)
А в файлах и нет макросов. У меня есть, а в выложенных нет. Код выложен в виде текста, а более ничего не требуется.
Изменено: invirtus - 28.07.2015 18:17:28
Метод Find не ищет строку, Find с переменным успехом то ищет, то не ищет строку без видимых изменений
 
Да, спасибо, не подумал. Жалуется на Object variable not set  (Error 91), но не совсем понимаю, что он хочет. Почему это работает прекрасно:
Код
SupplierINN = Worksheets("Данные поставщика").Range(Worksheets("Данные поставщика").Range(SupplierBlockStart & ":" & SupplierBlockEnd).Find("*ИНН*").Address).Offset(, 1).Value

отличается от этого?
Код
xSupplier = Workbooks("PrismaTools.xlsm").Worksheets("Suppliers").Range(Range("A:A").Find(SupplierINN, , , xlPart).Address).Offset(, 2).Value
это вызывает Object variable not set  (Error 91)
Метод Find не ищет строку, Find с переменным успехом то ищет, то не ищет строку без видимых изменений
 
Спасибо. Подумаю.
Но на самом деле меня просто интересует, почему вот эта строка не находит в таблице supplier.xlsx номер поставщика, при том, что SupplierINN четко определен и найден, и ему присвоено значение. Я не могу понять, почему. Даже если я SupplierINN сделаю не string, a double (цифра), всё равно не ищет.
Код
xSupplier = Workbooks("PrismaTools.xlsm").Worksheets("Suppliers").Range(Range("A:A").Find(SupplierINN, , xlValues, xlPart).Address).Offset(, 2).Value
Метод Find не ищет строку, Find с переменным успехом то ищет, то не ищет строку без видимых изменений
 
Добрый день всем.

Возникла проблема с методом Find. Вчера убил два часа, но так и не понял, почему он то работает, то нет. Через Find и Offset я пытаюсь сэмулировать экселевский Vlookup. Есть исходный файл с двумя колонками - в первой список ИНН, во второй - список номеров поставщиков. Макрос в testFile находит ИНН (с этим он прекрасно справляется), а потом используя ИНН должен искать мне номер поставщика. Он то работал вчера, то нет. Когда не работал, я сохранял файл, закрывал, открывал, запускал макрос построчно и по коду следил, что происходит после выполнения каждой строки, и он находил поставщика. Потом закрывал файл, открывал, запускал просто так и он не находил поставщика. Выкладываю файл где ищется ИНН и файл со списком поставщиков (готовый макрос не влезает по максимальному объему файла). Необходимый макрос - Sub PriceListShow(). Ниже интересующий меня блок кода, я не пойму, почему он не работает (уже перебрал все возможные варианты, но он так и не ищет строку).

Я начал грешить на то, что у меня String, а в файле со списком поставщиков формат данных "цифровой", но смена переменной на Double никакого результата не принесла.
Как видите ниже, я перепробовал различные варианты запросов (даже vlookup), но опять таки к какому то очевидному пониманию не пришёл. Надеюсь вы мне поможете и/или подскажете, как улучшить код.
Спасибо.

Код
On Error Resume Next
Dim SupplierINN As String
Dim SupplierBlockStart As String
Dim SupplierBlockEnd As String
SupplierBlockStart = Worksheets("Данные поставщика").Range("A1:C100").Find("*Контак*ормация*поставщика*").Address
SupplierBlockEnd = Worksheets("Данные поставщика").Range("A1:C100").Find("лицо*поставщика*").Address
SupplierINN = Worksheets("Данные поставщика").Range(Worksheets("Данные поставщика").Range(SupplierBlockStart & ":" & SupplierBlockEnd).Find("*ИНН*").Address).Offset(, 1).Value

If SupplierINN = Empty Then
PriceListAuto.Supplier = "НЕТ ИНН"
PriceListAuto.Supplier.BackColor = RGB(254, 230, 61)
PriceListAuto.SupplierLabel = "На вкладке ""Данные поставщика"" не указан ИНН. Уточните ИНН / Введите вручную"
Else

'xSupplier = Workbooks("PrismaTools.xlsm").Worksheets("Suppliers").Range(Range("A:A").Find(SupplierINN, , , xlPart).Address).Offset(, 2).Value
'If xSupplier = "" Then xSupplier = Workbooks("PrismaTools.xlsm").Worksheets("Suppliers").Range(Range("A:A").Find(SupplierINN, , , xlWhole).Address).Offset(, 2).Value
'If xSupplier = "" Then xSupplier = Workbooks("PrismaTools.xlsm").Worksheets("Suppliers").Range(Range("A:A").Find("*" & SupplierINN & "*", , , xlPart).Address).Offset(, 2).Value
'If xSupplier = "" Then xSupplier = Workbooks("PrismaTools.xlsm").Worksheets("Suppliers").Range(Range("A:A").Find("*" & SupplierINN & "*", , , xlWhole).Address).Offset(, 2).Value
If xSupplier = "" Then xSupplier = Workbooks("PrismaTools.xlsm").Worksheets("Suppliers").Application.WorksheetFunction.VLookup(CDbl(SupplierINN), "A:C", 3, 0)

xSupplierName = Workbooks("Suppliers.xlsm").Worksheets("Suppliers").Range(Range("C:C").Find(xSupplier, , , xlPart).Address).Offset(, 1).Value
If xSupplier = "" Then
PriceListAuto.Supplier = "НЕ НАЙДЕН"
PriceListAuto.SupplierLabel = "Поставщик не найден. Проверьте список поставщиков или введите номер вручную"
Else
PriceListAuto.Supplier = xSupplier
PriceListAuto.Supplier.BackColor = RGB(107, 198, 6)
PriceListAuto.SupplierLabel = xSupplierName
End If
End If


Изменено: invirtus - 28.07.2015 10:03:13
VBA Переменные в качестве элементов цикла
 
Ясно. Спасибо. Ну да, я для себя хочу, чтобы удобней редактировать было, а скорость и так вроде пока нормальная, там посмотрим.
На счёт On Error Resume Next я просто не хочу чтобы пользователь пугался, если вылезет ошибка. И, если честно, не знаю, надо его до выражения ставить или после :(
Можно его чем-то заменить? Можно конечно какой-нибудь msgbox намутить с отображением ошибок, но мне влом.
Изменено: invirtus - 01.07.2015 13:11:36
VBA Переменные в качестве элементов цикла
 
Это, я не сразу ваше сообщение увидел, отвечал JayBhagavan
Спасибо.
VBA Переменные в качестве элементов цикла
 
Цитата
JayBhagavan написал:
invirtus, файл-пример приложили бы. Не понятно зачем такие сложности с переменными? А массив использовать нельзя?
Да у меня там кода куча, вам разбираться долго. Я предполагал, что эти переменные можно засунуть в массив и перебирать их как элементы массива. Попробую, спасибо.

Потому что у меня ищется столбец по эксель файлу вот таким образом. Колонки в файлах не всегда в правильной очередности, но в шапке как правило надписи одинаковые. Эта буква столбца пишется в переменную и в форму. Юзер проверяет, правильно ли выбрались все столбцы и нажимает "ОК". После этого файл превращается в другой. Хотя в принципе вот вам файл, и пример для пробы. Но я не настоящий сварщик VBA, только учусь.
Код
PriceListAuto.MaterialName = Split(Range("A1:CZ12").Find("40*çíàêîâ").Address, "$")(1)
Изменено: invirtus - 01.07.2015 12:25:24
VBA Переменные в качестве элементов цикла
 
Добрый день.
Подскажите пожалуйста, если в VBA возможность в качестве элементов для перебора в цикле использовать список переменных?
Иными словами, у меня есть список public переменных (например A, B, C, D), которые могут принимать различные значения.

Обычный цикл (не в синтаксисе VBA) это что-то вроде.
int i;
for (i=1; i < 10; i++)
  {
    do something;
  }
next i;

Можно ли как-то сделать, чтобы i в каждую итерацию цикла принимало значение следующей переменной из списка A, B, C, D?
Заранее спасибо.

Немного дополню.
Мне нужно закрашивать диапазоны, адреса которых получают переменные. Вот можно ли в том месте, где ниже стоит X, с помощью цикла перебирать список переменных, а то мне для каждой переменной сейчас такую конструкцию писать приходится.
Код
With Columns(x).Interior
    .PatternColorIndex = xlAutomatic
    .ThemeColor = xlThemeColorAccent3
    .TintAndShade = 0.399975585192419
    .PatternTintAndShade = 0
End With
Изменено: invirtus - 01.07.2015 20:49:54
With Selection.Interior не работает с переменной
 
Так вон же на картинке выше всё есть... Watches, там значение переменной. в x у меня буква String, С допустим.

Я имел ввиду не выделять, а работать (выделять цветом имел ввиду). Просто у меня не всегда правильно определяется конец диапазона по строкам, если столбец пустой например, тогда вообще ничего не выделится цветом... а если столбец целиком заливать, то такой проблемы не возникнет.


я уже на такое переделал и всё заработало. Непонятно почему With selection не работало, если переменная нормально присваивалась.
Код
PriceListAuto.MaterialGroup = Split(Range("A1:CZ12").Find("òîâàð*ãð*").Address, "$")(1)
xMaterialGroup = PriceListAuto.MaterialGroup
With Columns(xMaterialGroup & ":" & xMaterialGroup).Interior
    .PatternColorIndex = xlAutomatic
    .ThemeColor = xlThemeColorAccent3
    .TintAndShade = 0.399975585192419
    .PatternTintAndShade = 0
End With
Изменено: invirtus - 29.06.2015 16:35:04
With Selection.Interior не работает с переменной
 
О, здорово. Без selection всё заработало. Спасибо. Поиграю с диапазонами вместо столбцов. Диапазоны выделять быстрее чем целые столбцы?
With Selection.Interior не работает с переменной
 
Я даже и не знаю, переменная без проблем присваивается... а если Selection раскомментить на нём ошибка вылезает, как я и описал.
With Selection.Interior не работает с переменной
 
Цитата
Юрий М написал: нет никакой необходимости ВЫДЕЛЯТЬ столбец/диапазон.
А как работать с выделением цветом без select? Чтобы залить цветом надо же сначала выделить диапазон, или нет?
With Selection.Interior не работает с переменной
 
А, я кажется знаю в чем проблема.. из поля формы нельзя передать таким образом значение в переменную видимо.
With Selection.Interior не работает с переменной
 
Можно конечно без select попробовать, но у меня каждый раз разный диапазон задаваемый из формы... мне казалось выделение проще и быстрее сделать столбцами.
With Selection.Interior не работает с переменной
 
Добрый день.
Есть, для примера, такой код. Он работает.

Код
Public Sub colorFill()
'
' colorFill Macro
'
    Columns("C:C").Select
    With Selection.Interior
        .PatternColorIndex = xlAutomatic
        .ThemeColor = xlThemeColorAccent3
        .TintAndShade = 0.399975585192419
        .PatternTintAndShade = 0
    End With
End Sub 
Как только я пытаюсь заменить строку Columns("C:C").Select на Columns(x & ":" & x).Select, у меня выскакивает сообщение об ошибке Compile Error: Expected Function or variable на строке Selection.

Переменная объявлена как Public x As String до самого Sub, значение x берется из формы, которая вызывается до этого кода.
Отдельно в другом модуле код работает, а вот так уже нет.
Код
PriceListAuto.Show
PriceListAuto.MaterialGroup = Split(Range("A1:CZ12").Find("òîâàð*ãð*").Address, "$")(1)
x = PriceListAuto.MaterialGroup
Columns(x & ":" & x).Select
With Selection.Interior
        .PatternColorIndex = xlAutomatic
        .ThemeColor = xlThemeColorAccent3
        .TintAndShade = 0.399975585192419
        .PatternTintAndShade = 0
End With

Не могу понять почему...
Заранее благодарю за помощь.
Изменено: invirtus - 29.06.2015 15:55:08
UserForms Modeless Type Mismatch Error, Ошибка в макросе при изменении параметра формы ShowModal с True на False
 
Код
Public Sub CommandButton1_Click()
'a = UserForm1.TextBox1
Columns(TextBox1 & ":" & TextBox1).Select
Me.Hide
End Sub

Спасибо Вам за помощь, всё заработало, если код засунуть в код кнопки.
UserForms Modeless Type Mismatch Error, Ошибка в макросе при изменении параметра формы ShowModal с True на False
 
Так тогда надо цифры вводить, а не буквы. Это не наглядно, т.к. все вокруг меня работают с буквенными индексами столбцов.

Вообще задача в чём. Есть большая таблица с информацией о товарах, в которой примерно 80-90 столбцов. Из этой таблицы люди руками вводят данные по товарам в SAP. Но для введения этих данных в SAP, все 80-90 столбцов не нужны. Я бы не заморачивался с выбором столбцов, если бы таблица была стандартизированная, но в ней, к сожалению, расположение и очередность столбцов не регулярная (как поставщик пришлёт). Я хотел через форму и макрос сделать выбор нужных столбцов и переворматирование этого в удобочитаемую таблицу.
Изменено: invirtus - 16.06.2015 11:38:01
UserForms Modeless Type Mismatch Error, Ошибка в макросе при изменении параметра формы ShowModal с True на False
 
Спасибо, но нет, это не помогает, т.к. не в этом дело, и + при таком коде нет возможности выделять столбцы вида AA и AAA.
Выше написали в чём проблема, но как решить я пока не знаю.
UserForms Modeless Type Mismatch Error, Ошибка в макросе при изменении параметра формы ShowModal с True на False
 
Цитата
Влад написал:
Ну и что непонятно? Немодальный режим формы продолжает выполнение макроса, который в результате получает пустое значение "а", отсюда ошибка.
Спасибо за пояснения, я не знал, что в случае немодального окна, макрос продолжает работу. А как тогда сделать, чтобы и выбор столбца был, и чтобы мне можно было прокручивать таблицу влево-вправо, чтобы выбрать нужный столбец?
Страницы: 1 2 След.
Наверх