Копировать абзац слова в ячейки Excel - PullRequest
0 голосов
/ 07 июня 2019

Я пытаюсь скопировать абзацы Word в ячейки Excel, но зависаю из-за ошибки времени выполнения 9: нижний индекс выходит за пределы допустимого диапазона.

Я искал.Все, что я прочитал, говорит, что не может найти файл, но файл находится в той же папке, и имя не написано неправильно, и расширение является правильным.Итак, я в тупике.Исходный код взят отсюда: Как скопировать отформатированный абзац из Word 2013 в Excel? .

    Private Sub Load_Schedule()
    Dim ParaCount As Integer
    Dim wDoc As Word.Document
    Dim wb As Workbook
    Dim ws As Worksheet
    Set wDoc = ActiveDocument
    Set wb = Workbooks("new.xlsm")        
    Set ws = wb.Sheets("Sheet1")
        ws.Activate
        ws.Columns(1).AutoFit
    For ParaCount = 1 To wDoc.Paragraphs.Count
        wDoc.Paragraphs(ParaCount).Range.FormattedText.Copy
        Sheets(ws).Cells(ParaCount, 1).PasteSpecial 
        Paste:=xlPasteFormats
    Next ParaCount
    End Sub

В этой строке появляется ошибка: Set wb = Workbooks ("new.XLSM ")

Ответы [ 2 ]

0 голосов
/ 07 июня 2019

Поскольку вы работаете с обоими приложениями, вы должны использовать полные объявления, такие как 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
0 голосов
/ 07 июня 2019

Вам необходимо указать полный путь к файлу Excel - вы говорите, что он совпадает со словом document, так что это будет работать:

Sub GetXLFileInWord()
Dim xl As Excel.Application
Set xl = New Excel.Application
Dim wb As Excel.Workbook
Set wb = xl.Documents.Open(ThisDocument.Path & "\new.xlsm")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...