【问题标题】:Trying to make a table of variable columns/rows in VBA尝试在 VBA 中制作可变列/行表
【发布时间】:2017-09-11 19:44:20
【问题描述】:

这里是我遇到困难的所有适用代码(尽管是大型程序的一部分)。我正在制作一个执行仪表板,这些数据汇总到单独的表格上的图表中,查看每月的实用程序使用情况。它应该从可变数量的月份中复制可变数量的实用程序。

整数 m 是月份(我使用 3/March 作为示例),因此从 i=1 到 3 它应该从打开的 ns 复制/粘贴行到 ws。它不断给出错误 1004,所以我认为我错误地调用了我的范围,但我不确定如何/为什么。在我的代码中,错误出现在那个 For 循环中,似乎没有任何行起作用

我需要某种变量,以便以后可以将其汇总到我的图表中。这是一些应该过来的照片(只有标题过来了,它没有使用.Cell()。另外,如果有人知道编码我倒数第二行的正确方法,请分享(虽然不是我的主要挑战)。

fNameAndPath = Application.GetOpenFilename(FileFilter:="Excel Files (*.XLSX), *.XLSX", Title:="Select Trend Income Statement for " & os.Range("B2") & " " & os.Range("B3"))
If fNameAndPath = False Then Exit Sub

'We are opening and pulling data from the selected workbook, so lets turn off screen updating and get to work
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Set nb = Workbooks.Open(fNameAndPath)
Set ns = nb.Sheets(1)
    m = Month(ws.Range("B1"))

'Build out the Utility Section
Let FindIt = "50100-000"
Set FoundCell = ns.Range("A:A").Find(What:=FindIt)
    fRow = FoundCell.Row + 1 'This will be the first Util GL
Let FindIt2 = "50199-999"
Set FoundCell2 = ns.Range("A:A").Find(What:=FindIt2)
    fRow2 = FoundCell2.Row - 1 ' This will be the last Util GL

ns.Range("B" & fRow - 1 & ":B" & fRow2 + 1).Copy 'Copy the header range
ws.Range("G16").PasteSpecial Paste:=xlPasteValues

For i = 1 To m
    Set cRange = ns.Range(ns.Cells(fRow, 2 + i), ns.Cells(fRow2, 2 + i))
    ns.Range(cRange).Copy
    Set pRange = ws.Range(ws.Cells(17, 7 + i))
    ws.Range(pRange).PasteSpecial Paste:=xlPasteValues
    ws.Range(Cells(15, 7 + i)).Formula = "=TEXT(i*30, mmmmm)"
Next i

【问题讨论】:

  • 经过 2 多个小时的研究,看起来使用 .Address() 将其转换为 VBA 更容易阅读的 A1 格式。我将用它冲洗它,看看它是否适合我的需要,如果它有效,请更新。
  • 哪一行代码出错了?
  • 似乎您可以只使用带有过滤器的数据透视表或 PowerPivot

标签: vba excel for-loop charts range


【解决方案1】:

我无法让您的代码的几个部分正常工作,因为它似乎是一个更大程序的 sn-p。

我认为可能导致您出现问题的原因是您在某些 Range() 调用中使用了一个 Cells()。当我尝试为 Range() 调用提供一个 Cells() 对象时,它会返回 1004 错误。

例如你使用

'This throws 1004 error
ws.Range(ws.Cells(17 , 7 + i ))

尝试使用类似的东西

ws.Cells(17 , 7 + i)

另外,你可以使用这样的东西

ws.Range("G17").Offset(0,i)

看看这些是否适合您的用例并产生所需的结果。

【讨论】:

  • 这看起来更像是评论而不是答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-06
  • 2016-07-29
  • 1970-01-01
相关资源
最近更新 更多