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

Страницы: 1 2 След.
При замене символа в ячейке "слетает" оформление, При замене символов в ячейке все оформление по шрифтам сбрасывается
 
Данные приходят в том первоначальном виде как есть. В ячейке есть вот такая информация:

Категория 1
подкатегория 1
подкатегория 2
подкатегория 3

Категория 2
подкатегория 1
подкатегория 2
подкатегория 3

Я думаю слишком замарочный алгоритм получается для разпознования каждой строки сначала по строке переноса, потом анализ подстроки, что там есть какой-то текст и потом уже делать какие-то выводы. Поэтому лучшим решением пока нашли, обернуть сами категории в какие-то символы, которые и не видны и по ним можно искать.

_Boroda_,  попробую Ваш вариант и отпишусь позже.

Просто для меня было удивлением, что при замене значения весь текст окрашивается. Видимо специфика Excel.
Спасибо всем откликнувшимся за помощь.
Изменено: _andrew_ - 30.11.2022 13:56:15
При замене символа в ячейке "слетает" оформление, При замене символов в ячейке все оформление по шрифтам сбрасывается
 
Цитата
написал:
у неразрывного пробела такая же ширина как и у обычного, код этого символа 160 и Excel, в отличие от пользователя,  замечательно его видит)
как латинская а "эй" и кириллическая а "а" ничем не отличаются на вид, так и неразрывный и обычный пробел на вид не отличимы,  только это знаки с разными кодами
Я возможно не так выразился. Неразрывный пробел - это все таки пробел и он виден. А есть нерарывный пробел с нулевой шириной (https://ru.wikipedia.org/wiki/%D0%9D%D0%B5%D1%80%D0%B0%D0%B7%D1%80%D1%8B%D0%B2%D0­%BD%D1%8B%D0%B9_%D0...)
Он никак не выдает себя и найти его уже Excel не может, так как его код 8288.
Откуда я выгружаю эти данные я могу такой символ в юникоде поставить, но Excel его не знает, либо за ним закреплено какоем-то другое название, которое я не знаю.
При замене символа в ячейке "слетает" оформление, При замене символов в ячейке все оформление по шрифтам сбрасывается
 
Цитата
написал:
1. откажитесь от табуляторов, усложните написание макроса
или
2. замените директора на такого, которого не раздражают табуляторы в тексте
или
3. вместо табуляторов поставьте неразрывные пробелы, переделайте чуть макрос и не говорите о пробелах директору
Использование табуляторов оправдано тем, что пока не щелкнешь на ячейку, то все выглядит корректно. Только при щелчке на ячейку ты видишь эти отступы. Неразрывный пробел с нулевой шириной поставить могу, но Excel не видит его (у него нет такого кода в таблице). А Неразрывный пробел визуально все равно показывает их. Но за наводку спасибо.
Изменено: _andrew_ - 30.11.2022 09:13:19
При замене символа в ячейке "слетает" оформление, При замене символов в ячейке все оформление по шрифтам сбрасывается
 
Добрый день всем.
Суть задачи: выгружается список категорий и подкатегорий в одну ячейку. Нужно Категории выделить жирным шрифтом, подкатегории обычным. Пример:

Категория 1
подкатегория 1
подкатегория 2
подкатегория 3

Категория 2
подкатегория 1
подкатегория 2
подкатегория 3

Сами данный выгружаются в таком же виде, только без выделения. Были добавлены символы табуляции вокруг Категорий для облегчения написания макроса. Макрос срабатывает каждый раз, когда мы переключаемся на страницу, когда активизируем.

Текст макроса:
Код
Public Sub boldFontTargets()
    Dim actSheet As Worksheet
    Dim startPos, endPos, countSymbol As Integer
    Dim flag, flagBold As Boolean
    Dim searchStr, newValue As String
        
    Set actSheet = ThisWorkbook.ActiveSheet
    flag = True
    endPos = 0
    startPos = 0
    flagBold = True
    searchStr = vbTab
    
    While flag
        If (startPos = 0) Then
            startPos = InStr(1, actSheet.Cells(5, 3), searchStr)
        End If
        endPos = InStr(startPos + 1, actSheet.Cells(5, 3), searchStr)
        
        If (endPos = 0) Then
            countSymbol = Len(actSheet.Cells(5, 3)) - startPos
        Else
            countSymbol = endPos - startPos
        End If
        
        If (IsNumeric(startPos) And IsNumeric(endPos) And startPos > 0 And endPos > 0) Then
            With actSheet.Cells(5, 3).Characters(startPos, countSymbol).Font
                .Bold = flagBold
            End With
            startPos = endPos
            flagBold = Not flagBold
        Else
            flag = False
        End If
    Wend
  
End Sub

Хотя табуляторы и не видно, но когда переключаешься на ячейку, то директору не понравилось.
Так вот, когда я в макросе пишу заменить табуляторы на пустышку, то весь текст в ячейке становится просто жирным.
Пытался записать ручным макросом - тоже самое. Такое чувство, что при замене все оформление сбивается.
Подскажите и дайте совет.

Заранее благодарен
Отформатировать данные для дальнейшей печати (автоматизация вычисления области печати), Необходимо сформировать таблицу с шапкой и подписями для печати на нескольких страницах
 
Ребята, скажите как Вам в карму добавить +100 очков? ))) Очень выручили намеками как в дальнейшемм все это докрутить.
Я почему-то думал, что будут какие-то стандартные методы, но не нашел, увы.
Еще раз спасибо
Изменено: _andrew_ - 17.05.2022 08:18:11
Отформатировать данные для дальнейшей печати (автоматизация вычисления области печати), Необходимо сформировать таблицу с шапкой и подписями для печати на нескольких страницах
 
Добрый день всем.
Проблема в следующем:
Имеется таблица с 100 строками. У таблицы есть название и наименование столбцов. А также под таблицей пишется номер страницы и логотип фирмы.

Я могу установить сквозные строки для страниц и на печать будет выводиться и шапка, и "подвал".
Но нужно сформировать эти данные на самом листе, так как пользователи копируют эту информацию в какие-то отчеты.

На листе "Как есть" - отображена информация, которая сейчас выгружается из системы в таком виде.
На листе "Как должно быть" - показано как она должна быть сформирована на самом листе и выводиться на печать, соответственно.
Область печати задается, так чтобы все столбцы влезли. Вся проблема со строками.
Наведите на мысль, как это можно сделать: как вычислить последнюю строку на первой странице, подсчитать сколько строк выводится на печать и прочее.
Подсчитать количество выводимых на печать страниц в исходном варианте я могу, что сделать дальше нужно, чтобы информация вмешалась на лист.
Группировка: как узнать, что данная строка является "родителем" группы?
 
БМВ,
Ну вот эту тонкость я и подметил с шрифтом. Но у меня нет гарантии, что в следующий раз поставщик ничего не поменяет.

Всем спасибо за ответы. Направили куда нужно )
Группировка: как узнать, что данная строка является "родителем" группы?
 
БМВ, Пытливый, спасибо за помощь. Я теперь знаю куда копать.

Одна только проблема - так как Excel не позволяет вложенность больше 8, то надо будет разобраться с ячейками, которые внутри списка появляются не сгнруппированные. В примере это "ВК черный".

P.S.: скажите, где Вы все это находите? Внутренний помощник не подсказывает такие функции, а литературы толковой я не нашел (((
Изменено: _andrew_ - 13.12.2017 04:47:04
Группировка: как узнать, что данная строка является "родителем" группы?
 
Добрый день всем.

Есть такая задача: есть лист Excel, где сгруппированны строки до максимального уровня. Причем у некоторых позиций уровень вложенности меньше. Каким образом мне узнать, что данная строка является "родителем" группы, чтобы обработать нужные строки?

Пример файла прикладываю.
Заранее благодарен за ответы.
Передача в качестве параметра элемента TextBox
 
Если подскажите как отвечать на конкретное сообщение, чтобы не потерялась суть, буду признателен.
Передача в качестве параметра элемента TextBox
 
Jungl, надо попробовать
Изменено: _andrew_ - 17.09.2017 08:56:35 (не соответствие правилам форума)
Передача в качестве параметра элемента TextBox
 
прошу прощения, замотался и поздно было.
Передача в качестве параметра элемента TextBox
 
Здравствуйте.
Подскажите, как осуществить следующее:
1. на форме есть первая группа OptionButtion и связанный с ними TextBox1. При выборе первой радиокнопки и двойном клике на TextBox1 я получаю форму открытия файла, при выборе второй радиокнопки и двойном клике в TextBox1 я получаю форму выбора директории.
2. Затем есть 2 группа радиокнопок и свой TextBox2. При выборе 1 радиокнопки TextBox2 скрывается (будет происходить перезапись файлов), при выборе второй радиокнопки появляется TextBox2 и при двойном клике в нем вызывается окно выбора каталога (сохранения в другую директорию файлов).
3. Написана процедура, по выбору каталога
Код
Private Sub ChoiceCatalog()
    Dim oDir As FileDialog
    Dim DirCatalog, SaveFileName
    
    Set oDir = Application.FileDialog(msoFileDialogFolderPicker)
        With oDir
            .Title = "Выбрать каталог"
            .ButtonName = "выбрать каталог"
            .Filters.Clear
            .InitialView = msoFileDialogViewLargeIcons
            
            If oDir.Show = 0 Then Exit Sub
            DirCatalog = .SelectedItems(1)
            fMain.tbPath.Value = DirCatalog
        End With
    
End Sub
Я хочу использовать ее для двух TextBox. Но в значения этих TextBox должны попадать свои пути.

Как передать в качестве параметра саму форму или элемент, который вызвал эту процедуру, чтобы уже в этот элемент и записать значение? В коде это строчка перед End With
Код
fMain.tbPath.Value = DirCatalog
Поиск значений X при известных значениях Y, Как найти X при известных значениях Y, где Y выражается через X кубическим уравнением
 
поиск корней по вашим данным для положительного дискриминанта по теореме виета
Поиск значений X при известных значениях Y, Как найти X при известных значениях Y, где Y выражается через X кубическим уравнением
 
Цитата
DeniSlav написал:
На другом форуме мне вывели формулу через MathCad, но там проблема, то, что при значениях y ниже 0,59 под корнем получается отрицательное значение, в результате чего вылетает ошибка.
1. ну так сделайте проверку на положительность полученных корней.
2. а как выбрать корень, если их 2, попадающих в этот диапазон? см. сообщение 9 с графиком для Y=0.59
3. Может есть какие-то дополнительные условия ?
VBA_массив в виде строки
 
Цитата
Ливиан написал:
myArr(1, 0, 5)= {1;2:3;4:5;6:7;8}
так массив не заполняют в vba

Если пристрастие к фигурным скобкам, то так делай
Код
Dim doubles = {1.5, 2, 9.9, 18}


Если ты в элемент загоняешь массив, то и обращаться потом придется по индексу. Делая так:
Код
myArr(1, 0, 5)= {1,2,3,4,5,6,7,8}

ты получишь, что у тебя в элементе (1,0,5) будет храниться массив и чтобы достать нужное значение, надо пробежаться внутри него. VBA не будет за тебя расширять диапазон массива. Это надо отдельно прописывать.
Цитата
Ливиан написал:
Думал, в Excel раз можно в формулах на рабочем листе такое использовать

Каким образом? Скажи, может натолкнет на мысль
VBA_массив в виде строки
 
Цитата
Ливиан написал:
я так уже делал, хотел именно многомерный присвоить, но без предварительного его создания... Судя по всему, единственный вариант сначала создать а потом присвоить
Если вы не создали массив, то как ему можно что-то присвоить?
а где и как должна выглядеть многомерность ?
Поиск значений X при известных значениях Y, Как найти X при известных значениях Y, где Y выражается через X кубическим уравнением
 
Цитата
Андрей VG написал:
В файле Y=4x(1-x)^2, то есть функция всегда одна, а вот для различных y нужно найти неизвестные x.
Вот в файле как раз этот столбец и вычисляется видимо где-то по этой функции. И там столбец этих значений. И по ним нужно решить обратную задачу, найти Х которые удовлетворяют.  
Поиск значений X при известных значениях Y, Как найти X при известных значениях Y, где Y выражается через X кубическим уравнением
 
Цитата
Андрей VG написал: Зачем же для данного уравнения так глубоко?
Ну это справедливо для нулевого свободного члена. А у него он меняется. А значит и корни пляшут. Вот скрины для нулевого значения свободного члена
увы... удалены: превышение допустимого размера вложения [МОДЕРАТОР]
, и для следующего в столбце. Там уже 2 корня попадают в его диапазон. И по какому принципу их отделять - не знаю
Поиск из 2х Listbox ов
 
"Could not load an object because is it not available on this machine."

Что за объект??? Макрос не срабатывает из-за него (

И можно конкретизировать что Вы хотите? Потому что в Листбоксе2 нету месяцев..
Изменено: _andrew_ - 04.04.2016 08:04:24
VBA_массив в виде строки
 
Код
'объявляю массив
  Dim myArr()
'задаю размерность массива
  ReDim myArr(2, 9, 9)
'присваиваю значение элементу массива 1,0,5 - массив нужный
  myArr(1, 0, 5) = Array(1, 2, 3, 4, 5, 6, 7)
вот так попробуй, а дальше думай куда копать )
VBA_массив в виде строки
 
ну для таких операций у тебя myArr должен иметь тип Variant, иначе ругнется. И элементы в массиве через ";" нужно проставить
вот ссылки из справки
https://msdn.microsoft.com/ru-ru/library/wak0wfyt.aspx
https://msdn.microsoft.com/ru-ru/library/hkhhsz9t(v=vs.90).aspx
на просторах инета
http://perfect-excel.ru/publ/excel/makrosy_i_programmy_vba/massivy_v_vba/7-1-0-74#link_11

я даже пример придумать не могу для трехмерного массива массивов, как ты хочешь сделать, чтобы посмотреть как работает
Поиск значений X при известных значениях Y, Как найти X при известных значениях Y, где Y выражается через X кубическим уравнением
 
DeniSlav, думаю Вам стоит капать в сторону "Решение кубических уравнений". У вас на каждый Y вылезет как минимум 3 X. И может получиться либо все 3 вещественных, либо 1 вещественный, а 2 других комплексно сопряженных, либо корень кратный.
Вот информация
https://ru.wikipedia.org/wiki/%D0%9A%D1%83%D0%B1%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0­%BE%D0%B5_%D1%83%D1...
https://ru.wikipedia.org/wiki/%D0%A4%D0%BE%D1%80%D0%BC%D1%83%D0%BB%D0%B0_%D0%9A%D­0%B0%D1%80%D0%B4%D0...

Попробуйте в Вашем файле сделать дополнительные столбцы и посчитать в них параметры. Либо все это можете делать макросом )

Конкретно в вашем случае, по тем данным что Вы предоставили - везде дискриминант будет 0, а значит у вас будет 2 корня ТОЧНО совпадут, а другой отличный от них, либо может быть равен им.
Вот тут написано решение, через замену
http://ateist.spb.ru/mw/kardano.htm
Изменено: _andrew_ - 04.04.2016 07:18:54
VBA_массив в виде строки
 
Что Вы имеете в виду в виде строки? Конкретизируйте для каких целей это нужно
Вот ссылка о работе с многомерными массивами http://on-line-teaching.com/vba/lsn0120.html
Обновление данных в ComboBox на листе
 
пример
Обновление данных в ComboBox на листе
 
Цитата
The_Prist написал: Так а зачем Вы после создания объекта вызываете Call UpdateCmBxes?
Это я уже от отчаяния понять, почему не работает, решил просто вызвать туже процедуру, что запускается при старте книги. Ни с ней, ни без нее не получается все равно получить результат, что при добавлении CB сразу становился членом класса.
Файл не могу прикрепить, он больше предельного размера, разрешенного правилами. Да и информация все-таки есть личная. Сократить его на скорую руку не могу. Попробую завтра написать пример коротенький со всеми процедурами, что описал выше. Насколько я читал по форуму, такой проблемы нет, если эти элементы добавлять на форму.  
Обновление данных в ComboBox на листе
 
Делал:

объявление массива объектов
Код
Public aoCmbBxes() As new clsmCmbBxes

процедура обновления CB
Код
Public Sub UpdateCmBxes()
  Dim sh_tmp As Worksheet
  Dim elem As OLEObject, cb As Object
  Dim nom&


  ReDim aoCmbBxes(1 To 1)
  nom = 1
  For Each sh_tmp In ThisWorkbook.Worksheets
    For Each elem In sh_tmp.OLEObjects
      Set cb = elem.Object
      If TypeName(cb) = "ComboBox" Then
        ReDim Preserve aoCmbBxes(1 To nom)
        Set aoCmbBxes(UBound(aoCmbBxes)).oCmbBx = elem.Object
        nom = nom + 1
      End If
    Next elem
  Next sh_tmp
End Sub
добавление CB
Код
  sName = "tut moye nazvanie"
  nom = UBound(aoCmbBxes) + 1
  ReDim Preserve aoCmbBxes(1 To nom)
  
  Set obj = sh_now.OLEObjects.Add(ClassType:="Forms.ComboBox.1", Link:=False, _
      DisplayAsIcon:=False, Left:=lCB, Top:=tCB, Width:=wCB, _
      Height:=hCB)
  obj.Name = sName
  Set aoCmbBxes(UBound(aoCmbBxes)).oCmbBx = obj
  
  Call UpdateCmBxes
класс
Код
Option Explicit
Public WithEvents oCmbBx As MSForms.ComboBox


Private Sub oCmbBx_Change()
      'delau 4to-to
End Sub

Результат тот же самый - при добавлении никак не реагирует, а при перезапуске книги, все обновляет.
Обновление данных в ComboBox на листе
 
Насчет имени я конечно сглупил. От имени комбобокса у меня зависит какие списки ему подсовывать, поэтому я немного видоизменил для себя:
Код
Set aoCmbBxes = New clsmCmbBxes

Set obj = sh_now.OLEObjects.Add(ClassType:="Forms.ComboBox.1", Link:=False, _
      DisplayAsIcon:=False, Left:=lCB, Top:=tCB, Width:=wCB, _
      Height:=hCB)
obj.Name = sName

aoCmbBxes.oCmbBx = obj

но события класса не работают все равно сразу при добавлении элемента (
Обновление данных в ComboBox на листе
 
На листе программно, по нажатию кнопки добавляются ComboBox. При открытии книги все ComboBox присваиваются классу (у которого прописано одно событие Change), и во всех них обновляются списки данных:
Код
Public aoCmbBxes As clsmCmbBxes
Public clCmBxes As New Collection

For Each sh_tmp In ThisWorkbook.Worksheets
  For Each elem In sh_tmp.OLEObjects
    Set cb = elem.Object
    If TypeName(cb) = "ComboBox" Then
      Set aoCmbBxes = New clsmCmbBxes
      Set aoCmbBxes.oCmbBx = cb
      clCmBxes.Add aoCmbBxes
    End If
  Next elem

Next sh_tmp

Вся эта конструкция хорошо отрабатывает для обновления списков, но при открытии книги. Когда же в программе я создаю новый комбобокс, то он никак не хочет попадать в класс, чтобы для него отрабатывалось событие (((
Пробовал разные варианты:

1.добавление нового элемента класса и присваивание ему нового CB
Код
Set aoCmbBxes = New clsmCmbBxes
Set aoCmbBxes.oCmbBx = list.OLEObjects.Add(ClassType:="Forms.ComboBox.1", Link:=False, _
      DisplayAsIcon:=False, Left:=lCB, Top:=tCB, Width:=wCB, _
      Height:=hCB).Name = sName

2.Добавление CB на лист, и обновление всех CB на листах, как в процедуре выше
Код
list.OLEObjects.Add(ClassType:="Forms.ComboBox.1", Link:=False, _
      DisplayAsIcon:=False, Left:=lCB, Top:=tCB, Width:=wCB, _
      Height:=hCB).Name = sName

Call UpdateCB

Но этот новосозданный комбобокс никак не хочет попадать в класс ((( и соответственно не отрабатывает событие. Только после перезапуска книги. Продебагить по шагам не могу, так как в этот момент видимо включается Конструктор где-то и выскакивает сообщение " can't break mode at this time"

Помогите )
Изменено: _andrew_ - 23.03.2016 12:43:23
Получение имени элемента из процедуры, как получить имя элемента...
 
Цитата
Sanja написал:
Какой вопрос - такой ответ. Если-бы сразу спросили то, что Вам нужно, а не то как Вы это пытаетесь решить, получили-бы соответствующий ответ
Прошу прощения за неполное описание проблемы. Все работает и в Вашем примере, но большое спасибо за ссылку. Понятно теперь куда копать. Вопрос закрыт )
Страницы: 1 2 След.
Loading...