Excel VBA代码相互冲突

Excel VBA代码相互冲突,excel,vba,Excel,Vba,您能告诉我如何修复以下代码,使它们不再与每个类一起分类吗。很抱歉,我不得不在这里写下很多代码,但我真的不知道这些代码中的哪些会使它们相互冲突 因此,如果在列AU(第47列)中“已发货”,我将此部分返回所有空销售和生产单元的“汇总” 然后,如果最后一个销售栏有“标题转移”,我将在第AX栏(第50栏)中返回“x” 以下是我使用降价表的数据结构: | Title |发动机系列|细分市场|客户|发动机型号| S/N |建造规格|实际完工|销售订单|项目|承诺日期| EPS日期|目标|销售|生产|第1天

您能告诉我如何修复以下代码,使它们不再与每个类一起分类吗。很抱歉,我不得不在这里写下很多代码,但我真的不知道这些代码中的哪些会使它们相互冲突

因此,如果在列AU(第47列)中“已发货”,我将此部分返回所有空销售和生产单元的“汇总”

然后,如果最后一个销售栏有“标题转移”,我将在第AX栏(第50栏)中返回“x”

以下是我使用降价表的数据结构:

| 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