2013-08-26 3 views
1

У меня есть следующий код, который обрабатывает событие двойного щелчка на одном из моих столбцов. В основном это столбец Notes, поэтому, когда пользователь дважды щелкает по нему, он выводит ввод и выводит примечание. Затем код VBA добавляет дату и вставляет ее в ячейку. Я хотел, чтобы Даты были выделены жирным шрифтом.Excel VBA Формирование потерянного при вставке символов

Однако, когда я впервые ввел комментарий, ячейка верна. Как это

23/08/2013: Привет там

, когда я дважды щелкните ячейку снова и ввести «Привет снова» вся клетка идет полужирный

23/08/2013: Привет там

23/08/2013: Привет снова

Я думаю, это потому, что я сбросить весь текст ячейки, а не добавление к тексту .. первоначально, следовательно, проигранного оригинал е ormatting.

Может ли кто-нибудь пролить идеи на это. Единственный способ, с помощью которого я мог бы заставить его работать, - это просмотреть и найти символ ctrl (10) и форматировать его таким образом, но его путь сверху.

пожеланиями D

Option Explicit 

Const STATUS_COL As Integer = 10 
Const NOTES_COL As Integer = 13 

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) 
Dim newVal As String 
Dim strNote As String 
Dim lngPos As Long 

If Target.Count > 1 Then GoTo exitHandler 

Application.EnableEvents = False 

On Error Resume Next 

If Target.Column = NOTES_COL Then 'Add a note 
    lngPos = Len(Target.Value) 

    strNote = InputBox(Prompt:="Enter Note", _ 
     Title:="Notes", Default:="") 

    If (Len(Trim(strNote)) > 0) Then 
     If Target.Value = "" Then 
      newVal = Date & ": " & strNote 
     Else 
      newVal = Target.Value + Chr(10) & Date & ": " & strNote 
     End If 
     Target.Value = newVal  'set the new value 

     Target.Characters(Start:=lngPos + 1, Length:=11).Font.Bold = True 
    End If 
End If 

exitHandler: 
    Application.EnableEvents = True 
End Sub 
+1

Вместо того, чтобы сбросить все значения ячейки, можно добавить содержимое, установив 'символов (старт: = [начать в конце существующего текста], длина: = [длина вашего нового текста]). Text = «content to add» ' –

+0

ok cool Tim ... Я думаю, это было то, что я искал. Я попытался создать еще один Range на лету и сформировать его и добавить его в целевой диапазон, но получил те же результаты, что и выше, поэтому я попробую ваш – Doiremik

+0

привет Тим ​​..., который работал с удовольствием и сохранил форму. Я знал, что я делаю неправильно, устанавливая всю ценность ... просто не знал, как сделать это правильно lol :-) Если вы добавите это в качестве ответа, я сразу приму его. Спасибо – Doiremik

ответ

2
Sub tester() 
    AddNote ActiveSheet.Range("A1"), "hello" 
    AddNote ActiveSheet.Range("A1"), "world" 
End Sub 


Sub AddNote(rng As Range, txt As String) 
    Dim l As Long, s As String 
    l = Len(rng.Value) 
    s = IIf(l > 0, Chr(10), "") & Format(Date, "mm/dd/yyyy") & ": " & txt 
    rng.Characters(l + 1, Len(s)).Text = s 
    rng.Characters(l + 1, 11).Font.Bold = True 
End Sub 
+0

еще раз спасибо Тим .. круто – Doiremik

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