【问题标题】:Determine if cell contains a value确定单元格是否包含值
【发布时间】:2019-05-03 13:35:29
【问题描述】:

我有一个名为“更新”的命令按钮来激活宏。

宏应检查 G:25 到 G:33 范围内的单元格是否为空。
如果为空,则不会发生任何事情。
如果您在方框中写入数字,它应该复制该数字,然后将其放入第二个工作表的单元格中。
所以应该将 Sheet1.(G:25) 复制到 sheet2.(G14) 中,然后迭代直到 G:25

什么都没有发生。

Sheet1 = "Übersicht"
Sheet2 = "Semester01"

Dim cell As Range, c As Integer, score As Integer
Dim rng As Range
Set rng = Range("G25:G33")

c = 14
For Each cell In rng
    score = Cells.Value
    If score < 0 Then
        zelle.Copy
        Sheet2.Cells(7, c).Select
        Worksheet("Semester01").Paste
        c = c + 1
    End If

Next cell
End Sub

【问题讨论】:

  • 如果它碰到一个空白然后找到一个值是否应该跳过 Sheet2 上的一行?
  • 是的,如果 sheet1 上的第一个单元格中的单元格为空白,则不应发生任何事情。所以在第二轮它应该检查第二个单元格 G:26 如果它是空白的,它应该将值复制到 sheet2.G15
  • 根据您的解决方案,我强烈建议您花时间学习如何在 VBA 中调试 myonlinetraininghub.com/debugging-vba-code

标签: excel vba


【解决方案1】:

我没有看到所有额外变量和缺少/混淆父引用的意义。我不明白 zelle 是从哪里来的。

Option Explicit

sub go()

    Dim cell As Range, c As Integer

    c = 14
    For Each cell In sheet1.Range("G25:G33")
        If val(cell.Value) < 0 Then
            cell.Copy destination:=Sheet2.Cells(7, c)
            c = c + 1
        End If

    Next cell

End Sub

如果您使用Option Explicit,您可以避免变量拼写错误。

【讨论】:

  • 哦,我将变量更改为英文变量。 Zelle 是德语,因为细胞一定忘记了一个
  • 仍然无法正常工作,我想我还有其他问题。由于命令按钮,代码是写在 sheet1 上的私有子中的,这是一个问题吗?还是我应该将您拼写的内容重命名为 sheet1 和 sheet2 ?
  • 它现在可以工作了!在此处编写代码时,我将 > 更改为
  • @Igor - Esist eine gute Idee "Option Explicit" immer zu benutzen。 Es kann viele Schreibfehlern vermeiden zu helfen, weil man musst explizitlich allen 变量声明。 (Hoffentlich mein Deutsch ist verständlich!:P)
【解决方案2】:

如果条件复制单元格...

Option Explicit

Sub ZelleCopy()

    Const cShS As String = "Übersicht"    ' Source Worksheet Name
    Const cShT As String = "Semester01"   ' Target Worksheet Name
    Const cRng As String = "G25:G33"      ' Source Column Range Address
    Const cTgtFR As Long = 14             ' Target First Row Number
    Const cTgtCol As Variant = "G"        ' Target Column Letter/Number ' or 7

    Dim wsS As Worksheet  ' Source Worksheet
    Dim wsT As Worksheet  ' Target Worksheet
    Dim cell As Range     ' Current Cell (For Each Control Variable)
    Dim c As Long         ' Target Cell (Row) Counter
    Dim Score As Long     ' Criteria Value

    ' Create references to Source and Target Worksheets.
    With ThisWorkbook
        Set wsS = .Worksheets(cShS)
        Set wsT = .Worksheets(cShT)
    End With

    ' Write Target First Row Number to Target Row Counter.
    c = cTgtFR
    ' Loop through each cell (row) in Source Column Range.
    For Each cell In wsS.Range(cRng)
        ' Write value of Current Cell to Criteria Value.
        Score = cell.Value
        ' Check if Criteria Value is less than 0.
        If Score < 0 Then
            ' Write Criteria Value to current cell in Target Column.
            wsT.Cells(c, cTgtCol) = Score
            ' Count Target Row.
            c = c + 1
        End If
    Next

End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-02-13
    • 2013-10-04
    • 1970-01-01
    • 1970-01-01
    • 2022-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多