返回列表 上一主題 發帖

請問連結另一個檔案不要打開

請問連結另一個檔案不要打開

小弟有A檔案想直接讀取B檔案如圖

原本在2007可以執行
在2003便會有問題
而且RUN的時候B檔案會打開
可以不要讓它打開
改用按鈕按了才執行嗎
另外我想相同的產品數量加總顯示一次就好如圖

請指點一下,謝謝 Test.rar (57.91 KB)
Private Sub Workbook_Open()
Dim Wb As Workbook
Set Wb = Workbooks.Open("C:\Documents and Settings\123\桌面\Test\B.xls")
For i = 1 To 30
ThisWorkbook.Worksheets("Sheet1").Cells(2, 4 * i - 2) = Wb.Worksheets("Sheet1").Cells(i + 3, 1).Value
If (Wb.Worksheets("Sheet1").Cells(i, 2).Value) Mod 100 = 0 Then
ThisWorkbook.Worksheets("Sheet1").Cells(3, 4 * i - 2) = "(目標 " & (Wb.Worksheets("Sheet1").Cells(i + 3, 2).Value) / 1000 & "k)"
Else
ThisWorkbook.Worksheets("Sheet1").Cells(3, 4 * i - 2) = "(目標 " & (Wb.Worksheets("Sheet1").Cells(i + 3, 2).Value) & "units)"
End If
Next
End Sub
50 字節以內
不支持自定義 Discuz! 代碼

本帖最後由 GBKEE 於 2010-10-5 09:17 編輯

回復 1# amu1129
你的錯誤是 If (Wb.Worksheets("Sheet1").Cells(i+3, 2).Value) Mod 100 = 0 Then 沒有加3 其他都有加3
檔案必須是開啟的 才可以執行. 於程式最後關閉掉就可以
如要用按鈕執行  請 刪掉Sub Workbook_Open 的程式  將程式碼複製到 按鈕的程式裡
另外我想相同的產品數量加總顯示一次就好 程式碼如下:
  1. Private Sub Workbook_Open()
  2. Dim Wb As Workbook, d As Object, i%, ii%
  3. Set Wb = Workbooks.Open("C:\Documents and Settings\123\桌面\Test\B.xls")
  4. Set d = CreateObject("Scripting.Dictionary")
  5. For i = 1 To 30
  6. If d.exists(Wb.Worksheets("Sheet1").Cells(i + 3, 1).Value) = False And Wb.Worksheets("Sheet1").Cells(i + 3, 1) <> "" Then
  7. d(Wb.Worksheets("Sheet1").Cells(i + 3, 1).Value) = ""
  8. ii = ii + 1
  9. ThisWorkbook.Worksheets("Sheet1").Cells(2, 4 * ii - 2) = Wb.Worksheets("Sheet1").Cells(i + 3, 1).Value
  10. If (Wb.Worksheets("Sheet1").Cells(i + 3, 2).Value) Mod 100 = 0 Then
  11. ThisWorkbook.Worksheets("Sheet1").Cells(3, 4 * ii - 2) = "(目標 " & (Wb.Worksheets("Sheet1").Cells(i + 3, 2).Value) / 1000 & "k)"
  12. Else
  13. ThisWorkbook.Worksheets("Sheet1").Cells(3, 4 * ii - 2) = "(目標 " & (Wb.Worksheets("Sheet1").Cells(i + 3, 2).Value) & "units)"
  14. End If
  15. End If
  16. Next
  17. Wb.Close '關閉檔案
  18. End Sub
複製代碼

TOP

版主~不好意思
我不太懂ii = ii + 1這段的用法耶
我逐段執行大致知道是將重複的產品合一
但是想更清楚為何這樣可以合併
煩請版主幫我指點,謝謝
50 字節以內
不支持自定義 Discuz! 代碼

TOP

回復 3# amu1129
If d.exists(Wb.Worksheets("Sheet1").Cells(i + 3, 1).Value) = False And Wb.Worksheets("Sheet1").Cells(i + 3, 1) <> "" Then
當上面的程式碼 為在判斷產品未出現時的條件成立時  執行下面程式碼
d(Wb.Worksheets("Sheet1").Cells(i + 3, 1).Value) = ""
ii = ii + 1   
當第一次執行ii = ii + 1 時 由於程式未於開始時指定值給變數 i, 此時ii為空白的(EMPTY)  所以 ii = 空白 + 1=>1
下一次 判斷產品未出現時的條件成立時  ii = ii (1) + 1 =>2
ThisWorkbook.Worksheets("Sheet1").Cells(2, 4 * ii - 2) = Wb.Worksheets("Sheet1").Cells(i + 3, 1).Value
如此 4 * ii - 2 計算的值才會正確

TOP

        靜思自在 : 【時間無法遮擋】怕時間消逝,花了許多心血,想盡各式方法要遮擋時間,結果是:浪費了更多時間,且一無所成!
返回列表 上一主題