2016-05-30 49 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 

(这既适用于单个或合并单元格,你有。)