gpt4 book ai didi

VBA excel : For Each. .Next 没有经过选定的范围?

转载 作者:行者123 更新时间:2023-12-04 21:07:34 24 4
gpt4 key购买 nike

我正在尝试运行我的代码:

Sub Test()
Dim vuosi As Integer
Dim kk As Integer
Dim cF As Range
Dim c As String
Dim cell As Range
vuosi = Application.InputBox(Prompt:="Syötä vuosi, jota haluat tarkastella.")
kk = Application.InputBox(Prompt:="Syötä kuukausi(1-12), jota haluat tarkastella.")
If vuosi = 2014 Then
c = "BU"
ElseIf vuosi = 2015 Then
c = "CG"
ElseIf vuosi = 2016 Then
c = "CS"
End If
ActiveSheet.Range("F11:F60").Select
For Each cell In Selection
Cells(ActiveCell.Row, c).Activate
Set cF = Range(ActiveCell.Offset(0, kk - 12), ActiveCell.Offset(0, kk)).Find(What:=1, LookIn:=xlFormulas, LookAT:=xlPart, SearchOrder:=xlByColumns, MatchCase:=False, SearchFormat:=False)
If Not cF Is Nothing Then
Cells(ActiveCell.Row, "F").Interior.ColorIndex = 6
End If
Next cell
End Sub

它不能正常工作。似乎 For Each 循环只经过第一行。谁能告诉我为什么?

程序应该遍历 F 列中的所有单元格。对于每一行,它检查是否在特定单元格中找到值 1。如果是,则 F 列中的单元格应涂成黄色。
否则程序将继续运行,直到在 F 列中找到最后一个值。(在我的测试中,我只使用了 Range("F11:F60")

最佳答案

我对您的代码有一些看法。让我试着涵盖我注意到的所有内容。

一个 ) 使用 Excel 行时,避免将它们声明为 Integers .在 Excel 2007 之后,行数增加到 1048576,对于 Integer 来说,这个数字太大了。 .使用列时您可以逃脱,但可能会遇到行问题。将它们声明为 Long 是一个好习惯

) 您假设用户将始终在输入框中输入值。如果用户输入一个空白或按取消怎么办?捕获这些实例。如果您只想在输入框中输入数字,请使用 Type:=1用它。更多详情请阅读 Application.InputBox Method在 Excel 帮助中。

中号 ) 避免使用 .Select/.Activate您的代码无需选择任何内容即可轻松运行。您可能想查看 THIS

这是你正在尝试的吗? ( 未经测试 )

Sub Test()
Dim vuosi As Integer, kk As Long
Dim rng As Range, aCell As Range, rngToFind As Range, cF As Range
Dim c As String
Dim ws As Worksheet

vuosi = Application.InputBox(Prompt:="Syötä vuosi, jota haluat tarkastella.", Type:=1)

If vuosi < 1 Then Exit Sub

kk = Application.InputBox(Prompt:="Syötä kuukausi(1-12), jota haluat tarkastella.", Type:=1)

If kk < 1 Then Exit Sub

If vuosi = 2014 Then c = "BU"
If vuosi = 2015 Then c = "CG"
If vuosi = 2016 Then c = "CS"

Set ws = ThisWorkbook.Sheets("Sheet1")

With ws
Set rng = ws.Range("F11:F60")

For Each aCell In rng
Set rngToFind = .Range(aCell.Offset(0, kk - 12), aCell.Offset(0, kk))

Set cF = rngToFind.Find(What:=1, LookIn:=xlFormulas, LookAT:=xlPart, _
SearchOrder:=xlByColumns, MatchCase:=False, _
SearchFormat:=False)

If Not cF Is Nothing Then .Range("F" & aCell.Row).Interior.ColorIndex = 6
Next cell
End With
End Sub

关于VBA excel : For Each. .Next 没有经过选定的范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30208257/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com