Board logo

標題: [發問] VBA 表格內某格數值等於其他EXCEL檔 [打印本頁]

作者: toxin    時間: 2012-5-3 16:00     標題: VBA 表格內某格數值等於其他EXCEL檔

  1. Private Sub CommandButton1_Click()
  2.     Dim a As Integer, i As Integer
  3.     Dim b As Integer
  4.     Dim c As Variant
  5.     Dim d As Variant
  6.     Dim E As Variant
  7.     IA = 7000
  8.     IB = 3
  9.     IC = 10
  10.    

  11.    
  12.    Do
  13.       If Sheets("製造單").Range("E" & IB) <> "" Then
  14.       IB = IB + 1
  15.       End If
  16.       Loop While Sheets("製造單").Range("E" & IB) <> ""

  17.       
  18.    
  19. AGO:


  20. IC = IC + 1
  21. Do

  22.    
  23.     d = Sheets("製造單").Range("D" & IB)
  24.     Set c = Sheets("客戶").Range("B11:B" & IC).Find(What:=d, LookIn:=xlFormulas, _
  25.          LookAt:=1, SearchOrder:=2, SearchDirection:=xlNext, _
  26.          MatchCase:=False, MatchByte:=False, SearchFormat:=True)
  27.     If IC = IA Then
  28.     Sheets("製造單").Range("E" & IB) = "未命名"
  29.     GoTo STAR
  30.     End If
  31.          
  32.     If c Is Nothing Then
  33.    
  34.     GoTo AGO
  35.     Else
  36.    
  37. '    IA = IC - 1
  38. Sheets("製造單").Range("E" & IB) = Sheets("客戶").Range("H" & IC)
  39.     End If
  40. STAR:
  41.     IB = IB + 1
  42.     IC = 11
  43.    
  44.     Loop While Sheets("製造單").Range("D" & IB) <> ""
  45.     End Sub
複製代碼
請問依下如果我的客戶工作表在其他EXCEL檔裡
要如何叫阿??
作者: GBKEE    時間: 2012-5-3 17:12

回復 1# toxin
試試看
  1. Option Explicit
  2. Private Sub CommandButton1_Click()
  3.     Dim a As Integer, i As Integer
  4.     Dim b As Integer
  5.     Dim c As Variant
  6.     Dim d As Variant
  7.     Dim E As Variant
  8.     Dim WB As Workbook, IA As Integer, IB As Integer, IC As Integer
  9.     IA = 7000
  10.     IB = 3
  11.     IC = 10
  12.     Set WB = Workbooks.Open("d:\test.xls")  '開啟活頁簿: 客戶工作表所在的活頁簿
  13.     Do
  14.         If WB.Sheets("製造單").Range("E" & IB) <> "" Then
  15.             IB = IB + 1
  16.         End If
  17.     Loop While WB.Sheets("製造單").Range("E" & IB) <> ""
  18. AGO:
  19.     IC = IC + 1
  20.     Do
  21.         d = WB.Sheets("製造單").Range("D" & IB)
  22.         Set c = WB.Sheets("客戶").Range("B11:B" & IC).Find(What:=d, LookIn:=xlFormulas, _
  23.          LookAt:=1, SearchOrder:=2, SearchDirection:=xlNext, _
  24.          MatchCase:=False, MatchByte:=False, SearchFormat:=True)
  25.         If IC = IA Then
  26.             WB.Sheets("製造單").Range("E" & IB) = "未命名"
  27.             GoTo STAR
  28.         End If
  29.         If c Is Nothing Then
  30.             GoTo AGO
  31.         Else
  32.         '    IA = IC - 1
  33.             WB.Sheets("製造單").Range("E" & IB) = Sheets("客戶").Range("H" & IC)
  34.         End If
  35. STAR:
  36.         IB = IB + 1
  37.         IC = 11
  38.     Loop While Sheets("製造單").Range("D" & IB) <> ""
  39. End Sub
複製代碼

作者: toxin    時間: 2012-5-4 08:11

回復 2# GBKEE
不好意思
可能我表達不是很好
製造單跟客戶所在的檔案是不一樣的
如果單獨用開啟的方式開啟客戶所在的檔案
程式會沒辦法跑下去
不曉得有沒有不用開啟檔案的方式直接調用"客戶"工作表
作者: Hsieh    時間: 2012-5-4 08:50

回復 3# toxin
應該是你兩個檔案分別使用2個Excel應用程式開啟所致
我想你這個程序應該是在含有Sheets("製造單")的活頁簿中某一工作表的按鈕程序
試試以下程式碼
  1. Private Sub CommandButton1_Click()
  2.     Dim a As Integer, i As Integer
  3.     Dim b As Integer
  4.     Dim c As Variant
  5.     Dim d As Variant
  6.     Dim E As Variant
  7.     Dim WB As Workbook, IA As Integer, IB As Integer, IC As Integer
  8.     IA = 7000
  9.     IB = 3
  10.     IC = 10
  11.     Set WB = Workbooks.Open("d:\test.xls")  '開啟活頁簿: 客戶工作表所在的活頁簿
  12.     Do
  13.         If WB.Sheets("製造單").Range("E" & IB) <> "" Then
  14.             IB = IB + 1
  15.         End If
  16.     Loop While Sheets("製造單").Range("E" & IB) <> ""
  17. AGO:
  18.     IC = IC + 1
  19.     Do
  20.         d = Sheets("製造單").Range("D" & IB)
  21.         Set c = WB.Sheets("客戶").Range("B11:B" & IC).Find(What:=d, LookIn:=xlFormulas, _
  22.          LookAt:=1, SearchOrder:=2, SearchDirection:=xlNext, _
  23.          MatchCase:=False, MatchByte:=False, SearchFormat:=True)
  24.         If IC = IA Then
  25.             Sheets("製造單").Range("E" & IB) = "未命名"
  26.             GoTo STAR
  27.         End If
  28.         If c Is Nothing Then
  29.             GoTo AGO
  30.         Else
  31.         '    IA = IC - 1
  32.             Sheets("製造單").Range("E" & IB) = WB.Sheets("客戶").Range("H" & IC)
  33.         End If
  34. STAR:
  35.         IB = IB + 1
  36.         IC = 11
  37.     Loop While Sheets("製造單").Range("D" & IB) <> ""
  38. WB.Close
  39. End Sub
複製代碼

作者: toxin    時間: 2012-5-7 08:15

回復 4# Hsieh
感謝大大回覆
程式所在工作表的是製造單工作表
但是能夠不開啟客戶工作表而直接使用嗎?
因為會有下列問題
11列中開啟了客戶工作表的檔案
13製造單工作表應該不需要加(WB.)
但是11開啟客戶表後
到13列所在的工作表不同所以會出現"陣列索引超出範圍"
作者: Hsieh    時間: 2012-5-7 08:54

回復 5# toxin


    所謂不開啟只是視覺上的關係,如果要取得某檔案內容,都必須開啟該檔案
就算是資料庫查詢,實質上還是在背景作業中開啟該檔案作為資料庫連線
你的問題最好將2個檔案同時附上,才知道問題出在哪裡
作者: toxin    時間: 2012-5-8 08:17

回復 6# Hsieh

麻煩大大了
檔案如附件




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