【问题标题】:VBA color fill macro from one sheet in rows to another sheet in columnsVBA颜色填充宏从行中的一张表到列中的另一张表
【发布时间】:2017-08-11 14:54:17
【问题描述】:

对于 Excel VBA 来说还是很新的。我需要有条件地从另一个工作表上从左到右读取的单元格中复制颜色填充,并将这些颜色复制到列中的另一个工作表上。我遇到的最大问题是组织我的嵌套 for 循环。这个想法是用颜色表示的输入填充一个 7x7 数组。 7x7 数组本身将完全由列填充,但它会读取另一个工作表中的行。下面的代码不起作用。

Sub colorfillcopy()


  Dim i As Integer, j As Integer, k As Integer, l As Integer, m As Integer, 
  lastrow As Long


Dim Sourcews As Worksheet, Transferws As Worksheet
Dim row1 As Range, row2 As Range, row3 As Range, row4 As Range, row5 As 
Range, row6 As Range, row7 As Range
Dim rngCopy As Range
Dim rngPaste As Range




Set Sourcews = ThisWorkbook.Sheets("Source")
Set Transferws = ThisWorkbook.Sheets("Transfer")

Transferws.Range("row1:row7").Interior.Color = xlNone

lastrow = Sourcews.Cells(Sourcews.Rows.Count, "A").End(xlUp).row
lastrowgrid = Transferws.Cells(Rows.Count, 3).End(xlUp).row

For i = 2 To lastrow



         If Sourcews.Range("AA" & i).Value = " Conditionally data" And Transferws.Cells(18, 
                        Sourcews.Columns.Count).End(xlToLeft).Column Then

        For j = 1 To 7

                   For k = 1 To 7

                 Sourcews.Range("8 ,j+1").Interior.Color = 
                            Transferws.Range("P:V").Interior.Color



                Next k

         Next j

    End If



Next i

End Sub

【问题讨论】:

  • 下面的代码不起作用 - 这很模糊。请阅读如何create a complete, minimal, verifiable example 并相应地编辑您的问题。
  • 这里有两个部分,在 SO 上,会导致它中断。不确定是否只是因为您的复制/粘贴。 If Sourcews.Range("AA" & i)... 线需要全部在一个。你在.Cells(18, 之后打破它。此外,引用的 Sourcews.Range("8,j+1")... 行 A) 没有意义,并且您还需要在 = 之后的同一行上的 Transferws.Range(...) 通过添加 _ 将两者连接起来在 = 之后。首先,您能否在此处编辑/更新代码以匹配您在 Excel 中的代码?

标签: vba excel


【解决方案1】:

再次,Chicken_Milk;我最近在这方面帮了你一些忙!

我看到的第一个问题是“k”的循环,但没有看到 k。您拥有的循环应该足够了,因为您正在为 i 使用循环,如果为真,您正在为 j 循环。我已经更正了几个错误,例如将项目放在不同的行上(如果你想让东西结转到另一行,你需要使用下划线)。 j循环中的Range改成了Cells,去掉了""(如果是range,就类似于Range("A" & j+1),而不是逗号。

Dim i As Integer, j As Integer, k As Integer, l As Integer, m As Integer, lastrow As Long
Dim Sourcews As Worksheet, Transferws As Worksheet
Dim row1 As Range, row2 As Range, row3 As Range, row4 As Range, row5 As Range, row6 As Range, row7 As Range, rngCopy As Range,  rngPaste As Range

Set Sourcews = ThisWorkbook.Sheets("Source")
Set Transferws = ThisWorkbook.Sheets("Transfer")

Transferws.Range("row1:row7").Interior.Color = xlNone

lastrow = Sourcews.Cells(Sourcews.Rows.Count, "A").End(xlUp).row
lastrowgrid = Transferws.Cells(Rows.Count, 3).End(xlUp).row

For i = 2 To lastrow
    If Sourcews.Range("AA" & i).Value = " Conditionally data" And Transferws.Cells(18,Sourcews.Columns.Count).End(xlToLeft).Column Then
        For j = 1 To 7
            Sourcews.Cells(8 ,j+1).Interior.Color =Transferws.Range("P:V").Interior.Color
            Next j
        End If
    Next i

我会说,我对你的 If 语句有点困惑,第二个条件的要求是什么(“如果 rng=B 和 x 则”而不是“如果 rng=B 和 x=A 则”) .

【讨论】:

  • 谢谢 Cyril,If 语句假设检查两组条件
  • @chicken_milk 请指定第二个条件?这就是我在列出代码之后的问题中得到的。条件 1 是 AA&i.value="Conditionally data",条件 2 是...?
  • 它应该用于 Sourcews.Range("A" & i) 中引用的值
  • 如前所述,条件 1 是 Sourcews.Range("AA" & i).Value = " Conditionally data";条件 2 是 Transferws.Cells(18,Sourcews.Columns.Count).End(xlToLeft).Column。问题是条件 2 没有标准(需要有 = 'something' 或 isempty() 等)。一旦我们知道这些条件是什么以及应该是什么,那么就应该结束它。我相信,根据您的评论,条件 1 应该是“A”而不是“AA”,但这并不能说明第二个条件。
猜你喜欢
  • 2017-12-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-10
相关资源
最近更新 更多