Board logo

標題: [發問] 資料比對後,並依照月份 [打印本頁]

作者: red    時間: 2014-11-6 15:52     標題: 資料比對後,並依照月份

請問前輩們:

小弟目前使用公式寫出,但在同時使用EXCEL 時,附件檔案會受到其他檔案影響,會重新更新作業(不想停用公式自動更新)
想請教是否可以使用VBA 來解決。

結果:異動統計
來源:庫存異動


[attach]19498[/attach]

[attach]19497[/attach]
作者: stillfish00    時間: 2014-11-6 19:49

回復 1# red
同時使用EXCEL 時,附件檔案會受到其他檔案影響

太籠統了,怎樣操作時如何被影響,然後希望能做到怎樣。

大家都不是原操作者,不說清楚些是很難理解你遇到的情形的,
更別提能不能解決了。。。
作者: luhpro    時間: 2014-11-6 22:53

回復 1# red
你的意思是開檔後不要因為其他檔案內容發生變更進而異動到本檔案的內容嗎?
最簡單的方法是開檔後系統詢問是否更新遠端參照時, 選不要更新,
若之後又想更新時,
關檔再開即可.
作者: red    時間: 2014-11-7 08:38

回復  red
你的意思是開檔後不要因為其他檔案內容發生變更進而異動到本檔案的內容嗎?
最簡單的方法是開檔 ...
luhpro 發表於 2014-11-6 22:53


如同luhpro 前輩 所說,如果同時開啟其他excel ,在另一檔案作業時,只要輸入就進而會影響附件檔案,公式就會重新更新。
在試試luhpro前輩 方式看看
感謝其他前輩回覆
作者: red    時間: 2014-11-10 09:23

對不起以上前輩,目前描述不是很清楚,
當同時開立2個excel 檔案作業,但不是有相關性,假設A檔為物料控制表3,B檔則為其他檔案,兩檔案無任何公式連結參照。
目前遇到問題是在B檔作業時只要儲存格有異動,則A檔之SHEET(異動統計)就會開始進行公式的運行及更新

本人目前想要利用VBA 取代A檔-異動統計目前圖檔紅框處使用公式部分,才想請問前輩,是否可以協助改成VBA 方式進行。
紅框處的來源為物料控制表--庫存異動
以上不知各位前輩是否可以了解,小弟目前狀況,本人對於VBA上不熟悉,所以想請各位前輩協助
作者: luhpro    時間: 2014-11-11 22:46

本帖最後由 luhpro 於 2014-11-11 22:47 編輯
對不起以上前輩,目前描述不是很清楚,
當同時開立2個excel 檔案作業,但不是有相關性,假設A檔為物料控制 ...
red 發表於 2014-11-10 09:23

我大概知道你的意思了,
也就是某個Excel檔案的儲存格發生異動,
但卻觸發了另一個Excel檔案中的Worksheet_Change程序,
導致該段程式非預期的被執行,
以致出現非原設計本意的結果.

這可以用一個 IF 判斷區塊包住,
只要不是自己本身異動而觸發的就不執行來解決 :

1. 假設當 "異動統計" 工作表的儲存格發生異動時才要執行 ->
  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2.   If Target.Parent.Name = "異動統計" Then
  3.     ...
  4.   End If
  5. End Sub
複製代碼
2. 假設須當 "Book1.xls" 檔案的 "異動統計" 工作表的儲存格發生異動時才要執行 ->
  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2.   If Target.Parent.Parent.Name = "Book1.xls" And Target.Parent.Name = "異動統計" Then
  3.     ...
  4.   End If
  5. End Sub
複製代碼

作者: red    時間: 2014-11-13 08:17

回復 6# luhpro

感謝luhpro 前輩再次回覆,小弟在試試看
謝謝
作者: red    時間: 2014-12-10 11:38

回復 7# red
搜尋網路資料及各位前輩教學
加入以下VBA 程式則改善原本問題
Private Sub CommandButton1_Click()

Sheet2.Cells(1, 3) = Now()
Application.ScreenUpdating = False
Sheet2.Range("h4:o220").ClearContents
Call Module3.Macro1

    For i = 4 To Sheet1.Range("a65536").End(xlUp).Row
        For j = 8 To 14
            If Sheet1.Cells(i, 3) = Sheet2.Cells(3, j) Then
                For k = 4 To Sheet2.Range("a65536").End(xlUp).Row
                    If Sheet1.Cells(i, 1) = Sheet2.Cells(k, 1) And Sheet1.Cells(i, 8) = Sheet2.Cells(k, 6) Then
                       Sheet2.Cells(k, j) = Sheet2.Cells(k, j) + Sheet1.Cells(i, 9)
                    End If
                Next
            End If
        Next
    Next

    For i = 4 To Sheet2.Range("a65536").End(xlUp).Row
        For j = 8 To 13
            Sheet2.Cells(i, 15) = Sheet2.Cells(i, 15) + Sheet2.Cells(i, j)
        Next
            Sheet2.Cells(i, 15) = Sheet2.Cells(i, 15) / 6
    Next
Sheet2.Cells(1, 4) = Now()

End Sub




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