2016-04-21 43 views
0

上午01時餵食數據從Excel VBA中的單詞的文檔。 1 要像下面的格式。調整爲同一段落的不同部分的字體 - Excel的VBA

1.服務票務#452345,Lorem存有胡蘿蔔,增強競爭本科,但occaecat賦予生命力,以 勞動和肥胖。

服務票據粗斜體部分,只有斜體描述。服務票據編號和說明來自在Excel中不同的細胞。

這裏是我的代碼:

'' Bookmark where I will be inserting the data. 
wdApp.Selection.GoTo what:=-1, Name:="Service_Ticket_Comments" 

Dim i As Integer 
Dim serviceTicket As String 

For i = 4 To shAuditTrail.Range("A4").End(xlDown).Row 


    '' Pulling comments from the comments column. 
    If Not IsEmpty(Cells(i, 11)) Then 

      serviceTicket = "Service Ticket #" & Cells(i, 1) 

      wdApp.Selection.TypeText "Service Ticket #" & Cells(i, 1) 
      wdApp.Selection.Font.Bold = True 
      wdApp.Selection.Font.Italic = True 


      wdApp.Selection.TypeText " - " & Cells(i, 11) & Chr(10) & Chr(10) 
      wdApp.Selection.Font.Italic = True 
    End If 

Next 

這使得服務票務部分和描述大膽italized因爲選擇適用於整片。什麼是1只保留了第一部分粗斜體,另一部分只是正常的?

回答

1

Selection工作,相反,當你在Excel會與Range,同樣的工作。

目前尚不清楚在Word文檔中的目標選擇從何而來,所以1別無選擇的使用爲出發點。但通常你只會使用這種技術,如果目標用戶選擇...

Dim rng as Word.Range 
Set rng = wdApp.Selection.Range 
rng.Text = serviceTicket 
rng.Font.Bold = True 
rng.Font.Italic = True 
rng.Collapse wdCollapseEnd 
rng.Text = Cells(i,11) & vbCr 
rng.Font.Bold = False 
rng.Font.Italic = True 

注意:您實際上應該創建/使用字符樣式格式化此,而非應用格式直接。這導致了比較有效的代碼和一個更易於管理的文件。

+0

您的代碼首先結塊所有服務票號,並隨後描述。 – Dombey

+0

我的代碼只是爲了演示如何使用Range對象中插入一些東西,格式化,否則插入一些東西,不同的格式化。您需要爲產生的服務號碼,並​​說明提供邏輯 - 1簡單地拉到一些信息從您的代碼礦山爲了給一些背景,以使其更容易理解。 –

0

使用InsertAfter

wdApp.Selection.TypeText "Service Ticket #" & Cells(i, 1) 
wdApp.Selection.Font.Bold = True 
wdApp.Selection.Font.Italic = True 

wdApp.Selection.InsertAfter " - " & Cells(i, 11) & Chr(10) & Chr(10) 
wdApp.Selection.Font.Bold = False 
wdApp.Selection.Font.Italic = True 
1

可以與範圍內的字符屬性單元格的格式特定字符。 (參見https://msdn.microsoft.com/en-us/library/office/ff198232.aspx) 例如,下面的程序將italicise和使所有的文本直到幷包括用於在所述範圍內的每個單元中的更小的搜索字符串。在這種情況下,所尋求的字符串也作爲參數傳遞。

Sub TestMacro() 
    Call BoldItalicsPartofCell(Selection, ":") 
End Sub 


Sub BoldItalicsPartofCell(rng As Range, searchstr) 
    Dim singlecell As Range  'Loop counter 
    Dim beforecolon As Integer 'Starting position of search string 

    For Each singlecell In rng 
     beforecolon = InStr(singlecell, searchstr) - 1 + Len(searchstr) 
     If beforecolon > 0 Then 
     With singlecell.Characters(Start:=1, Length:=beforecolon).Font 
      .FontStyle = "Bold Italic" 
      '.Underline = True 'If you want udnerlined as well! 
     End With 
     End If 
    Next 
End Sub 
0

這不是優雅,但1使它工作。

If Not IsEmpty(Cells(i, 11)) Then 

       With wdApp.Selection 

         .Paragraphs.Indent 
         .Font.Bold = True 
         .Font.Italic = True 
         .TypeText Chr(10) & Chr(10) & numList & ". " 


         .Font.Underline = True 
         .TypeText "Service Ticket #" & Cells(i, 1) & ":" 


         .Font.Bold = False 
         .Font.Underline = False 
         .TypeText " " & Cells(i, 11) 
         .Paragraphs.Reset 
       End With 

      numList = numList + 1 

    End If 
相關問題