2016-05-30 47 views
2

我得到了這個宏,它使我的電子倉庫中的標記電路的視覺幫助,我想識別它們,但有時它可以工作(只在兩個第一個標籤,然後,它缺乏一些細胞信息,這是代碼:爲什麼有時候這段代碼有效,有時卻不行?

Public Sub VisualAids() 
Dim DB_Range, StartVisuals As range 
Dim Origen As range 
Set DB_Range = Worksheets("DBCircuits").range("B2:K573") 
Set Origen = Worksheets("visuales").range("C2") 
Dim i, j, TotalLabels, LabelsCounter As Integer 
Dim Labels As Integer 
Dim CircuitName, Location, Color1, Color2, DailyReq, StdPack As String 
TotalLabels = Application.WorksheetFunction.Sum(Worksheets("DBCircuits").range("K2:K573")) 

For i = 1 To TotalLabels 
CircuitName = DB_Range.Cells(i, 1) 
Location = DB_Range.Cells(i, 8) 
Color1 = DB_Range.Cells(i, 6) 
Color2 = DB_Range.Cells(i, 7) 
DailyReq = DB_Range.Cells(i, 3) 
StdPack = DB_Range.Cells(i, 4) 
Labels = DB_Range.Cells(i, 10) 

For j = 1 To Labels 
Origen.Offset(0, 1) = CircuitName 
Origen.Offset(1, 1) = Location 
Origen.Offset(3, 1) = DailyReq 
Origen.Offset(4, 1) = StdPack 

Select Case Color1 
Case "0" 
Origen.Offset(2, 3).Interior.Color = RGB(0, 0, 0) 
Origen.Offset(2, 5).Interior.Color = RGB(0, 0, 0) 
Case "1" 
Origen.Offset(2, 3).Interior.Color = RGB(153, 102, 51) 
Origen.Offset(2, 5).Interior.Color = RGB(153, 102, 51) 
Case "2" 
Origen.Offset(2, 3).Interior.Color = RGB(255, 0, 0) 
Origen.Offset(2, 5).Interior.Color = RGB(255, 0, 0) 
Case "3" 
Origen.Offset(2, 3).Interior.Color = RGB(255, 102, 0) 
Origen.Offset(2, 5).Interior.Color = RGB(255, 102, 0) 
Case "4" 
Origen.Offset(2, 3).Interior.Color = RGB(255, 255, 0) 
Origen.Offset(2, 5).Interior.Color = RGB(255, 255, 0) 
Case "5" 
Origen.Offset(2, 3).Interior.Color = RGB(0, 255, 0) 
Origen.Offset(2, 5).Interior.Color = RGB(0, 255, 0) 
Case "6" 
Origen.Offset(2, 3).Interior.Color = RGB(0, 176, 240) 
Origen.Offset(2, 5).Interior.Color = RGB(0, 176, 240) 
Case "7" 
Origen.Offset(2, 3).Interior.Color = RGB(0, 176, 240) 
Origen.Offset(2, 5).Interior.Color = RGB(0, 176, 240) 
Case "8" 
Origen.Offset(2, 3).Interior.Color = RGB(128, 128, 128) 
Origen.Offset(2, 5).Interior.Color = RGB(128, 128, 128) 
Case "9" 
Origen.Offset(2, 3).Interior.Color = RGB(255, 255, 255) 
Origen.Offset(2, 5).Interior.Color = RGB(255, 255, 255) 
Case Else 
Origen.Offset(2, 3).Value = "-" 
Origen.Offset(2, 5).Value = "-" 
End Select 

Select Case Color2 
Case "0" 
Origen.Offset(2, 4).Interior.Color = RGB(0, 0, 0) 
Case "1" 
Origen.Offset(2, 4).Interior.Color = RGB(153, 102, 51) 
Case "2" 
Origen.Offset(2, 4).Interior.Color = RGB(255, 0, 0) 
Case "3" 
Origen.Offset(2, 4).Interior.Color = RGB(255, 102, 0) 
Case "4" 
Origen.Offset(2, 4).Interior.Color = RGB(255, 255, 0) 
Case "5" 
Origen.Offset(2, 4).Interior.Color = RGB(0, 255, 0) 
Case "6" 
Origen.Offset(2, 4).Interior.Color = RGB(0, 176, 240) 
Case "7" 
Origen.Offset(2, 4).Interior.Color = RGB(0, 176, 240) 
Case "8" 
Origen.Offset(2, 4).Interior.Color = RGB(128, 128, 128) 
Case "9" 
Origen.Offset(2, 4).Interior.Color = RGB(255, 255, 255) 
Case Else 
Origen.Offset(2, 4).Value = "-" 
End Select 
LabelsCounter = LabelsCounter + 1 

If LabelsCounter Mod 2 = 0 Then 
Origen.Offset(6, 1) = "Back visual" 
'the next one would be down-left 
Set Origen = Origen.Offset(11, -9) 
Else 
Origen.Offset(6, 1) = "Front visual" 
'the next one would be right 
Set Origen = Origen.Offset(0, 9) 
End If 

Next j 
Next i 
End Sub 

與此我假裝來填補這個細胞(視覺工作表)Image1

和DB_Range是下述(DBCircuits工作表):image2

的一點是,有時CircuitName是沒有添加到v isuals,以及位置,你能幫助我嗎?我仍在努力查找問題

+1

嘗試在這些之後添加'.Value':'Origen.Offset(0,1)'因此它是'Origen.Offset(0,1).Value =' – ib11

+0

如果你想聲明在一行中有幾個'Range'變量,那麼你將不得不寫'Dim作爲範圍的DB_Range,作爲範圍的StartVisuals。你的行'Dim DB_Range,StartVisuals As Range'相當於'Dim DB_Range作爲Variant,StartVisuals As Range'並且你的這行代碼Dim CircuitName,Location,Color1,Color2,DailyReq,StdPack As String'與VBA相同'Dim CircuitName爲Variant,Location爲Variant,Color1爲Variant,Color2爲Variant,DailyReq爲Variant,StdPack爲String'。改變這可能會解決一些問題。 – Ralph

+0

謝謝@ ib11,這也是問題所在,但真正的問題是我想把一個值放在合併的單元格中,我錯過了這個代碼(這是一個例子)'Origen.Offset(0,1).MergeArea .Cells(1,1).Value = CircuitName',所以我將這段代碼添加到一些語句中,也是你的建議,非常感謝。 順便說一句@Ralph,我不想這樣做是因爲內存的使用,但最後它不是這個問題,謝謝無論如何,我真的很感謝你的幫助 – JoeJoe

回答

0

嘗試這些行後添加.ValueOrigen.Offset(0, 1)所以它是Origen.Offset(0, 1).Value =

所以你會:

Origen.Offset(0, 1).Value = CircuitName 
Origen.Offset(1, 1).Value = Location 
Origen.Offset(3, 1).Value = DailyReq 
Origen.Offset(4, 1).Value = StdPack 

(這既適用於單個或合併單元格,你有。)