我有一個用VBA編寫的Excel VBA腳本,在編碼方面我不是新手,但對於我來說Excel VBA已經一個由MS出售的糖丸包裹的砷噩夢,作爲一種容易學習的語言。如何使用VBA在Excel中移動單元格後的代碼
好的,咆哮道歉,但我離題了。
下面是完整的腳本:
Option Explicit
Sub tgr()
Dim wsB As Worksheet 'BackOrder
Dim wsJ As Worksheet 'Jobs List
Dim wsA As Worksheet 'Archive
Dim LastRow As Long
Set wsB = Sheets("BackOrder")
Set wsJ = Sheets("Jobs List")
Set wsA = Sheets("Archive")
With Application
.ScreenUpdating = False
.DisplayAlerts = False
.EnableEvents = False
.Calculation = xlCalculationManual
End With
With Intersect(wsJ.UsedRange, wsJ.Columns("N"))
.AutoFilter 1, "<>Same"
With Intersect(.Offset(2).EntireRow, .Parent.Range("B:L"))
.Copy wsA.Cells(Rows.Count, "B").End(xlUp).Offset(1)
.EntireRow.Delete
End With
.AutoFilter
End With
LastRow = wsB.Range("B6").End(xlDown).Row
wsB.Range("P5:Q5").Copy wsB.Range("P6:Q" & LastRow)
Calculate
wsB.UsedRange.Copy Sheets.Add.Range("A1")
With Intersect(ActiveSheet.UsedRange, ActiveSheet.Columns("Q"))
.AutoFilter 1, "<>Different"
.EntireRow.Delete
With .Parent
.AutoFilterMode = False
Intersect(.UsedRange, .Columns("G")).Cut .Range("F1")
Intersect(.UsedRange, .Columns("H")).Cut .Range("G1")
Intersect(.UsedRange, .Columns("L")).Cut .Range("H1")
Intersect(.UsedRange, .Columns("N")).Cut .Range("I1")
Intersect(.UsedRange, .Range("B:J")).Copy wsJ.Cells(Rows.Count, "B").End(xlUp).Offset(1)
.Delete
End With
End With
LastRow = wsJ.Cells(Rows.Count, "B").End(xlUp).Row
wsJ.Range("M1:T1").Copy
wsJ.Range("B3:I" & LastRow).PasteSpecial xlPasteFormats
wsJ.Range("U1:W1").Copy wsJ.Range("J3:L" & LastRow)
wsJ.Range("X1:Y1").Copy wsJ.Range("M3:N" & LastRow)
With Application
.Calculation = xlCalculationAutomatic
.EnableEvents = True
.DisplayAlerts = True
.ScreenUpdating = True
End With
End Sub
正如你可以看到這是一個三頁的劇本,延期交貨,喬布斯列表和歸檔,我需要做的是在存檔。當它在列F中的單元格中查找時,使用TODAY()作爲告訴腳本的其餘部分的方式中的單元格在F列的早期或晚期多少天。
J列顯示較早,K列顯示較晚。
列J的腳本是:
=IF(F3-TODAY()<0,"",F3-TODAY())
K欄的腳本是:
=IF(TODAY()-F3<1,"",TODAY()-F3)
F欄在這種情況下是較大的腳本,它通過導入移動數據,並且具有無格式的一部分。
現在,當我將行帶入存檔時,我希望它是單元格的位置,而不是在任何腳本中都有TODAY(),我希望它顯示它在那裏移動的日期,所以它仍然是今天,而不是今天(),它將有這種格式的日期##/##/##。它會「凍結」J的計數,所以從那一天開始它就會準確無誤,所以我們會知道它是遲到還是早發還是準時發貨。
這是可能的,如果是的話如何?
有我正確地讀你的問題?你是否將公式放在J和K列中,然後每天重新計算?爲什麼不:'.Cells(Row,「J」)。Value = Now()'?這會將單元修復到代碼運行的日期/時間。 – 2012-04-04 08:53:58
但是當你再次打開表單時不會改變嗎?如果NOW()兩週前運行成爲今天,如果表單再次打開,那麼它不會發生嗎? – 2012-04-04 14:50:30
'NOW()'是返回的日期,它是由一個宏其中我的發言作爲存儲的值執行時間的函數。一分鐘前'Now()'返回41003.673287037。 41003 =自1月1日以來的天數= 4月12日4。12 .673287037約爲16:08/24:00。 – 2012-04-04 15:14:16