Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 带有If语句的WorkbookOpen函数_Excel_Vba - Fatal编程技术网

Excel 带有If语句的WorkbookOpen函数

Excel 带有If语句的WorkbookOpen函数,excel,vba,Excel,Vba,我正在尝试编写一个代码,当我打开一个文件时,该文件的名称中有某个内容,并且在单元格中有一个特定的值(下面的代码) 首先,有可能同时使用这两个语句吗?一个是在“文件打开时”验证条件,另一个是需要打开文件才能找到答案 如果没有,最好的方法是什么 当我只使用部分包含某些内容的文件名的条件时,它会起作用,但当我尝试应用这两个条件时,它会忽略第二个条件(单元格值) 选项显式 将事件监视器应用程序作为应用程序公开 私有子工作簿_Open() 设置MonitorApp=应用程序 端接头 专用子监控器App_工

我正在尝试编写一个代码,当我打开一个文件时,该文件的名称中有某个内容,并且在单元格中有一个特定的值(下面的代码)

首先,有可能同时使用这两个语句吗?一个是在“文件打开时”验证条件,另一个是需要打开文件才能找到答案

如果没有,最好的方法是什么

当我只使用部分包含某些内容的文件名的条件时,它会起作用,但当我尝试应用这两个条件时,它会忽略第二个条件(单元格值)

选项显式
将事件监视器应用程序作为应用程序公开
私有子工作簿_Open()
设置MonitorApp=应用程序
端接头
专用子监控器App_工作簿打开(ByVal Wb作为工作簿)
将文本变暗为字符串
暗淡的迈塞尔山脉
Set myCell=thisvoolk.ActiveSheet.Range(“A1”)
Text=“文件的部分名称”
如果UCase(左(Wb.Name,Len(Text))=UCase(Text)和myCell.Value“Example”,那么
“代码”
如果结束
端接头

我希望只有当这两个条件都为真时,代码才会运行,但即使
myCell.Value=“Example”

wb
此工作簿中的
myCell
,代码也会运行?根据您的描述,它听起来像是在
wb
中。如果工作表在编译时存在于
此工作簿中
,只需给它一个有意义的
(名称)
属性(F4打开“属性”工具窗口),然后您可以在代码中使用该名称-例如,如果
(名称)
Sheet1
然后您可以执行
Sheet1.Range(“A1”)。Value=42
;如果
(名称)
MyAwesomeSheet
,则可以执行
MyAwesomeSheet.Range(“A1”).Value=42
,并且无需从
工作表
集合中取消对这些对象的引用;只有在处理运行时创建的工作表和/或不在
此工作簿中的工作表时,您才需要这样做。我已经尝试过了,工作正常。确保您的单元格具有代码所比较的精确值“Example”。正如@BigBen所指出的,在设置myCell时,我应该使用Wb而不是ThisWorkbook,这就成功了
Option Explicit

Public WithEvents MonitorApp As Application

Private Sub Workbook_Open()

Set MonitorApp = Application

End Sub

Private Sub MonitorApp_WorkbookOpen(ByVal Wb As Workbook)

    Dim Text As String
    Dim myCell As Range

    Set myCell = ThisWorkbook.ActiveSheet.Range("A1")

    Text = "Partial Name of File"

    If UCase(Left(Wb.Name, Len(Text))) = UCase(Text) And myCell.Value <> "Example" Then

    'Code'

    End If
End Sub