【问题标题】:using a function inside a sub (VBA using Word and Excel)在 sub 中使用函数(使用 Word 和 Excel 的 VBA)
【发布时间】:2015-07-10 13:38:45
【问题描述】:

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

它不返回任何错误...也不做任何事情。当我按下 Word doc 中的命令按钮时,它应该形成行并从 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

【问题讨论】:

  • 要让我们回答“为什么它不起作用”,您首先需要告诉我们它是如何不起作用的。发生了什么?
  • 哪里出错了?你有没有逐行浏览代码,看看会发生什么?它在哪一行停止执行您期望它执行的操作?
  • 我说它没有做任何事情(也没有返回任何错误),就好像我没有按下命令按钮一样。抱歉,如果不清楚。
  • @roryap 他们说它没有做任何事情。
  • 请删除On Error Resume Next。如果该命令在您的代码中,它不会显示任何错误

标签: vba excel ms-word


【解决方案1】:

End Function 之前你需要这样做:

GetLastRow = lastRow

否则函数不返回值。

【讨论】:

  • 这成功了!非常感谢帮助 vba 新手。还有一个问题 - 你可能知道如何在完成所有操作后成功退出 Excel 吗?我尝试将......Excel.Application.Quit......放在 End Sub 和 End Function 之前,它们都给我“运行时错误:自动化错误,消息过滤器表明应用程序正忙。”
  • 当然。 objExcel.Quit 是您所需要的。
  • 我以前试过的时候还以为不行……现在效果很好。非常感谢!
猜你喜欢
  • 2023-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-10
  • 2021-06-14
  • 2019-08-08
  • 2019-05-19
相关资源
最近更新 更多