我已经涉足vba一段时间了,但它的用途主要是为了节省自己的工作,并且做出容易在vanilla excel中做的事情。我经常使用SQL,很多东西在SQL中很容易获得,在excel中非常困难。
我最近制作了一个新文件,以跟踪某人从我们的仓库中取出物品时产生的费用。假设所有内容都已正确注册,我已经制作了一个SQL报告,它会吐出不同的数据;其中与这个问题有关:
现在,我认为我会使用一些自动生成的列表来改进我的文件,所以我可以将它用于任何不仅仅是我自己的部门。不同的是,我大致知道我部门的正确文章编号和成本中心。
我想做什么。
这与解释失控了,因为我很早就搁浅了这一点:
'-----------------------------------------------
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
现在 - 这很丑陋而且达不到我的代码标准,但它比我通常做的更大。
问题是双重的。
是否可以定义一个对尺寸完全灵活的范围变量?这是我习惯的,你可以在sql中添加行到一个变量表,但我开始认为这是不可能的,我试图这样做
这是执行我事先制定的计划的合理方式吗?如果我的代码要阅读杂乱或我做的错误太多 - 你能帮我找一个执行计划或可以执行我需要的步骤吗?我可以 - 在谷歌的帮助下 - 弄清楚如何做这些步骤。这在过去对我有用...... = P
答案 0 :(得分:0)
我偶然找到了答案,浏览了一些微软的帮助文件。谁曾想到。
我错误地认为变量范围可以用作数组。对于将变量赋予变量多个值的未来用户 - 请读取通过添加闭括号来定义的数组你的变量
Dim variable as integer
Dim variablearray() as integer