原谅我的诺言。非常感谢帮助!!!!
宏的用途:使用源自指定工作表的Excel工作簿中的文本在Microsoft Word中填写表单。
我的问题:选择所说的工作表从中抽取信息并将结果集成到我的代码中。现在使用InputBox但是想用一个带有ComboBox的UserForm替换所述InputBox-给出工作表名称的预设选择(这些永远不会改变)。
我已经用选项创建了UserForm。如何让我的代码初始化它?如何让我的代码使用ComboBox的结果?
Sub Ooopsie()
Dim objExcel As New Excel.Application
Dim exWb As Excel.Workbook
Dim exSh As Excel.Worksheet
Dim strSheetName As String
Dim strDefaultText As String
strDefaultText = "sheet name here"
strSheetName = InputBox( _
Prompt:="The sheet name is?", _
Title:="Sheet Name?", _
Default:=strDefaultText _
)
If strSheetName = strDefaultText Or strSheetName = vbNullString Then Exit Sub
Set exWb = objExcel.Workbooks.Open("path to worksheet")
ActiveDocument.Tables(1).Rows(3).Cells(1).Range.Text = "Blah: " & exWb.Sheets(strSheetName).Cells(3, 3)
ActiveDocument.Tables(1).Rows(5).Cells(1).Range.Text = "blah blah : " & Chr(11) & "blah: " & exWb.Sheets(strSheetName).Cells(3, 1)
ActiveDocument.Tables(1).Rows(6).Cells(1).Range.Text = "Date de réception : " & Chr(11) & "Date Received : " & exWb.Sheets(strSheetName).Cells(3, 2)
ActiveDocument.Tables(1).Rows(7).Cells(1).Range.Text = "blah d : " & Chr(11) & "Deadline: " & exWb.Sheets(strSheetName).Cells(3, 4)
exWb.Close
Set exWb = Nothing
End Sub
答案 0 :(得分:1)
我改进了你的代码。这应该让你开始。我重新设计它,让您更容易看到发生了什么。我没有打开现有的工作簿,而是创建了一个新的工作簿。我将Inputbox留在那里并进行了一些错误处理,以便您了解应该做什么。现在代码从MS Word表到Excel。
Option Explicit
Private Sub CommandButton1_Click()
Dim xlApp, xlWB, xlWS
Dim strSheetName As String, strDefaultText As String
Dim tbl As Table
strDefaultText = "Sheet1"
strSheetName = InputBox( _
Prompt:="The sheet name is?", _
Title:="Sheet Name?", _
Default:=strDefaultText)
Set xlApp = CreateObject("Excel.Application")
Set xlWB = xlApp.Workbooks.Add
On Error Resume Next
Set xlWS = xlWB.WorkSheets(strSheetName)
If Err.Number <> 0 Then
MsgBox "Worksheet [" & strSheetName & " Not Found", vbCritical, "Action Cancelled"
xlWB.Close False
xlApp.Quit
Exit Sub
End If
On Error GoTo 0
xlApp.Visible = True
On Error Resume Next
If ActiveDocument.Tables.Count > 0 Then
Set tbl = ActiveDocument.Tables(1)
xlWS.Cells(3, 3) = tbl.Rows(3).Cells(1).Range.Text
xlWS.Cells(3, 1) = tbl.Rows(5).Cells(1).Range.Text
xlWS.Cells(3, 2) = tbl.Rows(6).Cells(1).Range.Text
xlWS.Cells(3, 4) = tbl.Rows(7).Cells(1).Range.Text
End If
Set xlWB = Nothing
Set xlApp = Nothing
End Sub
值得注意的是,如果不参考我认为的Microsoft Excel 12.0,你不能从MS Word中实例化Excel吗?
Dim objExcel As New Excel.Application
改为使用
Dim objExcel as Variant Set objExcel = CreateObject("Excel.Application")
我知道这不是聊天论坛,但我愿意接受意见和建议。毕竟我只是一个爱好者。
更新这里是一种向组合框添加项目的方法
For Each xlSheet In xlWB.Worksheets
ComboBox1.AddItem xlSheet.Name
Next
答案 1 :(得分:0)
因此,您已创建了一个名为UserForm1
的表单。
您可以使用默认实例将其显示为模式对话框:
UserForm1.Show vbModal
但更好的做法是实例化而不是 - 表格毕竟是对象,所以你可以像其他任何类模块一样New
:
Dim view As UserForm1
Set view = New UserForm1
view.Show vbModal
您可以将属性添加到表单的代码隐藏中,以显示调用代码可以使用的值:
Public Property Get SheetName() As String
SheetName = ComboBox1.Text
End Property
所以你现在可以编写一个执行此操作的函数:
Private Function GetSheetName() As String
Dim view As UserForm1
Set view = New UserForm1
view.Show vbModal
GetSheetName = view.SheetName
End Function
现在,您可以通过调用此InputBox
函数来替换GetSheetName
来电!
当然,您希望处理用户取消表单的情况,但这超出了此问题的范围,并且......已经被问到这个问题网站已经,只搜索,你会发现!