Страницы: 1
RSS
VBA. Разное форматирование слов в тексте
 
У меня написан такой код, который обновляет дату в таком формате "за период с 1 июня 20 21 г. по 10 июня 20 21 г."

Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
   Range("A8") = "за период с " & Format(DateSerial(Year(Now), Month(Now) + 0, 0) + 1, "[$-FC22]D MMMM 20 YY г.") & " по " & Format(DateSerial(Year(Now), Month(Now) + 0, 0) + 10, "[$-FC22]D MMMM 20 YY г.")
   Range("A8").Characters(13, 1).Font.Italic = True
   Range("A8").Characters(15, 5).Font.Italic = True
   Range("A8").Characters(23, 2).Font.Italic = True
   Range("A8").Characters(32, 2).Font.Italic = True
   Range("A8").Characters(35, 5).Font.Italic = True
   Range("A8").Characters(43, 2).Font.Italic = True
   Range("A8").Characters(13, 1).Font.Underline = True
   Range("A8").Characters(15, 5).Font.Underline = True
   Range("A8").Characters(23, 2).Font.Underline = True
   Range("A8").Characters(32, 2).Font.Underline = True
   Range("A8").Characters(35, 5).Font.Underline = True
   Range("A8").Characters(43, 2).Font.Underline = True
 End Sub

Проблема в том, что при обновлении месяца форматирование ячейки искажается, допустим при наступлении сентября результат кода будет таким "за период с 1 сентября 20 21 г. по 10 сентября 20 21 г." Подскажите, что нужно поменять в коде, чтобы это исправить?

Изменено: vikttur - 14.06.2021 16:40:26
 
нужно во всех .Characters(13, 1)
константы 13, 1 (и прочие) заменить на переменные, а переменные вычислять
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Ігор Гончаренко, как это сделать?
 
нужно использовать все возможности компьютера для складывания чисел
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Ігор Гончаренко, извините, но я не очень то понимаю.
 
Код
    With Range("A8")
    .Value = "за период с " & Format(DateSerial(Year(Now), Month(Now) + 0, 0) + 1, "[$-FC22]D MMMM 20 YY г.") & " по " & Format(DateSerial(Year(Now), Month(Now) + 0, 0) + 10, "[$-FC22]D MMMM 20 YY г.")
    a = Split(.Value, " ")
        For i = 0 To UBound(a)
            Select Case i
            Case 3, 4, 6, 9, 10, 12
                With .Characters(b + 1, Len(a(i))).Font
                    .Italic = True
                    .Underline = True
                End With
            End Select
            b = b + Len(a(i)) + 1
        Next
   End With
По вопросам из тем форума, личку не читаю.
 
БМВ, а если с кавычками код
Код
"за период с " & Format(DateSerial(Year(Now), Month(Now) + 0, 0) + 1, "[$-FC22]« D » MMMM 20 YY г.") & " по " & Format(DateSerial(Year(Now), Month(Now) + 0, 0) + 10, "[$-FC22]« D » MMMM 20 YY г.")
то какие изменения надо внести в ваш код?
 
Цитата
Ибрагим Белхороев написал:
то какие изменения надо внести в ваш код?
код прост, Case 3, 4, 6, 9, 10, 12 это номера слов разделенных пробелом, от 0 и которые нужно форматировать.
По вопросам из тем форума, личку не читаю.
 
БМВ, понял, спасибо вам.
 
БМВ, я хотел реализовать ещё одну задачу с помощью вашего когда, у меня после слово "составляет" идёт сумма с другой книги эксель, как мне сделать ссылку на нее в этом коде?
Код
With Range("A19")
   .Value = _
   "1.1. Обязательство Субагента перед Агентом по перечислению выручки," _
   & "полученной от реализации перевозок по договору" _
   & "№13 – САГ от « 28 » августа 20 20 года, составляет "
    a = Split(.Value, " ")
        For i = 0 To UBound(a)
            Select Case i
            Case 4, 6, 8, 12, 14, 16
                With .Characters(b + 1, Len(a(i))).Font
                    .Italic = True
                    .Underline = True
                End With
            End Select
            b = b + Len(a(i)) + 1
        Next
   End With
Изменено: Ибрагим Белхороев - 15.06.2021 09:19:34
 
это совсем иная задача   тут
Цитата
Ігор Гончаренко написал:
заменить на переменные, а переменные вычислять
используя поиск , который, в свою очередь, основан на признаках по которым находятся те символы, которые нужно отформатировать. Но в указанном примере может быть что угодно и по одной строке судить о логике не возможно. если конечно фразы в тексте меняются, а если нет, то посчитайте  все остается также , считайте слова и указывайте в CASE
По вопросам из тем форума, личку не читаю.
 
БМВ, вы имеете в виду, что этим кодом невозможно реализовать указанную мной задачу?
 
Цитата
Ибрагим Белхороев написал:
БМВ, вы имеете в виду, что этим кодом невозможно реализовать указанную мной задачу?
я пока не вижу задачи.
По вопросам из тем форума, личку не читаю.
 
БМВ, вот же в сообщении #10 я обозначил.
 
БМВ, можете тогда подсказать, почему этот код не применяет форматирование к ячейке?
Код
 With Range("A8")
   .FormulaR1C1 = _
        "=CONCATENATE(""1.1. Обязательство Субагента перед Агентом по перечислению выручки," _
        & "полученной от реализации перевозок по договору" _
        & "№13 – САГ от « 28 » августа 20 20 года," _
        & "составляет"","" "",'[Реестр грузовых авианакладных копия1.xlsm]Итоговая декада'!R13C15,"" "",'[Реестр грузовых авианакладных копия1.xlsm]Итоговая декада'!R14C15,"","","" без НДС."")"
a = Split(.FormulaR1C1, " ")
        For i = 0 To UBound(a)
            Select Case i
            Case 4, 6, 8, 12, 14, 16
                With .Characters(b + 1, Len(a(i))).Font
                    .Italic = True
                    .Underline = True
                End With
            End Select
            b = b + Len(a(i)) + 1
        Next
   End With
Изменено: Ибрагим Белхороев - 15.06.2021 11:28:13
 
К ячейке код форматирование применяет, но вы то пытаетесь применить его к формуле.
 
RAN, но когда применяю к ячейке, все равно не работает?
Код
With Range("A8")
   .Value = _
        "=CONCATENATE(""1.1. Обязательство Субагента перед Агентом по перечислению выручки," _
        & "полученной от реализации перевозок по договору" _
        & "№13 – САГ от « 28 » августа 20 20 года," _
        & "составляет"","" "",'[Реестр грузовых авианакладных копия1.xlsm]Итоговая декада'!R13C15,"" "",'[Реестр грузовых авианакладных копия1.xlsm]Итоговая декада'!R14C15,"","","" без НДС."")"
a = Split(.Value, " ")
        For i = 0 To UBound(a)
            Select Case i
            Case 4, 6, 8, 12, 14, 16
                With .Characters(b + 1, Len(a(i))).Font
                    .Italic = True
                    .Underline = True
                End With
            End Select
            b = b + Len(a(i)) + 1
        Next
   End With
 
БМВ, можете глянуть и подсказать, что не так у меня?
Код
With Range("A8")
   .Value = _
        "=CONCATENATE(""1.1. Обязательство Субагента перед Агентом по перечислению выручки," _
        & "полученной от реализации перевозок по договору" _
        & " №13 – САГ от « 28 » августа 20 20 года," _
        & " составляет"","" "",'[Реестр грузовых авианакладных копия1.xlsm]Итоговая декада'!R13C15,"" "",'[Реестр грузовых авианакладных копия1.xlsm]Итоговая декада'!R14C15,"","","" без НДС."")"
a = Split(.Value, " ")
        For i = 0 To UBound(a)
            Select Case i
            Case 4, 6, 8, 12, 14, 16
                With .Characters(b + 1, Len(a(i))).Font
                    .Italic = True
                    .Underline = True
                End With
            End Select
            b = b + Len(a(i)) + 1
        Next
   End With
 
Цитата
Ибрагим Белхороев написал:
можете глянуть и подсказать, что не так у меня?
см. №16
 
RAN, но тут же тоже формула даты, почему в этом коде работает, а в другом нет?
Код
With Range("A8")
    .Value = "за период с " & Format(DateSerial(Year(Now), Month(Now) + 0, 0) + 1, "[$-FC22]D MMMM 20 YY г.") & " по " & Format(DateSerial(Year(Now), Month(Now) + 0, 0) + 10, "[$-FC22]D MMMM 20 YY г.")
    a = Split(.Value, " ")
        For i = 0 To UBound(a)
            Select Case i
            Case 3, 4, 6, 9, 10, 12
                With .Characters(b + 1, Len(a(i))).Font
                    .Italic = True
                    .Underline = True
                End With
            End Select
            b = b + Len(a(i)) + 1
        Next
   End With

 
Тут нет формулы даты, здесь есть вычисление значения макросом
 
RAN, а как тогда вычислить значения без формулы макросом в моём случае?
Страницы: 1
Наверх