2015-07-10 52 views
0

我有一个关于在私有子(命令按钮)中使用私有函数的问题。使用子功能(使用Word和Excel的VBA)

它不会返回任何错误...也不会做任何事情。当我按下Word文档中的命令按钮时,它应该形成行并从Excel工作表中导入数据,直到Excel中的最后一行,这就是我试图让函数执行的操作 - 查找最后一行工作表。

如果你可以看看我的代码,并让我知道如果你知道为什么它不会工作,我会很感激。我需要在Private Sub commandbutton_2_Click()中使用函数吗?先谢谢你。

Private Sub CommandButton2_Click() 
Dim tbl As Table 
Dim row As row 

Set tbl = ActiveDocument.Tables(2) 

Dim objExcel As New Excel.Application 
Dim exWb As Excel.Workbook 
On Error Resume Next 

Set exWb = objExcel.Workbooks.Open("S:\Electro-Protocol\Mot_Protocols\" & TextBox1 & ".xls") 
Dim lastRow As Integer 

lastRow = GetLastRow(objExcel, exWb) 
ActiveDocument.Tables(2).Columns.DistributeWidth 

For counter = 1 To lastRow 
tbl.Rows.Add 
tbl.cell(counter, 1).Range.Text = exWb.Sheets("Tabelle1").Cells(counter, 1) 
tbl.cell(counter, 2).Range.Text = exWb.Sheets("Tabelle1").Cells(counter, 2) 
tbl.cell(counter, 3).Range.Text = exWb.Sheets("Tabelle1").Cells(counter, 3) 
tbl.cell(counter, 4).Range.Text = exWb.Sheets("Tabelle1").Cells(counter, 4) 
tbl.cell(counter, 5).Range.Text = exWb.Sheets("Tabelle1").Cells(counter, 5) 
tbl.cell(counter, 6).Range.Text = exWb.Sheets("Tabelle1").Cells(counter, 6) 
Next counter 

End Sub 

Private Function GetLastRow(ByVal objExcel As Excel.Application, ByVal exWb As Excel.Workbook) As Integer 
Dim lastRow As Integer 
lastRow = 0 

With exWb.Sheets("Tabelle1") 
If objExcel.WorksheetFunction.CountA(.Cells) <> 0 Then 
    lastRow = .Cells.Find(What:="*", _ 
        After:=.Range("A1"), _ 
        Lookat:=xlPart, _ 
        LookIn:=xlFormulas, _ 
        SearchOrder:=xlByRows, _ 
        SearchDirection:=xlPrevious, _ 
        MatchCase:=False).row 
Else 
    lastRow = 1 
End If 
End With 
End Function 
+0

对于我们来说,“为什么它不起作用”,您首先需要告诉我们*它是如何工作的*。发生了什么? –

+0

它在哪里出错?你有没有逐行浏览代码,看看会发生什么?在什么方面停止做你期望的事情? –

+0

我说它没有做任何事情(也没有返回任何错误),就好像我没有按下命令按钮。对不起,如果不明确。 – idk123

回答

4

End Function之前,你需要这样做:

GetLastRow = lastRow 

其他函数没有返回值。

+0

这个技巧!非常感谢vba新手。还有一个问题 - 你可能知道如何在所有事情之后成功退出Excel吗?我尝试了...... Excel.Application.Quit ......在End Sub和End Function之前,他们都给我“运行时错误:Automoation错误,消息过滤器指示应用程序正忙“。 – idk123

+0

当然。 'objExcel.Quit'就是你需要的。 – LocEngineer

+0

我以为这在我以前尝试过时不起作用......现在它效果很好。非常感谢! – idk123