Excel VBA代码相互冲突
您能告诉我如何修复以下代码,使它们不再与每个类一起分类吗。很抱歉,我不得不在这里写下很多代码,但我真的不知道这些代码中的哪些会使它们相互冲突 因此,如果在列AU(第47列)中“已发货”,我将此部分返回所有空销售和生产单元的“汇总” 然后,如果最后一个销售栏有“标题转移”,我将在第AX栏(第50栏)中返回“x” 以下是我使用降价表的数据结构:Excel VBA代码相互冲突,excel,vba,Excel,Vba,您能告诉我如何修复以下代码,使它们不再与每个类一起分类吗。很抱歉,我不得不在这里写下很多代码,但我真的不知道这些代码中的哪些会使它们相互冲突 因此,如果在列AU(第47列)中“已发货”,我将此部分返回所有空销售和生产单元的“汇总” 然后,如果最后一个销售栏有“标题转移”,我将在第AX栏(第50栏)中返回“x” 以下是我使用降价表的数据结构: | Title |发动机系列|细分市场|客户|发动机型号| S/N |建造规格|实际完工|销售订单|项目|承诺日期| EPS日期|目标|销售|生产|第1天
| Title |发动机系列|细分市场|客户|发动机型号| S/N |建造规格|实际完工|销售订单|项目|承诺日期| EPS日期|目标|销售|生产|第1天|状态|销售|第2天|状态|销售|第3天|状态|销售|生产|状态|销售|生产|第5天状态|销售|生产|第6天状态|销售|生产|第7天状态|销售|生产|第8天状态|评论| MB51已装运| FPS |工厂产权转让|
|--------|---------------|----------------|----------|--------------|-----|------------|-------------|-------------|------|----------------|------------|--------|-------|------------|-------|--------|----------------|------------|----------------|--------|---------|------------|---------|------------------|---------|------------|---------|------------------|---------|------------|---------|------------------|---------|------------|---------|------------------|---------|------------|---------|------------------|---------|------------|---------|------------------|----------|--------------|------|-------|----------------|
|汇总| PS | APU | ABC | 46C12 | 1 | BS1 | 0000-00-00 | 101 | 450 | 2019-12-31 | 2019-12-31 |汇总|绿色|汇总|绿色|销售|产权转让|黄色|产权转让|销售| | | | | | | |销售| |生产|销售/生产| | | | | | | | | | | | | | | | | | | | | x|
|黄色| PS | FEP | ADG | PS3 | 3 | BS3 | 0000-00-00 | 103 | 180 | 2019-12-16 | 2019-12-20 |黄色|绿色|销售|产权转让|销售|产权转让|销售|汇总|销售|生产|汇总|销售/生产|上卷|上卷|销售/生产|上卷|上卷|销售/生产|上卷|上卷|销售/生产|上卷|上卷|销售/生产|出货||
|汇总| T6T | OEM | FEDS | 67C | 5 | BS5 | 0000-00-00 | 105 | 250 | 2019-12-23 | 2019-12-22 |汇总|绿色|汇总|绿色|销售|所有权转让|黄色|所有权转让|销售|已装运|汇总|已装运|已装运|销售/生产|销售/生产|出货|汇总|出货|销售/生产|出货|汇总|出货|汇总|出货|销售/生产|出货|汇总|出货|销售/生产|出货| |出货| | | | | | | | | | | | | x
MasterChangesub do?我猜当空的销售和生产单元格设置为“汇总”时,“标题转移”不再是最后一个销售列(MaxCol)和else条件单元格(Target.Row,50)。Value=”“删除X。@CDP1802 Hi,MasterChange()有If/ElseIf语句返回日期单元格的值。另外,根据您的第二条评论,您是否有解决问题的建议?非常感谢您的帮助我还不完全理解您的代码,但可能您需要一个名为“Rolledup”的标志,该标志在填充空单元格时设置,并在以后用作删除x的条件,例如,如果Rolledup=False,则为cells(Target.Row,50)。Value=”“MasterChange()是什么sub do?我猜当空的销售和生产单元格设置为“汇总”时,“标题转移”不再是最后一个销售列(MaxCol)和else条件单元格(Target.Row,50)。Value=”“删除X。@CDP1802 Hi,MasterChange()有If/ElseIf语句返回日期单元格的值。另外,根据您的第二条评论,您是否有解决问题的建议?非常感谢您的帮助我还不完全理解您的代码,但可能您需要一个名为“Rolledup”的标志,该标志在填充空单元格时设置,并在以后用作删除x的条件,例如,如果Rolledup=False,则为cells(Target.Row,50)。Value=“”
Private Sub Worksheet_Change(ByVal Target As Range)
Dim counter As Long
Dim lastcolumn As Long
lastColumn = Me.Cells(1, Me.Columns.Count).End(xlToLeft).Column
'Shipped without Title Transfer
If Me.Cells(1, Target.Column).Value = "MB51 Shipped" Then
For counter = 1 To lastColumn
If (Me.Cells(1, counter).Value = "Sales" Or Me.Cells(1, counter).Value = "Production") _
And IsEmpty(Me.Cells(Target.Row, counter).Value) Then
Me.Cells(Target.Row, counter).Value = "Rollup"
End If
Next counter
End If
Dim r As Range, r1 As Range, counter As Long
Dim MaxCol As Variant, rg As Range, j As Long
If Not Intersect(Target, Range("N:AP")) Is Nothing And Target.Column Mod 4 = 2 Then
Set r = Intersect(Target, Cells(1, 1).CurrentRegion, Columns(Target.Column).Resize(, 3))
Call DoCells(r)
End If
'Automatically put "x" if Title Transfer in any Sales columns
If Not Intersect(Target, Range("N:AP")) Is Nothing And Target.Column Mod 4 = 2 Then
If Target.CountLarge > 1 Then Exit Sub
Set rg = Range("N" & Target.Row & ":AP" & Target.Row)
MaxCol = 0
For j = Columns("AP").Column To Columns("N").Column Step -4
If Cells(Target.Row, j) <> "" Then
If j > MaxCol Then MaxCol = j
End If
Next
If MaxCol Mod 4 = 2 Then
If Cells(Target.Row, MaxCol).Value = "Title Transfer" Then
Cells(Target.Row, 50).Value = "x"
Else
Cells(Target.Row, 50).Value = ""
End If
End If
End If
'This I have 8 Sales Column, however, I only put 1 line down for demonstration
Set r = Intersect(Target, Cells(1, 1).CurrentRegion, Columns(colSales1).Resize(, 3))
If Not r Is Nothing Then Call DoCells(r)
If Not Intersect(Target, Range("N:AP")) Is Nothing And Target.Column Mod 4 = 2 Then
If Target.CountLarge > 1 Then Exit Sub
Set rg = Range("N" & Target.Row & ":AP" & Target.Row)
MaxCol = Evaluate("=MAX(IF(" & rg.Address & "<>"""",COLUMN(" & rg.Address & ")))")
If MaxCol Mod 4 = 2 Then
If Cells(Target.Row, MaxCol).Value = "Title Transfer" Then
Cells(Target.Row, 50).Value = "x"
Else
Cells(Target.Row, 50).Value = ""
End If
End If
End If
End Sub
Private Sub DoCells(r As Range)
Dim r1 As Range
For Each r1 In r.Cells
With r1
Select Case .Column
Case colSales1, colSales2, colSales3, colSales4, colSales5, colSales6, colSales7, colSales8
Call MasterChange(.Resize(1, 3))
Case colProduction1, colProduction2, colProduction3, colProduction4, colProduction5, colProduction6, colProduction7, colProduction8
Call MasterChange(.Offset(0, -1).Resize(1, 3))
Case colDay1, colDay2, colDay3, colDay4, colDay5, colDay6, colDay7, colDay8
Call MasterChange(.Offset(0, -2).Resize(1, 3))
End Select
End With
Next
End Sub