【问题标题】:Use Converted Column Letter In VBA Range在 VBA 范围内使用转换后的列字母
【发布时间】:2020-04-01 02:30:09
【问题描述】:

我已经能够找到列号并将其转换为字母,但我无法弄清楚如何在定义范围时使用转换后的字母。我不断收到运行时 1004 错误。

我正在尝试识别包含特定行中最大值的列。然后使用该列查找第一个非零单元格并插入一行。以下是我的代码:

  Sub ColNBR_Insert()
 Dim maxCol As Long
 Dim rngMaxCell As Range, rngVals As Range, C As Range, Where As Range
 Dim lastNum0 As String
 Dim ColLtr As String

 Set rngVals = Worksheets("Charts").Range("F3:M3")

 With Application.WorksheetFunction

 Set rngMaxCell = rngVals.Find(.max(rngVals), LookIn:=xlValues)

 If Not rngMaxCell Is Nothing Then
 maxCol = rngMaxCell.Column

' MsgBox "The max value is in column " & maxCol
 End If

 End With

 Set rngVals = Nothing
 Set rngMaxCell = Nothing

'Convert To Column Letter
ColLtr = Split(Cells(1, maxCol).Address, "$")(1)

'Display Result
'MsgBox "Column " & maxCol & " = Column " & ColLtr

lastNum0 = "<>0"
Set C = Range(Range(ColLtr), Range(ColLtr))

C.Find(What:=lastNum0, After:=C(1), SearchDirection:=xlPrevious).Select
Selection.Offset(1).EntireRow.Insert Shift:=xlDown

End Sub

【问题讨论】:

  • 只需使用Cells,您根本不需要转换。
  • @BigBen 打败了我。无需转换。
  • Columns...

标签: excel vba


【解决方案1】:

无需进行所有这些转换...只需使用Columns

Set C = Range(Range(ColLtr), Range(ColLtr))

虽然有问题,但使用

可能更容易完成
Set C = Columns(maxCol)

【讨论】:

  • 所以只需将范围设置为 Columns(maxCol)? (设置 C = 列(maxCol))
  • 因此,当我将 C 设置为 Columns(maxCol) 时,我在 C.Find(What:=lastNum0, After:=C(1), SearchDirection:=xlPrevious) 中遇到类型不匹配错误。选择语句。有关如何解决此问题以便插入空白行的任何想法?
  • After:=C.Cells(1)。然后你需要测试Find 是否成功,而不是立即Selecting(你实际上并不需要这样做)。
  • 好吧,我已经尝试了您的建议,但没有任何效果。你能告诉我如何使用列找到第一个值 0吗?如果我知道该列,我可以这样做,但我试图动态识别该列,因为它总是在变化。
  • "&lt;&gt;0" 只是文本。您可以改用过滤器。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-13
  • 1970-01-01
  • 2017-01-28
  • 1970-01-01
  • 2020-09-28
  • 1970-01-01
相关资源
最近更新 更多