Board logo

標題: [發問] 如何複製表格到別的工作表 [打印本頁]

作者: brabus    時間: 2011-11-29 21:07     標題: 如何複製表格到別的工作表

本帖最後由 brabus 於 2011-12-3 21:48 編輯

如附件活頁簿1中所示
我想在按下同步按鈕後
把活頁簿1儲存格中b1到d87的資料
複製到活頁簿2中的"資料確認"那張工作表的b1到d87儲存格(未來如果資料增加的話,要可以全部複製,不過只會用到b到d的3個欄位)
現在活頁簿2中的"資料確認"工作表被"隱藏"vba 的密碼是twbts
先不考慮活頁簿1中的資料的內容,因為到時會key入正確資料
要考量的是這2個檔可能放在任一磁碟中
不限是在桌面或是"我的文件"中,可能在d槽或e槽......
未來也可能要同時存到活頁簿3中的b到d欄....
請高指導一下要怎麼寫vba
作者: Hsieh    時間: 2011-11-29 22:34

  1. Private Sub CommandButton1_Click()
  2. fs = Application.GetOpenFilename("Excel Files (*.xls), *.xls") '開啟目的檔案
  3. With Workbooks.Open(fs)
  4.   Columns("B:D").Copy .Sheets("資料確認").[B1] '複製資料
  5. End With

  6. End Sub
複製代碼
回復 1# brabus
作者: brabus    時間: 2011-11-30 16:18

回復 2# Hsieh

請問一下Hsieh大大
你所說的"fs = Application.GetOpenFilename("Excel Files (*.xls), *.xls") '開啟目的檔案"
上面這段是不是指的是取得現行檔案的路徑嗎?
那2個(*.xls)是什麼意思????一個是現在的試算檔名另一個是第二個試算嗎?
另外  .Sheets("資料確認").[B1]指的是copy到"b1"試算表的資料確認表格嗎???   
謝謝你哦
作者: Hsieh    時間: 2011-12-1 14:53

本帖最後由 Hsieh 於 2011-12-1 14:55 編輯

回復 3# brabus


    fs = Application.GetOpenFilename("Excel Files (*.xls), *.xls")
這是開啟舊檔的對話方塊,可供使用者選擇要貼上資料的檔案
.Sheets("資料確認").[B1]
就是被開啟的檔案中資料確認工作表的B1儲存格,也就是被貼上資料的位置
至於2個*.xls請參閱GetOpenFilename的FileFilter 引數說明
FileFilter     選擇性的 Variant。是指定檔案篩選規則的字串。
此字串由一檔案篩選字串與 MS-DOS 萬用字元表達的檔案篩選規則描述組成,中間以逗點分隔。[檔案類型] 下拉式清單方塊中會列出各組字串。例如,下列字串指定兩個檔案篩選,文字和增益集:文字檔 (*.txt),*.txt,增益集檔案 (*.xla),*.xla。
若要使用多個 MS-DOS 萬用字元運算式組成單一檔案篩選類型,各萬用字元之間需以分號分隔;例如,"Visual Basic Files (*.bas; *.txt),*.bas;*.txt"。
如果省略,則此引數將預設為 "All Files (*.*),*.*"。
作者: brabus    時間: 2011-12-3 19:26

回復 4# Hsieh
有上網找到了GetOpenFilename的用法
感謝Hsieh的指教
我另外作了修正
要把h21的到j60的儲存格copy到資料夾的同一個位置
分享給大家
   Range("h21:j60").Copy .Sheets("資料確認").[h21]
作者: brabus    時間: 2011-12-3 20:35

回復 4# Hsieh


    請教一下Hsieh大
我想到一個問題,那就是人名似乎不應顥示出來
所以想把按鈕搬到空白的工作表2,想說這樣就不會讓人生看到名單而可以在背景作業
所以把式子改成
Private Sub CommandButton1_Click()
fs = Application.GetOpenFilename("Excel Files (*.xls), *.xls") '開啟目的檔案
With Workbooks.Open(fs)
  Sheets("sheet1").Columns("B:F").Copy .Sheets("資料確認").[B1] '複製資料
  Sheets("sheet1").Range("J16:K300").Copy .Sheets("資料確認").[J16]
End With
End Sub
執行後結果出現"陣列索引超出範圍",請問我該怎麼修正呢
作者: Hsieh    時間: 2011-12-3 21:14

回復 6# brabus
把按鈕搬到空白工作表2
那這個空白工作表2是否與要複製的來源工作表在同一個檔案呢?
就是Sheets("sheet1")是否存在?
作者: brabus    時間: 2011-12-3 21:55

回復 7# Hsieh


    你好我己經修正附件活頁簿1了
我上次問的是在活頁簿1的工作表1設按鈕
把資料copy到活頁簿2這個檔案上的"資料確認"工作表中
現在想把工作表1這個按鈕移到同活頁簿的工作表2上
因為不想讓人看到工作表1上的人名資料
想在工作表2上按按鈕,就可以完成上面原來所說的複制的工作
謝謝你
作者: Hsieh    時間: 2011-12-3 22:04

回復 8# brabus
"陣列索引超出範圍"
的原因應該是因為工作表不存在
你檢查檔案看看你的工作表名稱是否正確
作者: brabus    時間: 2011-12-4 13:25

回復 9# Hsieh

檔案存在啊,
我試著調整了一陣子
,現在執行後出現With Workbooks.Open語法錯誤
我把新檔上傳了
請您幫我看該怎麼調整修正
謝謝
作者: Hsieh    時間: 2011-12-4 17:01

回復 10# brabus
  1. Private Sub CommandButton1_Click()

  2. fs = Application.GetOpenFilename("Excel Files (*.xls), *.xls") '開啟目的檔案
  3. With Workbooks.Open(fs)
  4.   ThisWorkbook.Sheets("工作表1").Columns("B:D").Copy .Sheets("資料確認").[B1] '複製資料
  5.   ThisWorkbook.Sheets("工作表1").Range("h21:j60").Copy .Sheets("資料確認").[h21]
  6. End With
  7. End Sub
複製代碼

作者: brabus    時間: 2011-12-4 19:21

回復 11# Hsieh
Hsieh大大跟您報告
後面的指令都一樣
我是少寫ThisWorkbook..所以這樣他會抓到別的工作表去嗎??
作者: Hsieh    時間: 2011-12-4 21:24

回復 12# brabus

因為你的按鈕做在別的工作表
所以若不指定檔案
會造成指定目前開啟的檔案
所以指明thisworkbook就能抓到巨集所在的檔案
作者: brabus    時間: 2011-12-5 08:04

回復 13# Hsieh


   了解
感恩你的回覆
謝謝
作者: brabus    時間: 2015-11-26 22:37

想再問一下
現在要copy的檔案變多了
有時會忘了那個己經複製過,那些沒有,或者按錯,而有漏掉沒複制到的檔
結果會出錯
請問有沒有可能寫一個指令
就把資料夾"小肥肥"裡面的20~30或更多檔案的"資料確認"全部複制好,不用一個一個點選
再去複制呢?
謝謝
作者: GBKEE    時間: 2015-11-27 05:56

回復 15# brabus

參考這裡 使用 Dir 進行迴圈 一一的複製
作者: brabus    時間: 2015-12-7 13:10

回復 16# GBKEE [/b
對不起我這幾天比較沒空
到今天才有時間來看您的回覆
可是我看不太懂您的回覆(哈哈,我比較笨)
我把需求再說明一次
附件中解開有有一個excel檔案叫我是主要資料,這是要copy的主檔
檔案夾中有一個"檔案資料"夾,裡面應該有20~30個檔案(我沒有全部作)
檔名不一定,但都是excel檔
我現在想要在我是主要資料excel中作一個按鈕
他可以把"我是主要資料"中的"資料確認"工作表
copy到檔案資料夾內所有(20~30個)檔案的:資料確認"工作表
檔案資料的放路徑不一定在那
但可以用Application.GetOpenFilename("Excel Files (*.xls), *.xls") 來取得
請您幫我看看怎麼處理比較好.謝謝
作者: GBKEE    時間: 2015-12-7 14:55

回復 17# brabus


試試看
  1. Option Explicit
  2. Sub Ex()
  3.     Dim xPath As String, xFile As String, AR(), i As Integer
  4.     With Application.FileDialog(msoFileDialogFolderPicker)
  5.        '.InitialFileName = "D:\TEST\"   '可預定資料夾
  6.         If .Show = True Then xPath = .SelectedItems(1)
  7.         '.Show = True  :檔案對話方塊中按下確定->選定資料夾
  8.     End With
  9.     If xPath = "" Then MsgBox "沒有選擇資料夾 !!", vbQuestion : Exit Sub
  10.     AR = Workbooks("我是主要資料.xls").Sheets("資料確認").UsedRange.Value
  11.     xFile = Dir(xPath & "\*xls", vbDirectory)  '選定資料夾中搜尋指定類型的檔案
  12.     Application.ScreenUpdating = False
  13.     Do While xFile <> ""                       '有找到指定類型的檔案
  14.         With Workbooks.Open(xPath & "\" & xFile)
  15.             .Sheets("資料確認").[a1].Resize(UBound(AR), UBound(AR, 2)) = AR
  16.             .Close True   '關閉存檔
  17.         End With
  18.         xFile = Dir   '依序 下一個指定類型的檔案
  19.     Loop
  20.     Application.ScreenUpdating = True
  21. End Sub
複製代碼

作者: brabus    時間: 2015-12-7 19:51

謝謝GBKEE大大回覆

我來試試,有問題再跟您請教
作者: brabus    時間: 2016-12-24 22:00

回復 18# GBKEE

請問GBKEE大大
我在12月中旬時有請問您,如何複製表格到別的工作表中,承蒙您回覆,後來因個人身體因素,直到現在才有空試用
經修正執行後出現"陣列索引超出範圍",我附上檔案,請您幫我看看該如何修正,謝謝,祝您聖誕節快樂
作者: GBKEE    時間: 2016-12-25 06:36

回復 20# brabus

你打錯字了,設定用工作表名稱的是  資
程式碼的是,AR = Workbooks("設定用.xls").Sheets("資檔").UsedRange.Value
作者: brabus    時間: 2016-12-25 11:05

回復 21# GBKEE


    怎麼辦,我改完後執行,一樣是陣列索引超出範圍~~~難道是我業障重嗎????
作者: GBKEE    時間: 2016-12-25 13:44

回復 22# brabus



[attach]26212[/attach]

圖片檔可直接上傳.

你還是沒將工作表的名稱"資檔"
與vba的Workbooks("設定用.xls").Sheets("資檔").UsedRange.Value
改成一致的
作者: brabus    時間: 2016-12-25 20:17

回復 23# GBKEE

抱歉GBKEE大,我該打屁股,沒看清楚.浪費你寶貴的時間回答.......
謝謝你,我看到錯的地方了....,修正好了
感~~恩~~
作者: brabus    時間: 2017-1-18 12:29

回復 23# GBKEE

請問GBKEE大大
我操作後發現,它只有把"值"複制過去而已,並沒有把"公式"和"格式"複制過去吔....
該怎麼修正????
謝謝




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