Прежде чем жаловаться, вам следует ознакомиться с правилами размещения сообщений на этом форуме.
Взглянув на код выше, вы последовательно добавляете текст в конец документа, указанного в MM, поскольку ссылаетесь на свойство Content.,По этой причине применяется следующий абзац.
Однако, если диапазон заканчивается знаком абзаца, который также является концом документа, Microsoft Word вставляет текст перед конечным знаком абзаца, а несоздание нового абзаца в конце документа.
Так что я чувствую вашу боль.Когда я пытаюсь вставить текст, такой как «Hello World», используя ActiveDocument.Content.InsertAfter «Hello World», он работает нормально.Таким образом, я могу только предположить, что текст, который вы получаете от Tabelle, имеет новую строку или некоторые другие невидимые символы, встроенные в начале текста ячейки.Я не могу проверить это, так как у меня нет копии вашего исходного документа.Что вы видите, когда включаете форматирование?(Нажмите на обратную букву «P» на вкладке абзаца и найдите текст ячейки, начинающийся с первой строки в ячейке, без явных символов «Zwielichtig» перед текстом, который вам действительно нужен.).
Ниже приведен вашкод, как я бы написал.
Опция Явная
Sub Schleife_VAR()
Dim Dok As Word.Document
Dim Tabelle As Table
Dim Cell As Range
'Dim counter As Integer
'Dim i As Integer
'Dim Number As Integer
Dim MM As Word.Document
'Dim j As Integer
Dim my_row As Word.Row
Dim my_cell1_text As String
Dim my_cell2_text As String
Dim Topic As String
Dim Total As String
'Set MM = Documents.Open("C:\Users) where is the rest?
Set MM = ActiveDocument
Set Dok = ThisDocument ' Bad practise. ThisDocument refers
' to the Document holding the macro code.
' Typically this is the Template on which the
' Document is based. Your usage may be different.
ActiveDocument.Content.InsertAfter "Hello World"
For Each Tabelle In Dok.Tables
'Number = Dok.Tables.Count
'counter = Dok.Tables(Number).Rows.Count
For Each my_row In Tabelle.Range.Rows
'For i = 1 To counter
my_cell1_text = my_row.Range.Cells(1).Range.Text
my_cell2_text = my_row.Range.Cells(2).Range.Text
Select Case my_cell1_text
Case "TOPIC"
'If InStr(1, Tabelle.Cell(i, 1).Range.Text, "TOPIC") Then
' Topic = Tabelle.Cell(i, 2).Range
Topic = my_cell2_text
Case "VAR"
' ElseIf InStr(1, Tabelle.Cell(i, 1).Range.Text, "VAR") Then
' Total = Topic & " " & "[" + Tabelle.Cell(i, 2).Range & "]"
Total = Topic & " [" & my_cell2_text & "]"
MM.Content.InsertAfter Total
Case "Filter"
' ElseIf InStr(1, Tabelle.Cell(i, 1).Range.Text, "FILTER") Then
' MM.Content.Paragraphs.Last.Range.Style = MM.Styles("Filter")
' MM.Content.InsertAfter "Filter: " & Tabelle.Cell(i, 2).Range
MM.Content.InsertAfter "Filter: " & my_cell2_text
MM.Content.Paragraphs.Last.Range.Style = MM.Styles("Filter")
Case "QUESTION"
' ElseIf InStr(1, Tabelle.Cell(i, 1).Range.Text, "QUESTION") Then
' MM.Content.Paragraphs.Last.Range.Style = MM.Styles("Question")
' MM.Content.InsertAfter Tabelle.Cell(i, 2).Range
MM.Content.InsertAfter my_cell2_text
MM.Content.Paragraphs.Last.Range.Style = MM.Styles("Question")
Case Else
' Do nothing ?
End Select
MM.Content.Paragraphs.Last.Range.Style = MM.Styles("Remark")
Next
Next
' There is no selection made in this method so I don't know to what the next line is referring.
Selection.Range.Case = wdTitleSentence
End Sub
Ниже приведена функция, которая удаляет любые хитрые символы из строки.Я использую его для санации имен файлов.
Public Function Sanitise(ByVal this_string As String) As String
Dim my_regex As VBScript_RegExp_55.RegExp
Set my_regex = New VBScript_RegExp_55.RegExp
my_regex.Global = True
my_regex.MultiLine = True
my_regex.Pattern = "[^\\\w:\.]"
Sanitise = my_regex.Replace(this_string, vbNullString)
End Function
Что вы можете использовать, чтобы сделать
my_cell2_text= Sanitise(my_row.Range.Cells(2).Range.Text)
, чтобы посмотреть, излечит ли это вашу проблему.