【问题标题】:Indexing through an array by column number按列号索引数组
【发布时间】:2020-07-12 03:50:40
【问题描述】:

我查找了有关列属性的信息。我正在尝试在数组中执行一些信息的插入和复制。我的问题的症结在于我想在循环中嵌套一些操作,所以我需要用数字而不是字母来索引列。

我做的第一件事是根据标题名称找到一个起点:

Dim EnvCondCol As String
Dim EnvCondColN As Long
Dim lColVVS As Integer
lColVVS = VET_VS.UsedRange.Columns.Count ' finds last column
For n = 1 To lColVVS
    If UCase(VET_VS.Cells(3, n).Value) Like "*ENVIRONMENTAL CONDITION*" Then ' All Caps when using "like"
        EnvCondCol = Split(VET_VS.Cells(3, n).Address, "$")(1)
        EnvCondColN = Range(EnvCondCol & 1).Column
        Exit For
    End If
Next n

这很有效,当我观看 EnvCondCol 和 EnvCondColN 时,可以看到 EnvCondCol = "I" 和 EnvCondColN = "9" 最后,我想插入一个新列,这行会产生语法错误:

VET_VS.Range(Columns.(EnvCondColN)).EntireColumn.Insert

我看EnvCondColN的时候是一个数字,我试过把dim改成其他类型,比如整数

在其他地方,我想从一个循环中将信息从一个单元格复制到另一个单元格中。这会产生语法错误。

VET_VS.Range(Columns.(EnvCondColN + i)).Copy VET_VS.Range(Columns.(EnvCondColN + j))

如果我将 EnvCondColN 替换为 5 之类的值,则此方法有效。示例:VET_VS.Range(Columns.(5)).EntireColumn.Insert

为什么该变量不能用作列引用??

感谢大家观看!

【问题讨论】:

  • 试试VET_VS.Columns(EnvCondColN).EntireColumn.Insert
  • 试试Range(EnvCondCol & 1).EntireColumn.Insert
  • HTH 改变有效。我很困惑,因为我之前成功使用了 Sheet.range(x).copy sheet.range(y) 方法,除了 x 和 y 是使用列字母(例如 C:C 或 C2 等)的引用......为什么范围不再工作?
  • FaneDuru - 你的答案涉及使用列字母,所以这是我试图避免的。使用 F+1 时会出错。
  • HTH - 我没有看到将您的答案标记为好的复选框。非常感谢。

标签: vba columnsorting


【解决方案1】:

改变

 VET_VS.Range(Columns.(EnvCondColN)).EntireColumn.Insert

到

 VET_VS.Columns(EnvCondColN).EntireColumn.Insert

【讨论】:

    猜你喜欢
    • 2020-01-02
    • 2018-01-08
    • 2021-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-27
    • 2019-03-22
    相关资源
    最近更新 更多