首页 > 解决方案 > 如果通过按钮调用 VBA Excel 代码可以工作,但如果通过函数调用则不能

问题描述

我正在尝试使用函数打开文件。如果我通过按钮调用它,则相同的代码正在工作。该文件将打开,我可以修改它,我可以关闭它而不保存。但是如果我使用函数调用的相同代码,文件将不会打开。为什么?遵循与按钮和功能一起使用的代码。有人可以帮助我吗?这只是我需要的开始。详细说明,使用此函数,我需要打开一个 CSV 文件,修复 CSV 文件,使用 Dlookup 提取数据并将此数据写入我调用该函数的单元格上。如果我通过按钮调用我的代码,但如果我使用单元格中的函数调用它,则此方法有效

Sub Button1_Click()

Dim path As String
Dim xl As Excel.Application
Dim wk As Excel.Workbook

path = ActiveWorkbook.path & "\Book1.xlsm"

Set xl = Excel.Application
Set wk = xl.Workbooks.Open(path)
    xl.Visible = True
    wk.Activate
    xl.DisplayAlerts = False

Range("B2").Select
Range("B2").Value = "hello world"

wk.Saved = False
wk.Close    
  Set wk = Nothing
End sub

Public Function aprifile()
Dim path As String
Dim xl As Excel.Application
Dim wk As Excel.Workbook

path = ActiveWorkbook.path & "\Book1.xlsm"

Set xl = Excel.Application
Set wk = xl.Workbooks.Open(path)
    xl.Visible = True
    wk.Activate
    xl.DisplayAlerts = False

Range("B2").Select
Range("B2").Value = "hello world"

wk.Saved = False
wk.Close    
  Set wk = Nothing
End Function

标签: excelvbafunction

解决方案


这里有几件事。

首先,我将事物设为 Sub 而不是 Function,因为您没有返回任何内容。

选项显式

公共子 aprifile()

将路径调暗为字符串调暗 xl 作为应用程序调暗 wk 作为工作簿

path = ActiveWorkbook.path & "\Book1.xlsm" If Len(Dir$(path)) > 0 Then

Set xl = Excel.Application
Set wk = xl.Workbooks.Open(path)
xl.Visible = True
wk.Activate
xl.DisplayAlerts = False

wk.ActiveSheet.Range("B2").Select
wk.ActiveSheet.Range("B2").Value = "hello world"

wk.Saved = False
wk.Close
Set wk = Nothing

End If End Sub

第二件事是我放置了“wk.ActiveSheet”以确保我正在写入正确的工作表。没有它,我发现我写错了工作簿。

如您所见,我做的另一件事是检查文件是否存在。我发现对于我的第一次运行它没有,所以这可能会给你一个线索。

但是,我可以向您保证,此代码有效,因为我刚刚在这里完成了它。

希望这对马尔克有所帮助


推荐阅读