Sub One_Macro_To_Rule_Them_All()
'
'This clears the WOP sheet for formatting
Sheets("WOP").Select
Range("A8").Select
Selection.CurrentRegion.Select
Selection.Offset(1, 0).Resize(Selection.Rows.Count - 1, _
Selection.Columns.Count).Select
Selection.ClearContents
Cells.Select
With Selection.Interior
.PatternColorIndex = xlAutomatic
.ThemeColor = xlThemeColorDark1
.TintAndShade = 0
.PatternTintAndShade = 0
End With
Cells(3, 2) = "Date : " & Format(Date, "dd/mm/yyyy")
'**************
'Copy the data to the WOP Sheet
Sheets("Data").Select
Rows("1:1").Select
Range( _
"Table_FromMyServer_view_ForwardJobsLive_WOP[[#Headers],[Job No]]") _
.Activate
Range("B2").Select
Selection.CurrentRegion.Select
Selection.Offset(1, 0).Resize(Selection.Rows.Count - 1, _
Selection.Columns.Count - 1).Select
Selection.Copy
Sheets("WOP").Select
Range("A8").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("A8").Select
Cells(2, 2) = "Works Order Priority Sheet - " & Cells(8, 1)
Selection.CurrentRegion.Select
Selection.Offset(0, 6).Resize(Selection.Rows.Count, _
Selection.Columns.Count - 6).Select
curdate = Format(Date, "dd/mm/yyyy")
Dim dt As String
dt = CStr(curdate)
'find the start of the date range
Range("A8").Select
Selection.CurrentRegion.Select
Selection.Offset(0, 6).Resize(Selection.Rows.Count, _
Selection.Columns.Count - 6).Select
Dim rngetosearch As Range
Set rngetosearch = Selection
rngetosearch.Find(What:="EARLIER", After:=ActiveCell, LookIn:=xlFormulas _
, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False).Select
Selection.Offset(0, 1).Resize(Selection.Rows.Count, Selection.Columns.Count + 1).Select
dterangestart = ActiveCell
'*********
'*************
'Format todays column as yellow
Range("A8").Select
Selection.CurrentRegion.Select
Selection.Offset(0, 6).Resize(Selection.Rows.Count, _
Selection.Columns.Count - 6).Select
Dim sel As Range
Dim rangetosearch As Range
Set rangetosearch = Selection
Dim strdate As String
strdate = Date
strdate = Format(strdate, "Short Date")
Set sel = rangetosearch.Find(What:=CDate(strdate), After:=ActiveCell, LookIn:=xlFormulas _
, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False)
If sel Is Nothing = False Then
sel.Activate
End If
ActiveSheet.Range(sel.Cells.Address, ActiveSheet.Range(sel.Cells.Address).End(xlDown)).Select
With Selection.Interior
.Color = 65535
End With
'***************
'Cycle Through the rows and change the blocks
Sheets("WOP").Select
Selection.CurrentRegion.Select
Selection.Offset(1, 0).Resize(Selection.Rows.Count - 1, _
Selection.Columns.Count - 0).Select
Dim strtdte As Date
Dim enddte As Date
Dim actdte As Date
Dim diff As Integer
Dim selrnge As Range
Set selrnge = Selection
For Each rwrow In selrnge.Rows
strtdte = rwrow.Cells(5)
enddte = rwrow.Cells(7)
actdte = rwrow.Cells(6)
cell = rwrow.Cells(1)
If strtdte < dterangestart Then
'strtdte = dterangestart
diff = DateDiff("d", dterangestart, enddte) + 1
Else
diff = DateDiff("d", strtdte, enddte)
End If
strdate = strtdte
strdate = Format(strdate, "Short Date")
Range("A8").Select
Selection.CurrentRegion.Select
Selection.Offset(0, 6).Resize(Selection.Rows.Count, _
Selection.Columns.Count - 6).Select
Set rngetosearch = Selection
If strtdte < dterangestart Then
Set sel = rngetosearch.Find(What:="EARLIER", After:=ActiveCell, LookIn:=xlFormulas _
, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False)
Else
Set sel = rngetosearch.Find(What:=CDate(strdate), After:=ActiveCell, LookIn:=xlFormulas _
, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False)
End If
If sel Is Nothing = False Then
Dim col As Integer
col = CInt(sel.Column)
Selection.CurrentRegion.Select
ActiveSheet.Cells(CInt(rwrow.Row), col).Select
Selection.Offset(0, 0).Resize(Selection.Rows.Count, Selection.Columns.Count + diff).Select
With Selection.Interior
.Color = getcolor(CStr(cell))
If actdte <> #12:00:00 AM# Then
.TintAndShade = -0.249977111117893
.PatternTintAndShade = 0.399975585192419
Else
.TintAndShade = 0.399975585192419
.PatternTintAndShade = 0.399975585192419
End If
End With
End If
Next
'*************
Range("A8").Select
End Sub
2 回答
好的,谢谢你的指导 .
我打算延伸这个问题 . 基本上我最终想要做的是根据从数据源输入Excel的值来绘制Gannt图表 . 我有需要做的预测开始和结束的工作,所以我打开我的工作表,通过sql server以降序填充部门和日期,然后运行代码 . 这是一个人在这里花了两天时间手动完成这个(很多部门)
现在显然这对我来说很有特色,但我发现操纵这些日期有点棘手 . 我会发布模块的整个代码,以防万一有人在某些时候寻找类似的东西 .
它产生了这个; (我突出显示了隐藏的日期字段 . )
说真的,这花了我一整天所以我当然希望它可以帮助某人;)Pace
码;
我不认为可以使用宏或标准XLS函数来完成 .
您需要编写VBA脚本来比较值 . 一旦写入,可以通过单击按钮或打开XLS来调用 .