excel - 如果通过按钮调用 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
解决方案
这里有几件事。
首先,我将事物设为 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”以确保我正在写入正确的工作表。没有它,我发现我写错了工作簿。
如您所见,我做的另一件事是检查文件是否存在。我发现对于我的第一次运行它没有,所以这可能会给你一个线索。
但是,我可以向您保证,此代码有效,因为我刚刚在这里完成了它。
希望这对马尔克有所帮助
推荐阅读
- autodesk-forge - 使用动态文件名的 Revit Design 自动化控制打开流程
- java - 声明类型为 T 的新对象
- razor-pages - 如何从 BS“selectpicker”更新缓存的列表/值(使用 c# MVC)
- django-forms - 使用 Django 表单集传递相关字段
- sql - 如何按没有聚合的列分组?
- vue.js - Vue.js 样式绑定不更新样式变量更改的 dom
- angular - How to localize form builder - formio
- javascript - 使用 KENDO 的 Jquery Grid 打印 PDF 时出现奇怪的字符
- php - 在 PUT 请求对象属性显示为字符串之后
- sql - 使用 REGEX 的低效查询