Поскольку вы работаете с обоими приложениями, вы должны использовать полные объявления, такие как Word.Document
и Excel.Workbook
(если вы уже ссылались на соответствующие библиотеки).
На уже открытый файл Excel можно ссылаться без пути.
Параметр Paste:= ...
относится к предыдущей строке кода, поэтому вам необходимо добавить пробел + подчеркивание в конце предыдущей строки или объединить их в одну строку.
Пожалуйста, указывайте ячейку вашего рабочего листа по ws.Cells ...
, а не по Sheets(ws)
, так как ваш "ws" уже является объектом рабочего листа, а не строкой.
Дальнейший ответ зависит от того, запускаете ли вы код из Word-VBA или из Excel-VBA.
Слово VBA
Если вы хотите сослаться на файл Excel из Word-VBA, вам понадобится объект Excel.Application дополнительно.
Если Excel уже запущен, вы можете использовать существующий объект приложения - в противном случае вы создадите его и сделаете его видимым.
То же самое с вашим файлом Excel: если он уже открыт, используйте его, если нет - откройте его.
Private Sub LoadSchedule()
Dim ParaCount As Integer
Dim wDoc As Word.Document
Dim objExcel As Excel.Application
Dim wb As Excel.Workbook
Dim ws As Excel.Worksheet
On Error Resume Next
Set objExcel = GetObject(, "Excel.Application")
On Error GoTo 0
If objExcel Is Nothing Then
Set objExcel = CreateObject("Excel.Application")
objExcel.Visible = True
End If
On Error Resume Next
Set wb = objExcel.Workbooks("new.xlsm")
On Error GoTo 0
If wb Is Nothing Then
Set wb = objExcel.Workbooks.Open(objExcel.DefaultFilePath & "\new.xlsm")
' or ThisDocument.Path or whatever path
End If
Set wDoc = ActiveDocument
Set ws = wb.Sheets("Sheet1")
For ParaCount = 1 To wDoc.Paragraphs.Count
wDoc.Paragraphs(ParaCount).Range.FormattedText.Copy
ws.Cells(ParaCount, 1).PasteSpecial Paste:=xlPasteFormats
Next ParaCount
ws.Columns(1).AutoFit
'ws.Activate
End Sub
Excel VBA
В Excel вы можете попытаться ссылаться на уже открытый файл Word напрямую как ActiveDocument
, не получая приложение Word.Application дополнительно.
Private Sub LoadSchedule()
Dim ParaCount As Integer
Dim wDoc As Word.Document
Dim wb As Excel.Workbook
Dim ws As Excel.Worksheet
On Error Resume Next
Set wb = Workbooks("new.xlsm")
On Error GoTo 0
If wb Is Nothing Then
Set wb = Workbooks.Open(Application.DefaultFilePath & "\new.xlsm")
End If
Set wDoc = ActiveDocument
Set ws = wb.Sheets("Sheet1")
For ParaCount = 1 To wDoc.Paragraphs.Count
wDoc.Paragraphs(ParaCount).Range.FormattedText.Copy
ws.Cells(ParaCount, 1).PasteSpecial Paste:=xlPasteFormats
Next ParaCount
ws.Columns(1).AutoFit
'ws.Activate
End Sub