填充变量范围时遇到问题

时间:2014-10-29 10:31:50

标签: excel vba variables

我已经涉足vba一段时间了,但它的用途主要是为了节省自己的工作,并且做出容易在vanilla excel中做的事情。我经常使用SQL,很多东西在SQL中很容易获得,在excel中非常困难。

我最近制作了一个新文件,以跟踪某人从我们的仓库中取出物品时产生的费用。假设所有内容都已正确注册,我已经制作了一个SQL报告,它会吐出不同的数据;其中与这个问题有关:

  • 文章编号
  • 成本中心

现在,我认为我会使用一些自动生成的列表来改进我的文件,所以我可以将它用于任何不仅仅是我自己的部门。不同的是,我大致知道我部门的正确文章编号和成本中心。

我想做什么。

  1. 使用成本中心编号列表:
  2. 生成从每个(特定)成本中心列出的转储(~10,000行)中获取的商品编号列表。当然是独一无二的
  3. 使用成本中心计数和商品编号计数从带有模板的工作表中复制公式...
  4. ...然后使用成本中心和商品编号填充新单。然后公式将从转储中获取sumifs并制作好的月度图形。
  5. 这与解释失控了,因为我很早就搁浅了这一点:

    '-----------------------------------------------
    Dim Myworkbook As Workbook
    Set Myworkbook = ThisWorkbook
    '-
    Dim Sheet1 As Worksheet
    Dim Sheet2 As Worksheet
    Dim Sheet3 As Worksheet
    Dim Rgensheet As Worksheet
    '-
    Set Sheet1 = Myworkbook.Sheets("Sheet1")
    Set Sheet2 = Myworkbook.Sheets("00 Underlag")
    Set Sheet3 = Myworkbook.Sheets("01 Dump")
    Set Rgensheet = Myworkbook.Sheets("RGenInput")
    '-
    Dim Dump As Range
    Set Dump = Sheet3.Range("A:M")
    '------------------------------------------------
    Dim antkat As Long
    antkat = WorksheetFunction.Count(Rgensheet.Range("C:C"))
    Dim kat As Range
    Set kat = Myworkbook.Sheets("RGenInput").Range("C1:C" & antkat)
    Dim kst As Long
    kst = 242020
    
    'To make matters easy I try to get the macro work for a single cost centre first...
    'I plan to have a For-loop around that covers all of them, with the antkat variable
    
    
    Dim artnos As Range
    Dim artno As Long
    Dim n As Integer
    n = 1
    
    For Each Row In Dump.Rows
    If IsNumeric(Sheet3.Range("M" & Row.Row)) Then
        If Sheet3.Range("M" & Row.Row) = kst Then
            artno = Cells(Row.Row, 6)
            On Error Resume Next
            If IsError(Application.Match(artno, artnos, False)) Then
           ' I used the same code once to create a list of unique values from a huge list but I am unsure wether I can do this to a range that has no dimensions...
                Set artnos.Range(1, n).Value = artno
                n = n + 1
            End If
        End If
    End If
    Next Row
    

    现在 - 这很丑陋而且达不到我的代码标准,但它比我通常做的更大。

    问题是双重的。

    1. 是否可以定义一个对尺寸完全灵活的范围变量?这是我习惯的,你可以在sql中添加行到一个变量表,但我开始认为这是不可能的,我试图这样做

    2. 这是执行我事先制定的计划的合理方式吗?如果我的代码要阅读杂乱或我做的错误太多 - 你能帮我找一个执行计划或可以执行我需要的步骤吗?我可以 - 在谷歌的帮助下 - 弄清楚如何做这些步骤。这在过去对我有用...... = P

1 个答案:

答案 0 :(得分:0)

我偶然找到了答案,浏览了一些微软的帮助文件。谁曾想到。

我错误地认为变量范围可以用作数组。对于将变量赋予变量多个值的未来用户 - 请读取通过添加闭括号来定义的数组你的变量

Dim variable as integer
Dim variablearray() as integer