2016-05-30 10 views
2

Ich habe dieses Makro, das visuelle Hilfsmittel für die Kennzeichnung Schaltungen aus meinem Elektrohandwerk macht, und ich möchte sie identifizieren, aber manchmal funktioniert es (nur in den beiden ersten Etiketten, und dann fehlt es Informationen in einigen Zellen, das ist die Code:Warum funktioniert dieser Code manchmal und manchmal nicht?

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 

mit diesem i vortäuschen diese Zellen (visuelle Arbeitsblatt) Image1

und die DB_Range ist die folgende (DBCircuits Arbeitsblatt) zu füllen: image2

der Punkt ist, dass manchmal die CircuitName ist nicht zum v hinzugefügt Ituals, und auch die Position, können Sie mir bitte helfen? Ich arbeite immer noch das Problem

+1

Versuchen Sie '.Value' nach diesen hinzuzufügen: 'Origen.Offset (0, 1)' so ist es 'Origen.Offset (0, 1) .Wert =' – ib11

+0

Wenn Sie deklarieren möchten mehrere 'Range'-Variablen in einer Zeile, dann müssen Sie' Dim DB_Range als Range, StartVisuals As Range'. Ihre Zeile 'Dim DB_Range, StartVisuals As Range' ist gleichbedeutend mit' Dim DB_Range als Variante, StartVisuals As Range' und diese Zeile von Ihnen 'Dim CircuitName, Ort, Color1, Color2, DailyReq, StdPack As String' ist für VBA gleich 'Dim CircuitName als Variante, Position als Variante, Color1 als Variante, Color2 als Variante, DailyReq als Variante, StdPack als String'. Das Ändern könnte einige Probleme lösen. – Ralph

+0

danke @ ib11, es war auch das Problem, aber das eigentliche Problem war, dass ich einen Wert in eine verbundene Zellen setzen wollte, verpasste ich diesen Code (das ist ein Beispiel) 'Origen.Offset (0, 1) .MergeArea .Cells (1, 1) .Value = CircuitName', also füge ich diesen Code einigen Anweisungen hinzu, und auch deinem Vorschlag, vielen Dank. übrigens @Ralph, wollte ich nicht wegen der Speicherauslastung, aber am Ende war es nicht das Problem, danke trotzdem, ich schätze deine Hilfe wirklich – JoeJoe

Antwort

0

Versuchen Sie .Value nach diesen Zeilen hinzuzufügen: Origen.Offset(0, 1) so ist es Origen.Offset(0, 1).Value =

So würden Sie haben:

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

(Dies ist für funktioniert sowohl einzelne oder verbundene Zellen, was Sie haben.)