2016-07-27 3 views
0

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

У меня есть документ с несколькими столами на нем. Я использую пользовательскую форму для поиска таблиц/подкатегорий и возвращаю соответствующие значения. Я хочу выбрать подкатегории с диапазоном кнопок выбора в пользовательской форме, это, в свою очередь, позволит установить диапазон поиска для поиска. Я также хочу динамически обновлять кнопки параметров, если новая таблица должна быть добавлена ​​или что-то в этом направлении.

Единственное, что отличает название подкатегории/таблицы и элементов внутри нее, состоит в том, что заголовок подкатегории/таблицы выделен жирным шрифтом. Так что я ищу, чтобы выполнить поиск первого столбца таблицы и вернуть имена любых элементов, выделенных жирным шрифтом. Эти значения затем используются для установки имен кнопок опций :).

Следующая функция - это попытка найти текстовые объекты в столбце a, выделенные жирным шрифтом, возвращая их и назначая каждому индивидуальную переменную, которая будет использоваться в другой функции. Переменные bold1 .... представляют собой глобально определенные переменные, так как они мне нужны в другом суб, как и переменная page, которая содержит соответствующую страницу для использования. В настоящее время код возвращает ошибку с указанием «переменной или с неблокированным блоком», и с помощью отладчика я вижу, что bold1 .... и все остальные переменные boldx не имеют значения. Кто-нибудь знает, что происходит/как исправить эту функцию.

Заранее спасибо :)

Sub SelectBold() 
    Dim Bcell As Range 
    For Each Bcell In Worksheets(Page).Range("A1:A500") 
     If Bcell.Font.Bold = True Then 
      Set bold1 = Bcell 
     End If 
    Next 
End Sub 

EDIT: Я упростил выше функцию, чтобы удалить беспорядок и поможет сократить в этом вопросе. Я хочу, чтобы вышеуказанная функция сохраняла содержимое найденной ячейки (любая ячейка в документе, выделенная жирным шрифтом на данном этапе) в переменной bold1

+0

Как и найти их, храните в массиве 2d (имя, номер строки) –

+0

Похоже, хорошая идея :), я дам ему попробовать и отчитаться, я все еще учусь, пожалуйста, простите плохой код. – Morlo4

+0

Когда вы получаете ошибку? Выполняя субтитры 'SelectBold' или другое под? Как и где (модуль) объявляются переменные? – arcadeprecinct

ответ

0

Это вернет массив значений из жирных ячеек в столбце A страницы.

Вы можете заполнить поле со списком или списком с его значениями, используя их свойство списка.

ComboBox1.List = getSubCategories ("Лист1")

Function getSubCategories(Page As String) As String() 

    Dim arrSubCategories() As String 
    Dim count As Long 
    Dim c As Range 

    With Worksheets(Page) 
     For Each c In .Range("A2", .Range("A" & Rows.count).End(xlUp)) 
      If c.Font.Bold Then 
       ReDim Preserve arrSubCategories(count) 
       arrSubCategories(count) = c.Value 
       count = count + 1 
      End If 
     Next 
    End With 

    getSubCategories = arrSubCategories 
End Function 
+0

Спасибо, решение на основе массива - это путь ! Он сделал все, что нужно, чтобы избежать множества переменных. – Morlo4

+0

Рад, что я мог бы помочь! –

0

может оказаться полезным, чтобы иметь Range вернулся с подкатегориями клеток найдено:

Function SelectBold(Page As String, colIndex As String) As Range 
    With Worksheets(Page) 
     With .Range(colIndex & "1", .Cells(.Rows.Count, colIndex).End(xlUp)).Offset(, .UsedRange.Columns.Count) 
      .FormulaR1C1 = "=if(isbold(RC[-1]),"""",1)" 
      .Value = .Value 
      If WorksheetFunction.CountA(.Cells) < .Rows.Count Then Set SelectBold = Intersect(.SpecialCells(xlCellTypeBlanks).EntireRow, .Parent.Columns(1)) 
      .Clear 
     End With 
    End With 
End Function 

Function IsBold(rCell As Range) 
    IsBold = rCell.Font.Bold 
End Function 

быть, возможно, эксплуатировал следующим образом:

Option Explicit 

Sub main() 
    Dim subCategoriesRng As Range, cell As Range 

    Set subCategoriesRng = SelectBold(Worksheets("bolds").Name, "A") '<--| pass worksheet name and column to search in 

    If Not subCategoriesRng Is Nothing Then 
     For Each cell In subCategoriesRng '<--| loop through subcategories cells 
      '... code 
     Next cell 
    End If 
End Sub 
+0

@ Morlo4: ты прошел через это? – user3598756

+0

Да, в конце концов, спасибо, хотя я не использовал ваше решение, так сказать, это помогло мне понять, как это работает! – Morlo4

+0

Публикация решения может помочь другим людям – user3598756

Смежные вопросы