将 excel 范围内的导出保存到 Word 并另存为单元格 A1 中的名称
Save export from range in excel to Word and save as name in Cell A1
我现在正在使用 excel 中的宏将一系列单元格导出到 Word 中。
有一些变化,因为我需要它来将其复制到新的 Word 文档而不是脚本中的现有文档?
我选择的范围由各种 Vlookup 结果组成。
此外,如果可能的话,我希望将文件名设为 A1 中的任何名称。
Sub Export_Table_Data_Word()
'Name of the existing Word document
Const stWordDocument As String = "Table Report.docx"
'Word objects.
Dim wdApp As Word.Application
Dim wdDoc As Word.Document
Dim wdCell As Word.Cell
'Excel objects
Dim wbBook As Workbook
Dim wsSheet As Worksheet
'Count used in a FOR loop to fill the Word table.
Dim lnCountItems As Long
'Variant to hold the data to be exported.
Dim vaData As Variant
'Initialize the Excel objects
Set wbBook = ThisWorkbook
Set wsSheet = wbBook.Worksheets("Sheet1")
vaData = wsSheet.Range("A1:A10").Value
'Instantiate Word and open the "Table Reports" document.
Set wdApp = New Word.Application
Set wdDoc = wdApp.Documents.Open(wbBook.Path & "\" & stWordDocument)
lnCountItems = 1
'Place the data from the variant into the table in the Word doc.
For Each wdCell In wdDoc.Tables(1).Columns(1).Cells
wdCell.Range.Text = vaData(lnCountItems, 1)
lnCountItems = lnCountItems + 1
Next wdCell
'Save and close the Word doc.
With wdDoc
.Save
.Close
End With
wdApp.Quit
'Null out the variables.
Set wdCell = Nothing
Set wdDoc = Nothing
Set wdApp = Nothing
MsgBox "The " & stWordDocument & "'s table has succcessfully " & vbNewLine & _
"been updated!", vbInformation
End Sub
更新:
感谢尼古拉斯的帮助。最终脚本下方:
Sub OLDMACROADJUSTED()
'Word objects.
Dim wdApp As Word.Application
Dim wdDoc As Word.Document
Dim wdCell As Word.Cell
'Excel objects
Dim wbBook As Workbook
Dim wsSheet As Worksheet
'Count used in a FOR loop to fill the Word table.
Dim lnCountItems As Long
'Variant to hold the data to be exported.
Dim vaData As Variant
'File path based on A1'
Dim filePath As String
filePath = "C:\FolderName\" & Cells(1, 1).Value & ".doc"
'Initialize the Excel objects
Set wbBook = ThisWorkbook
Set wsSheet = wbBook.Worksheets("Sheet1")
vaData = wsSheet.Range("A1:A10").Value
'Instantiate Word and open the new file.
Set wrdApp = CreateObject("Word.Application")
Set wrdDoc = wrdApp.Documents.Add 'Create new app instead of open'
lnCountItems = 1
Dim c As Range
For Each c In Range("B3:B7")
wrdDoc.Content.InsertAfter c
Next c
'Place the data from the variant into the table in the Word doc.
'For Each wdCell In wdDoc.Tables(1).Columns(1).Cells
'wdCell.Range.Text = vaData(lnCountItems, 1)
'lnCountItems = lnCountItems + 1
'Next wdCell
'Save and close the Word doc.
With wrdDoc
If Dir(filePath) <> "" Then
Kill filePath
End If
.SaveAs (Range("B3").Value)
.Close ' close the document
End With
'wdApp.Quit
'Null out the variables.
Set wdCell = Nothing
Set wdDoc = Nothing
Set wdApp = Nothing
MsgBox "Your file has been saved in default location of the macro...", vbInformation
End Sub
试试这个代码:
Sub Export_Table_Data_Word()
'Name of the existing Word document
' Const stWordDocument As String = "Table Report.docx"
'Word objects.
Dim wdApp As Word.Application
Dim wdDoc As Word.Document
Dim wdCell As Word.Cell
'Excel objects
Dim wbBook As Workbook
Dim wsSheet As Worksheet
'Count used in a FOR loop to fill the Word table.
Dim lnCountItems As Long
'Variant to hold the data to be exported.
Dim vaData As Variant
'File path based on A1'
Dim filePath As String
filePath = "C:\FolderName\" & Cells(1, 1).Value & ".doc"
'Initialize the Excel objects
Set wbBook = ThisWorkbook
Set wsSheet = wbBook.Worksheets("Sheet1")
vaData = wsSheet.Range("A1:A10").Value
'Instantiate Word and open the new file.
Set wrdApp = CreateObject("Word.Application")
Set wrdDoc = wrdApp.Documents.Add 'Create new app instead of open'
lnCountItems = 1
'Place the data from the variant into the table in the Word doc.
For Each wdCell In wdDoc.Tables(1).Columns(1).Cells
wdCell.Range.Text = vaData(lnCountItems, 1)
lnCountItems = lnCountItems + 1
Next wdCell
'Save and close the Word doc.
With wrdDoc
If Dir(filePath) <> "" Then
Kill filePath
End If
.SaveAs (filePath)
.Close ' close the document
End With
wdApp.Quit
'Null out the variables.
Set wdCell = Nothing
Set wdDoc = Nothing
Set wdApp = Nothing
MsgBox "The " & stWordDocument & "'s table has succcessfully " & vbNewLine & _
"been updated!", vbInformation
End Sub
所有我改变的是添加一个filePath
变量来存储文件路径(包括在A1
中找到的值),将wdDoc
更改为一个新文档而不是打开一个旧的,并重新配置文件的保存以确保在尝试保存之前文件未打开。
Here's where I got the most of the code.
测试代码:
Sub CreateNewWordDoc()
' to test this code, paste it into an Excel module
' add a reference to the Word-library
' create a new folder named C:\Foldername or edit the filnames in the code
Dim wrdApp As Word.Application
Dim wrdDoc As Word.Document
Dim i As Integer
Set wrdApp = CreateObject("Word.Application")
wrdApp.Visible = True
Set wrdDoc = wrdApp.Documents.Add
' or
'Set wrdDoc = wrdApp.Documents.Open("C:\Foldername\Filename.doc")
' sample word operations
With wrdDoc
For i = 1 To 100
.Content.InsertAfter "Here is a sample test line #" & i
.Content.InsertParagraphAfter
Next i
If Dir("C:\Foldername\MyNewWordDoc.doc") <> "" Then
Kill "C:\Foldername\MyNewWordDoc.doc"
End If
.SaveAs ("C:\Foldername\MyNewWordDoc.doc")
.Close ' close the document
End With
wrdApp.Quit ' close the Word application
Set wrdDoc = Nothing
Set wrdApp = Nothing
End Sub
我现在正在使用 excel 中的宏将一系列单元格导出到 Word 中。
有一些变化,因为我需要它来将其复制到新的 Word 文档而不是脚本中的现有文档?
我选择的范围由各种 Vlookup 结果组成。
此外,如果可能的话,我希望将文件名设为 A1 中的任何名称。
Sub Export_Table_Data_Word()
'Name of the existing Word document
Const stWordDocument As String = "Table Report.docx"
'Word objects.
Dim wdApp As Word.Application
Dim wdDoc As Word.Document
Dim wdCell As Word.Cell
'Excel objects
Dim wbBook As Workbook
Dim wsSheet As Worksheet
'Count used in a FOR loop to fill the Word table.
Dim lnCountItems As Long
'Variant to hold the data to be exported.
Dim vaData As Variant
'Initialize the Excel objects
Set wbBook = ThisWorkbook
Set wsSheet = wbBook.Worksheets("Sheet1")
vaData = wsSheet.Range("A1:A10").Value
'Instantiate Word and open the "Table Reports" document.
Set wdApp = New Word.Application
Set wdDoc = wdApp.Documents.Open(wbBook.Path & "\" & stWordDocument)
lnCountItems = 1
'Place the data from the variant into the table in the Word doc.
For Each wdCell In wdDoc.Tables(1).Columns(1).Cells
wdCell.Range.Text = vaData(lnCountItems, 1)
lnCountItems = lnCountItems + 1
Next wdCell
'Save and close the Word doc.
With wdDoc
.Save
.Close
End With
wdApp.Quit
'Null out the variables.
Set wdCell = Nothing
Set wdDoc = Nothing
Set wdApp = Nothing
MsgBox "The " & stWordDocument & "'s table has succcessfully " & vbNewLine & _
"been updated!", vbInformation
End Sub
更新:
感谢尼古拉斯的帮助。最终脚本下方:
Sub OLDMACROADJUSTED()
'Word objects.
Dim wdApp As Word.Application
Dim wdDoc As Word.Document
Dim wdCell As Word.Cell
'Excel objects
Dim wbBook As Workbook
Dim wsSheet As Worksheet
'Count used in a FOR loop to fill the Word table.
Dim lnCountItems As Long
'Variant to hold the data to be exported.
Dim vaData As Variant
'File path based on A1'
Dim filePath As String
filePath = "C:\FolderName\" & Cells(1, 1).Value & ".doc"
'Initialize the Excel objects
Set wbBook = ThisWorkbook
Set wsSheet = wbBook.Worksheets("Sheet1")
vaData = wsSheet.Range("A1:A10").Value
'Instantiate Word and open the new file.
Set wrdApp = CreateObject("Word.Application")
Set wrdDoc = wrdApp.Documents.Add 'Create new app instead of open'
lnCountItems = 1
Dim c As Range
For Each c In Range("B3:B7")
wrdDoc.Content.InsertAfter c
Next c
'Place the data from the variant into the table in the Word doc.
'For Each wdCell In wdDoc.Tables(1).Columns(1).Cells
'wdCell.Range.Text = vaData(lnCountItems, 1)
'lnCountItems = lnCountItems + 1
'Next wdCell
'Save and close the Word doc.
With wrdDoc
If Dir(filePath) <> "" Then
Kill filePath
End If
.SaveAs (Range("B3").Value)
.Close ' close the document
End With
'wdApp.Quit
'Null out the variables.
Set wdCell = Nothing
Set wdDoc = Nothing
Set wdApp = Nothing
MsgBox "Your file has been saved in default location of the macro...", vbInformation
End Sub
试试这个代码:
Sub Export_Table_Data_Word()
'Name of the existing Word document
' Const stWordDocument As String = "Table Report.docx"
'Word objects.
Dim wdApp As Word.Application
Dim wdDoc As Word.Document
Dim wdCell As Word.Cell
'Excel objects
Dim wbBook As Workbook
Dim wsSheet As Worksheet
'Count used in a FOR loop to fill the Word table.
Dim lnCountItems As Long
'Variant to hold the data to be exported.
Dim vaData As Variant
'File path based on A1'
Dim filePath As String
filePath = "C:\FolderName\" & Cells(1, 1).Value & ".doc"
'Initialize the Excel objects
Set wbBook = ThisWorkbook
Set wsSheet = wbBook.Worksheets("Sheet1")
vaData = wsSheet.Range("A1:A10").Value
'Instantiate Word and open the new file.
Set wrdApp = CreateObject("Word.Application")
Set wrdDoc = wrdApp.Documents.Add 'Create new app instead of open'
lnCountItems = 1
'Place the data from the variant into the table in the Word doc.
For Each wdCell In wdDoc.Tables(1).Columns(1).Cells
wdCell.Range.Text = vaData(lnCountItems, 1)
lnCountItems = lnCountItems + 1
Next wdCell
'Save and close the Word doc.
With wrdDoc
If Dir(filePath) <> "" Then
Kill filePath
End If
.SaveAs (filePath)
.Close ' close the document
End With
wdApp.Quit
'Null out the variables.
Set wdCell = Nothing
Set wdDoc = Nothing
Set wdApp = Nothing
MsgBox "The " & stWordDocument & "'s table has succcessfully " & vbNewLine & _
"been updated!", vbInformation
End Sub
所有我改变的是添加一个filePath
变量来存储文件路径(包括在A1
中找到的值),将wdDoc
更改为一个新文档而不是打开一个旧的,并重新配置文件的保存以确保在尝试保存之前文件未打开。
Here's where I got the most of the code.
测试代码:
Sub CreateNewWordDoc()
' to test this code, paste it into an Excel module
' add a reference to the Word-library
' create a new folder named C:\Foldername or edit the filnames in the code
Dim wrdApp As Word.Application
Dim wrdDoc As Word.Document
Dim i As Integer
Set wrdApp = CreateObject("Word.Application")
wrdApp.Visible = True
Set wrdDoc = wrdApp.Documents.Add
' or
'Set wrdDoc = wrdApp.Documents.Open("C:\Foldername\Filename.doc")
' sample word operations
With wrdDoc
For i = 1 To 100
.Content.InsertAfter "Here is a sample test line #" & i
.Content.InsertParagraphAfter
Next i
If Dir("C:\Foldername\MyNewWordDoc.doc") <> "" Then
Kill "C:\Foldername\MyNewWordDoc.doc"
End If
.SaveAs ("C:\Foldername\MyNewWordDoc.doc")
.Close ' close the document
End With
wrdApp.Quit ' close the Word application
Set wrdDoc = Nothing
Set wrdApp = Nothing
End Sub