Чтобы выполнить модификацию запросов, вам необходимо аннотировать метод с дополнительным @Modifying
, как описано в справочной документации следующим образом:
@Modifying
@Query("update Content v set v.published = false where v.division = :division and v.section = :section")
void unPublishContent(@Param("division") String division,
@Param("section") String section);
Вы не можете использовать глобальные объекты Excel изнутри Word без явной квалификации (они просто там не существуют). В частности, это означает, что вы не можете использовать Sheets
. Вы также должны явно объявлять типы переменных своих параметров, иначе они будут рассматриваться как Variant
. Это важно для ссылочных типов, поскольку это помогает предотвратить ошибки во время выполнения, потому что компилятор знает, что ключевое слово Set
требуется.
Sub divider(wb1 As Object, dt1 As Document)
Set dt1 = ThisDocument
If dt1.Paragraphs.Count > 65000 Then
Set cutrange = dt1.Range(dt1.Paragraphs(1).Range.Start, dt1.Paragraphs(65000).Range.End)
If wb1.Sheets(wb1.Sheets.Count).Cells(1, 1) <> "" Then
wb1.Sheets.Add After:=wb1.Sheets.Count
End If
Else
Set cutrange = dt1.Content
If wb1.Sheets(wb1.Sheets.Count).Cells(1, 1) <> "" Then
wb1.Sheets.Add After:=wb1.Sheets.Count
End If
End If
cutrange.Cut Destination:=wb1.Sheets(wb1.Sheets(wb1.Sheets.Count)).Cells(1, 1)
wb1.Sheets(wb1.Sheets.Count).Cells(1, 1).TextToColumns Destination:=wb1.Sheets(1).Cells(1, 1)
End Sub
Примечание. Вам также не нужно передавать dt1
вообще. Вы никогда не используете значение в параметре и фактически устанавливаете его на что-то еще. Это может быть источником ошибок, если вы используете внутренние вызовы, потому что dt1
неявно передается ByRef
(он получает бокс, когда вы вызываете его через Application.Run
). Это означает, что всякий раз, когда вы вызываете divider
, все, что вы передаете dt1
в вызывающем коде, будет изменено на ThisDocument
. Вы должны либо удалить параметр, либо указать, что он ByVal
.
Заимствован из другой ссылки SO.
Sub Sample()
Dim wdApp As Object, newDoc As Object
Dim strFile As String
strFile = "C:\Some\Folder\MyWordDoc.dotm"
'~~> Establish an Word application object
On Error Resume Next
Set wdApp = GetObject(, "Word.Application")
If Err.Number <> 0 Then
Set wdApp = CreateObject("Word.Application")
End If
Err.Clear
On Error GoTo 0
wdApp.Visible = True
Set newDoc = wdApp.Documents.Add(strFile)
Call wdApp.Run("YHelloThar", "Hello")
'
'~~> Rest of the code
'
End Sub
Set dt1 = wordapp.Documents.Open(wpath)
иdt1 = ThisDocument
оказываются разными: разве они не указывают на одно и то же? - но если это помогает, хорошо (что значит «вставить» и т.д.)? И ... э-э, какой тип переменной был бы cutrange be (является ли это той переменной, которую вы подразумеваете, я должен явно объявить?)? Я действительно не знаю, как работает слово vba, поэтому ближайший я могу догадаться, это строка ... Кроме того, я подумал, что если вы включите библиотеку excel, тогда вы можете использовать такие вещи, как листы и еще много чего. Должен ли я тогда просто разрезать его и вернуть его в макрос Excel? – Graham Perry 27 January 2017 в 20:41dt1
из Excel в Word. Первое, что вы делаете, это установить наThisDocument
. Не имеет значения, что это было в вызывающей функции. – Comintern 27 January 2017 в 20:42