Board logo

標題: [發問] 不開啟excel文件能知道這文件里有沒有名為"ABC"的sheet? [打印本頁]

作者: mhl9mhl9    時間: 2015-8-10 22:49     標題: 不開啟excel文件能知道這文件里有沒有名為"ABC"的sheet?

本帖最後由 mhl9mhl9 於 2015-8-10 23:01 編輯

公司資料庫改了文件格式(分各公司改的日期不統一),我要從不同格式的文件里取數據,必須先知道文件是新格式還是舊格式,現在想在取資料前先知道文件里有沒有一個名為"ABC"的sheet,因為舊文件沒有"ABC"sheet,有"ABC"sheet的就一定是新格式,能有方法知道嗎?
從文件名無法區別,因為所有文件都是01,02,03,04.....
從日期也無法區別,因為各分公司沒有統一的日期改版....
現在想到能區別新版舊版的方法就是文件里有沒有sheets("ABC").....
請各位高手幫幫我,多謝了!

知道文件路徑,文件名,sheet名和儲存格參數,有公式可以不開啟該文件而取得該指定的儲存格的值,公式出錯就是舊格式文件(因為舊格式文件里沒有sheet("Abc"),不出錯就是新格式文件,我看此方法可能行得通,但可能會拖慢程序,是不是有更簡單有效的方法區別新舊格式的文件,求高手顯靈相助.
作者: mark15jill    時間: 2015-8-11 12:31

回復 1# mhl9mhl9

基本架構供您參考
  1.     Sub IsSheetExist()
  2.     Dim ws As Worksheet
  3.     Dim sName As String
  4.     sName = "一月"  '指定工作表
  5.     On Error Resume Next
  6.     Set ws = Sheets(sName)
  7.     If ws Is Nothing Then '指定的工作表不存在
  8.       Sheets.Add.Name = sName
  9.     Else '指定的工作表已存在
  10.       MsgBox "“" & sName & "”工作表已存在。"
  11.       ws.Activate
  12.     End If
  13.     End Sub
複製代碼

作者: mhl9mhl9    時間: 2015-8-12 17:34

回復 2# mark15jill
可能我陳述不清楚,我的要求是"不開啟excel文件,如何知道某文件里有某sheet存在",所以你的做法不能用,我自己寫了個function,已經用上,不太影響程序執行速度.

''''測試文件fl(fl是文件的路徑)里有沒有sheets("Test A"),而該sheet的[A1]="ABC"

Function Benew(fl$) As Boolean
    Dim Fname$, Fpath$, temp$, temp2
    Fname = Right(fl, Len(fl) - InStrRev(fl, "\"))
    Fpath = Replace(fl, Fname, "")
    On Error Resume Next
    temp = "'" & Fpath & "[" & Fname & "]Test A'!R1C1"
    temp2 = Application.ExecuteExcel4Macro(temp)
    Benew = IIf(temp2 = "ABC", True, False)
End Function

我要從55000個文件提取資料.因為這些文件有2種不同格式,其中1種格式是文件里有張sheet,名為"Test A",而且Test A頁的[a1]="ABC"
我現在利用上面function,即時可以區分這55000文件,哪些是第一種格式,哪些是第二種格式,然後用不同的方法取資料.並不十分影響速度.
因為固定格式的資料里必定有某固定位置的值是固定的,上面取的[a1]="ABC"就是固定位的意思示意.




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