Excel 如何检查“afile.xlsm:2”是否已打开VBA
我已经在Excel工作表中建立了一个搜索栏,用户在其中单击[搜索];它将根据一些FormControl按钮对指定的表格列进行排序,然后在当前工作簿上打开一个新窗口,选择Sheet2并搜索Sheet2上的指定列。我在防止下次有人手动关闭第二个窗口进行搜索时再次发生这种情况时遇到问题。我目前只需要同时打开两个活动窗口。所以我不想让Excel打开第三个ActiveWindow等等 我不太熟悉使用函数。我已经粘贴了我的宏和子函数。我尝试过不同的配置/变化,认为我错过了一些简单的东西 在我看来,我的AlreadyOpen函数不正确。当文件.xlsm:2已经打开时,我似乎无法让我的第一个IF…True语句起作用Excel 如何检查“afile.xlsm:2”是否已打开VBA,excel,vba,function,if-statement,Excel,Vba,Function,If Statement,我已经在Excel工作表中建立了一个搜索栏,用户在其中单击[搜索];它将根据一些FormControl按钮对指定的表格列进行排序,然后在当前工作簿上打开一个新窗口,选择Sheet2并搜索Sheet2上的指定列。我在防止下次有人手动关闭第二个窗口进行搜索时再次发生这种情况时遇到问题。我目前只需要同时打开两个活动窗口。所以我不想让Excel打开第三个ActiveWindow等等 我不太熟悉使用函数。我已经粘贴了我的宏和子函数。我尝试过不同的配置/变化,认为我错过了一些简单的东西 在我看来,我的Alr
Function AlreadyOpen(sFname As String) As Boolean
Dim wkb As Workbook
'Dim sFname As String
sFname = "afile.xlsm:2"
On Error Resume Next
Set wkb = Workbooks(sFname)
AlreadyOpen = Not wkb Is Nothing
Set wkb = Nothing
End Function
Private Sub Search_cmd1_Click()
'PURPOSE: Filter Data on User-Determined Column & Text/Numerical value
Dim myButton As OptionButton
Dim SearchString As String
Dim ButtonName As String
Dim sht As Worksheet
Dim myField As Long
Dim DataRange As Range
Dim mySearch As Variant
'Load Sheet into A Variable
Set sht = ActiveSheet
'Unfilter Data (if necessary)
On Error Resume Next
sht.ShowAllData
On Error GoTo 0
'Filtered Data Range (include column heading cells)
Set DataRange = sht.ListObjects("Table1").Range 'Table
'Retrieve User's Search Input
mySearch = sht.OLEObjects("SearchBox1").Object.Text & "*" 'ActiveX Control ''must include "*" for partials
'Determine if user is searching for number or text
If IsNumeric(mySearch) = True Then
SearchString = "=" & mySearch
Else
SearchString = "=*" & mySearch & "*"
End If
'Loop Through Option Buttons
For Each myButton In sht.OptionButtons
If myButton.Value = 1 Then
ButtonName = myButton.Text
Exit For
End If
Next myButton
'Determine Filter Field
On Error GoTo HeadingNotFound
myField = Application.WorksheetFunction.Match(ButtonName, DataRange.Rows(1), 0)
On Error GoTo 0
'Filter Data
DataRange.AutoFilter _
Field:=myField, _
Criteria1:=SearchString, _
Operator:=xlAnd
Dim sFilename As String
sFilename = "afile.xlsm:2"
If AlreadyOpen(sFilename) Then
Sheets("Sheet2").ListObjects("Table24").Range.AutoFilter Field:=5, Criteria1:=SearchString
Else
If myButton.Text = "SITE" Then
Sheets("Sheet1").Select
ActiveWindow.NewWindow
Windows("afile.xlsm:1").Activate
Windows("afile.xlsm:2").Activate
Windows.Arrange ArrangeStyle:=xlVertical
Sheets("Sheet2").Select
ActiveWindow.Zoom = 55
ActiveSheet.ListObjects("Table24").Range.AutoFilter Field:=5, Criteria1:=SearchString
End If
End If
Exit Sub
End Sub
我想让Excel打开一个新窗口文件。xlsm:2,选择Sheet2并对Table1进行排序。但是,如果第二个窗口已经打开,则只需对表24进行排序。工作簿与窗口不同,这肯定是If语句失败的地方。您需要修改函数以反映这一点
Function AlreadyOpen(sFname As String) As Boolean
Dim wkb As Window
On Error Resume Next
Set wkb = Windows(sFname)
wkb.Activate
AlreadyOpen = Not wkb Is Nothing
Set wkb = Nothing
End Function
如果我读得正确,您希望排序在Workbooksafile.xlsm:2中进行,无论是否必须打开窗口,对吗?排序将在Workbooksafile.xlsm中进行,但我需要VBA识别工作簿的第二个窗口是否打开。afile.xlsm:2和afile.xlsm:1是我希望在第二个打开后使用的窗口。感谢您的反馈。你对这个答案的编辑效果很好!很高兴能帮上忙!