Board logo

標題: 偵測"1.xls"檔是否呈打開狀態? [打印本頁]

作者: yangjie    時間: 2012-8-31 00:31     標題: 偵測"1.xls"檔是否呈打開狀態?

請教各位大大:
        個人在用VBA打開另外Excel檔如"1.xls"檔,若逢"1.xls"檔本來就已呈打開狀態時,就不太恰當。
請教各位先進若要偵測"1.xls"檔是否呈打開狀態?應如何運用VBA語法?
作者: 小俠客    時間: 2012-8-31 02:09

  1. bookname = "1.xls"

  2. For Each wbs In Workbooks
  3.     If UCase(wbs.Name) = UCase(bookname) Then
  4.         MsgBox bookname & " is opened"
  5.         Exit For
  6.     End If
  7. Next wbs
複製代碼
只懂這個,希望可以幫到你
作者: ML089    時間: 2012-8-31 19:46

回復 2# 小俠客

新開檔案 BOOK1 測試不出來
舊檔案 S.XLS 就可以測試出來
好像要存檔後才有效
作者: Hsieh    時間: 2012-8-31 22:20

本帖最後由 Hsieh 於 2012-8-31 22:32 編輯

回復 3# ML089


    這個問題牽涉到開啟檔案是否是在同一個Application
如果已啟動一個全新的Excel然後開啟其他檔案
那麼同一個Application所開啟的檔案都能找得到
但是假如開啟了一些舊檔,然後按下程式集裡的Excel程式
在這個新的檔案內則無法搜尋到之前開啟的檔案名稱
必須是在已經開啟的程式中
以檔案/開新檔案才能夠搜尋所有已開啟檔案
[attach]12347[/attach]
[attach]12346[/attach]
作者: 小俠客    時間: 2012-8-31 23:30

回復 4# Hsieh


   
對不起,胡亂回答錯的答案,十分抱歉:dizzy:
作者: Hsieh    時間: 2012-8-31 23:52

回復 5# 小俠客

千萬別這麼說,討論區沒有真正對與錯
勇於發表才能獲得更多
作者: yangjie    時間: 2012-9-1 04:32

本帖最後由 yangjie 於 2012-9-1 04:33 編輯

回復 4# Hsieh
    請教於板主先進
    Dim Filt As String
    Dim FilterIndex As Integer
    Dim fileName As Variant
    Dim Title As String
    Filt = "Excel Files (*.xls),*.xls"
    FilterIndex = 5
    Title = "Select a File for Import"
    fileName = Application.GetOpenFilename _
        (FileFilter:=Filt, _
         FilterIndex:=FilterIndex, _
         Title:=Title)
    If fileName = False Then
        MsgBox "No file was selected."
        Exit Sub
    End If
我只要得到fileName 的檔名(string)應如何下語法?(不含path)
謝謝
作者: yangjie    時間: 2012-9-1 04:49

回復 7# yangjie 主要

    主要下一列要Open
Set wb = Workbooks.Open(fileName, True, False)
   但常在已打開之下做重複打開
不支應如何處理
作者: yangjie    時間: 2012-9-1 04:55

回復 4# Hsieh
     Hseih大大     謝謝您
Function IsOpen(Fs As String) As Boolean
IsOpen = False
For Each w In Windows
  If w.Caption = Fs Then IsOpen = True: Exit For
Next
End Function

    其中 fs 與 上述filename 型態不符 我就卡住了 怎麼辦?
作者: yangjie    時間: 2012-9-1 05:02

回復 4# Hsieh
對不起 將大名拼錯了 應為Hsieh大大
作者: ML089    時間: 2012-9-1 07:08

回復 4# Hsieh

原來用.Caption就可以決解,太感謝你了
作者: ML089    時間: 2012-9-1 07:55

回復 9# yangjie

Function IsOpen() 我測試是可以執行

但檔案名稱有分大小寫,例如 Book1與BOOK1就會判斷為不同
WINDOW系統的檔案應該是沒有分大小寫(雖然顯是有大小寫)
作者: yangjie    時間: 2012-9-1 10:56

回復 4# Hsieh
謝謝Hsieh版主協助function Isopen()的指導
自個兒稍微有點突破
Sub 選擇檔名匯入()
    Dim Path1, Str1 As String
    Dim wb As Workbook
    Path1 = Application.ActiveWorkbook.Path

   
    Dim Filt As String
    Dim FilterIndex As Integer
    Dim fileName As Variant
    Dim Title As String
    Filt = "Excel Files (*.xls),*.xls"
    FilterIndex = 5
    Title = "Select a File for Import"
    fileName = Application.GetOpenFilename _
        (FileFilter:=Filt, _
         FilterIndex:=FilterIndex, _
         Title:=Title)
    If fileName = False Then
        MsgBox "No file was selected."
        Exit Sub
    End If
    Dim fso3
    Set fso3 = CreateObject("Scripting.FileSystemObject")
    GetAn3 = fso3.GetbaseName(fileName)
    If IsOpen(GetAn3 & ".xls") <> False Then
        Workbooks(GetAn3 & ".xls").Activate
    Else
        Set wb = Workbooks.Open(fileName, True, False)
    End If
    f_bookname2 = ActiveWorkbook.Name
    Windows(f_bookname2).Activate
    Sheets(1).Activate
end sub

Function IsOpen(Fs As String) As Boolean
    IsOpen = False
    For Each w In Windows
         If w.Caption = Fs Then IsOpen = True: Exit For
   Next
End Function
再請教大大
   1. 如何讓Application.GetOpenFilename 所開之視窗為path1?
   2.可有更好的寫法?
謝謝
作者: GBKEE    時間: 2012-9-1 17:25

回復 13# yangjie
  1. Option Explicit
  2. Sub 選擇檔名匯入()
  3.     Dim Path1, Str1 As String
  4.     Dim wb As Workbook
  5.     Dim Filt As String
  6.     Dim FilterIndex As Integer
  7.     Dim Title As String
  8.     '---------------------------------
  9.     Dim xlfileName As String, xlFullName As String
  10.     '修改型態 As String  xlfileName:沒有路徑
  11.     Dim MyPath
  12.     MyPath = CurDir    '紀錄原有的目錄或檔案夾。
  13.     Path1 = Application.ActiveWorkbook.Path
  14.    ' Path1 = "C:\WINDOWS\SYSTEM"
  15.     ChDrive Split(Path1, ":")(0)    'ChDrive 陳述式 改變目前的磁碟機。
  16.     ChDir Path1                     'ChDir   陳述式 改變目前的目錄或檔案夾。
  17.     '請注意 ChDir 陳述式會改變現有目錄位置,但不會改變磁碟機位置,
  18.     '例如,如果現在的磁碟機是 C,陳述式將現有目錄切換到磁碟機 D,但是 C 仍然是現有的磁碟機位置:
  19.     Filt = "Excel Files (*.xls),*.xls"
  20.     FilterIndex = 5
  21.     Title = "Select a File for Import"
  22.     xlFullName = Application.GetOpenFilename _
  23.         (FileFilter:=Filt, _
  24.          FilterIndex:=FilterIndex, _
  25.          Title:=Title)
  26.    
  27.     If UCase(xlFullName) = "FALSE" Then
  28.         MsgBox "No file was selected."
  29.         Exit Sub
  30.     End If
  31.     '''''''''''''''''''''''''
  32.     ChDrive Split(MyPath, ":")(0)    '改變為原有的磁碟機。
  33.     ChDir MyPath                     '改變為原有的目錄或檔案夾。
  34.     ''''''''''''''''''''''''''
  35.    
  36.     xlfileName = Split(xlFullName, "\")(UBound(Split(xlFullName, "\")))
  37.     '陣列(上限元素數) 取的檔案名稱沒有路徑
  38.     If IsOpen(xlfileName) <> False Then
  39.         Workbooks(xlfileName).Activate
  40.     Else
  41.         Set wb = Workbooks.Open(xlFullName, True, False)
  42.     End If
  43.     f_bookname2 = ActiveWorkbook.Name
  44.     Windows(f_bookname2).Activate
  45.     Sheets(1).Activate
  46. End Sub
  47. Function IsOpen(Fs As String) As Boolean
  48.     IsOpen = False
  49.     For Each W In Windows
  50.          If W.Caption = Fs Then IsOpen = True: Exit For
  51.    Next
  52. End Function
複製代碼

作者: Hsieh    時間: 2012-9-1 17:42

回復 14# GBKEE

湊熱鬧,FullName去除路徑只剩檔名
    xlfileName = Dir(xlFullName)
作者: yangjie    時間: 2012-9-1 18:59

回復 14# GBKEE
謝了
if Ucase(filename)="FALSE" then

if filename=False then
可有相異
作者: yangjie    時間: 2012-9-1 18:59

回復 15# Hsieh
水啦
謝了
作者: Hsieh    時間: 2012-9-2 00:36

回復 16# yangjie


    這是不一樣的
因為filename被宣告為string所以filename="FALSE"才是正確
若為filename=FALSE這是變成邏輯值判斷
filename必須是布林值
作者: yangjie    時間: 2012-9-2 00:49

回復 18# Hsieh

謝謝 完全了解
作者: GBKEE    時間: 2012-9-2 14:34

回復 15# Hsieh
那有什麼湊熱鬧的,論壇是越熱鬧越好
作者: bugsfamily    時間: 2012-9-24 13:41

建議一開始就將,路徑與檔名設定成不同變數。方便之後利用。
另外
'The following function returns the filename without the extension from the file's full path:
Function FileNameNoExt(strPath As String) As String
    Dim strTemp As String
    strTemp = Mid$(strPath, InStrRev(strPath, "\") + 1)
    FileNameNoExt = Left$(strTemp, InStrRev(strTemp, ".") - 1)
End Function

'The following function returns the filename with the extension from the file's full path:
Function FileNameWithExt(strPath As String) As String
    FileNameWithExt = Mid$(strPath, InStrRev(strPath, "\") + 1)
End Function

'取得路徑
'the following function will get the path only (i.e. the folder) from the file's ful path:
Function FilePath(strPath As String) As String
    FilePath = Left$(strPath, InStrRev(strPath, "\"))
End Function
作者: bugsfamily    時間: 2012-9-24 14:30

建議一開始就將,路徑與檔名設定成不同變數。方便之後利用。
另外
'取得路徑與檔名(不包括副檔名)
'The following function returns the filename without the extension from the file's full path:
Function FileNameNoExt(strPath As String) As String
    Dim strTemp As String
    strTemp = Mid$(strPath, InStrRev(strPath, "\") + 1)
    FileNameNoExt = Left$(strTemp, InStrRev(strTemp, ".") - 1)
End Function

'取得完整檔名
'The following function returns the filename with the extension from the file's full path:
Function FileNameWithExt(strPath As String) As String
    FileNameWithExt = Mid$(strPath, InStrRev(strPath, "\") + 1)
End Function

'取得路徑
'the following function will get the path only (i.e. the folder) from the file's ful path:
Function FilePath(strPath As String) As String
    FilePath = Left$(strPath, InStrRev(strPath, "\"))
End Function




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)