EDWARD
Lv 7
EDWARD 發問時間: 電腦與網際網路軟體 · 1 0 年前

請問下述的EXCEL 巨集大概要如何下手呢~謝20點

請問一下

我想要做一個 excel 巨集不知如何下手

EX:我一個資料夾中有十個excel檔案(假設檔名為1、2、3、~~~10檔名),這十個檔內都有一個A物品不同價格數據,我如何把這十個檔案的A物品數據捉出來呢~~~謝謝

謝謝您們的熱心回覆

7 個解答

評分
  • 漢堡
    Lv 5
    1 0 年前
    最佳解答

    1. 使用VBA 開啟EXCEL檔案

    Workbooks.Open Filename:="book1.xls"

    'book1 為您想開啟的EXCEL檔案名稱,可以帶入相對或絕對路徑

    2. 指定工作的SHEET

    Worksheets("sheet1").Activate

    'sheet為已開啟的EXCEL裡面的一個工作表名稱

    '你可以利用這個指令,在不同工作表中做切換

    2. 讀取某一欄位值

    A(X)= Worksheets("Sheet1").Range("A5").Value

    ' 請先將A(X)宣告為一維陣列

    3. 關閉已經開啟的檔案

    Workbooks("book1.xls").Close

    'book1 為一個已經開啟的EXCEL檔案名稱,可以帶入相對或絕對路徑

    如果10個檔名有連續性,那麼就可以用迴圈的方式,

    重複 1~3 的 [開檔 -> 讀值 -> 關檔] 的動作

    這個方法的前提是,能夠知道A物品在各個SHEET裡面的欄位位置。如果SHEET裡面資料非常多,還需要判別A物品的欄位位置的話,那麼還得加上判別的公式....會更複雜喔....

    參考資料: 自己
  • 1 0 年前

    首先

    A1輸入要開啟檔案數

    B1輸入原巨集位置的檔名,例 Book1.xls,輸入Book1 即可

    A2..An輸入檔案路逕,需確實完整含附檔名 [.xls]

    D2..Dn輸入工作表名稱

    E2..En輸入選取資料範圍

    F2..Fn輸入COPY檔名

    G2..Gn輸入COPY工作表

    H2..Hn輸入COPY位置

    Sub calldate()

    ' 開起多筆檔案 & COPY出其中資料到指示位置

    mun = [a1] '開啟檔案數

    NN = [b1] '原巨集位置的檔名

    For i = 1 To mun

    AA = Range(Cells(i 1, 1), Cells(i 1, 1)).Value '開啟檔名

    dd = Range(Cells(i 1, 4), Cells(i 1, 4)).Value '開啟工作表

    EE = Range(Cells(i 1, 5), Cells(i 1, 5)).Value '選取範圍

    FF = Range(Cells(i 1, 6), Cells(i 1, 6)).Value '要COPY的檔名

    GG = Range(Cells(i 1, 7), Cells(i 1, 7)).Value '要COPY的工作

    HH = Range(Cells(i 1, 8), Cells(i 1, 8)).Value '要COPY的位置

    Workbooks.Open Filename:=AA '開啟檔案

    If dd = "" Then GoTo 100 '如未選工作表則停止copy動作

    Sheets(dd).Select '到新開啟檔中,某一工作表

    Range(EE).Select '到工作表中設定範圍

    Selection.Copy

    Windows(FF).Activate

    Sheets(GG).Select

    Range(HH).Select

    ActiveSheet.Paste

    100

    Windows(NN).Activate

    Sheets("Sheet1").Select

    Range("a1").Select

    Next i

    End Sub

  • 1 0 年前

    另一種巨集之寫法,讓大家參考...

    編程如下:

    Sub 價格按鈕_Click()

    Dim Price(1 To 10) '設定10個陣列

    Range("B4:B1000").ClearContents '清除價格欄

    MyFilePath = Range("A1") '檔案路徑

    MyItem = Range("A2")

    For i = 1 To 10 '檔名由1到10之循環

    MyFilePName = MyFilePath & "\" & i & ".xls" '檔案路徑名稱

    Workbooks.Open MyFilePName

    k = 1

    Do

    k = k 1

    Item = Sheets("單價表").Cells(k, 1)

    If Item = MyItem Then Price(i) = Sheets("單價表").Cells(k, 2): GoTo aa

    Loop Until Item = ""

    MsgBox ("檔案" & i & "物品" & MyItem & "找不到資料!")

    aa:

    MyFileName = i & ".xls" '檔案名稱

    Workbooks(MyFileName).Close SaveChanges:=False '關閉叫出之檔,不儲存

    Next i

    For j = 1 To 10

    Sheets("主表").Cells(j ! 3, 2) = Price(j) '填入價格

    Next j

    End Sub

    請參考如下附檔,解壓縮把1~10.xls及主檔.xls複製到C:\TEST之下,再開"主檔.xls",按"價格按鈕"

    http://www.box.net/shared/4jj172348g

  • 1 0 年前

    漢堡已解說的很清楚了, 不過, 既然海洋大師你來信要我回答,

    我就寫個範例給您吧:

    Sub GetPrice()

    Dim Fname, Rng As String

    Dim i As Integer

    Dim OpenedBK As Object

    2008-04-15 13:19:03 補充:

    For i = 1 To 10 '連續開10個檔

    Fname = i & ".xls" '組成檔名字串 1.xls, 2.xls...

    Set OpenedBK = Workbooks.Open(Fname) '開啟檔案

    Rng = "A" & i + 3 '假設要將讀出的價格放在本活頁簿 Sheet2 的 A4 ~ A13

    '假設價格都在各檔案 Sheet1 的 C7

    2008-04-15 13:19:14 補充:

    ThisWorkbook.Worksheets("Sheet2").Range(Rng).Value = _

    OpenedBK.Worksheets("Sheet1").Range("C7").Value

    OpenedBK.Close '關閉檔案

    Next i

    End Sub

  • 您覺得這個回答如何?您可以登入為回答投票。
  • 匿名使用者
    1 0 年前

    大大你好

    我先貼上抓取 一個資料夾內所有的excel檔的vba 語法

    如果你要一個完整的巨集 可能要再好好說一下你的需求

    例如欄位,每次都抓取A物品還是可以輸入抓取的物品...等

    如果你真的要用巨集來解決的話

    我的信箱 9527ya@gmail.com 可以來討論看看

    Sub text()

    Dim myfs As FileSearch

    Dim mypath As String

    Dim myrng As Range

    Dim i As Long

    Set myfs = Application.FileSearch

    mypath = ThisWorkbook.Path

    With myfs

    .NewSearch

    .LookIn = mypath

    .FileType = msoFileTypeAllFiles

    .Filename = "*.xls"

    .SearchSubFolders = True

    If .Execute(SortBy:=msoSortByFileName) > 0 Then

    For i = 1 To .FoundFiles.Count

    mystr = .FoundFiles(i)

    Debug.Print mystr

    Next

    End If

    End With

    Application.DisplayAlerts = False

    Set myfs = Nothing

    End Sub

  • 樂財
    Lv 5
    1 0 年前

    首先, 不清楚VBA巨集如何使用, 可以利用 "工具>巨集>錄製新巨集" 功能來錄製巨集, 再利用 "工具>巨集>Visual Basic 編輯器" 來檢視巨集的語法。

    在VBA中要開啟檔案, 語法為 Workbooks.Open(filename as string)

    不過, 你的問題, 還可以不需要用到巨集。

    假設你要取得的A物品的數據是存在於固定儲存格 (因為, 存在不同儲存格會較複雜, 還要加上其它公式或在VBA中加以運算等等)... 例如, 此數據是在A1...

    ='[filename.xls]sheetname'!A1 (包含等號)

    在你要取值的儲存格中輸入如上的語句, 就可以取得不同檔案中指定工作表中的某一儲存格中的值。

    所以, 可能的例子如下:

    A1中輸入 ='[1.xls]sheet1'!A1

    A2中輸入 ='[2.xls]sheet1'!A1

    A3中輸入 ='[3.xls]sheet1'!A1

    以此類推...

    A10中輸入 ='[10.xls]sheet1'!A1

    A11中輸入 =AVERAGE(A1:A10)

    A11的值, 就會是各別從 1.xls~10.xls 的 A1 所取得的值的平均值.

  • 小花
    Lv 5
    1 0 年前

    如果檔案位置及儲存格位置都是固定的,你可以試著使用錄制巨集方式

    ,將你在EXCEL想要做的動作錄制下來,

    但是看你的題意,你所謂的抓數據出來,也可考慮用資料連結方式

    建議你提供A物品數據在工作表的位置,方便回答

還有問題?馬上發問,尋求解答。