![](/img/trans.png)
[英]ActiveWindow.NewWindow Windows("aFile.xlsm:1").Activate isn't working on Excel 365
[英]How to check if “afile.xlsm:2” is already open VBA
我在用戶單擊[搜索]的Excel工作表中建立了一個搜索欄; 它將根據一些FormControl按鈕對指定的表列進行排序,然后從當前工作簿打開一個NewWindow,選擇Sheet2並在Sheet2上搜索指定的列。 我無法阻止下次有人搜索手動關閉第二個窗口時再次發生這種情況。 我目前只需要一次打開兩個活動窗口。 因此,我不希望Excel打開第三個ActiveWindow,依此類推。
我對使用功能不太熟悉。 我已經粘貼了宏Sub和Function。 我嘗試過不同的配置/變化,以為我缺少一些簡單的東西(希望如此)。
在我看來,我的AlreadyOpen函數不正確。 當afile.xlsm:2已經打開時,我似乎無法獲得我的第一個IF...True
語句。
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打開NewWindow(“ afile.xlsm:2”),選擇Sheet2並對Table1排序。 但是,如果第二個窗口已經打開,則只需對Table24排序。
Workbook
與Window
,這絕對是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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.