Excel 使用错误的工作表和错误进行评估
首先,一点前言 我对VBA还是有点陌生。我试图为随机数生成器编写代码。8位,字母数字。我通过在一张纸上粘贴数字(列表)和在创建数字的地方隐藏另一张纸(生成器)来实现这一点。在B列的生成器表上,我把A-Z和0-9放在A1中,然后把这个公式连接在一起8次:Excel 使用错误的工作表和错误进行评估,excel,vba,Excel,Vba,首先,一点前言 我对VBA还是有点陌生。我试图为随机数生成器编写代码。8位,字母数字。我通过在一张纸上粘贴数字(列表)和在创建数字的地方隐藏另一张纸(生成器)来实现这一点。在B列的生成器表上,我把A-Z和0-9放在A1中,然后把这个公式连接在一起8次:INDEX(B:B,randtween(1,36)) 这很有效。然后,我编写了一个小代码来处理重复,然后将结果粘贴到列表中B:B中的第一个空单元格中 但是我想变得更有创意,如果我以后想添加小写或特殊字符,我不想把公式的索引部分更改8次。我希望能够在
INDEX(B:B,randtween(1,36))
这很有效。然后,我编写了一个小代码来处理重复,然后将结果粘贴到列表中B:B中的第一个空单元格中
但是我想变得更有创意,如果我以后想添加小写或特殊字符,我不想把公式的索引部分更改8次。我希望能够在一个地方改变它,然后其他人也跟着改变。所以对于concatenate,我有一个单元格,它的值是这个文本:concatenate(索引(B:B,randtween(1,36)),等等
然后我在VBA中使用了Evaluate
,以便将其作为一个公式进行处理。当我在即时窗口中打印它时,它工作得很好。因此我运行了代码。但它不起作用。最后意识到它在列表表中查找索引(B:B
,因为它是第一个选项卡。因此,我添加了工作表(“生成器”).激活
,希望它能查看正确的工作表。未更改任何内容
然后,我做了一些研究,并尝试使用工作表.Evaluate()
认为这样做可以达到目的。但是,我得到了#VALUE!错误或类型不匹配错误
即使如此,在调试前尝试Application.Evaluate()
并指定工作表,或在即时窗口中尝试worksheet.Evaluate()
时,这两个选项都将按我所希望的方式工作。但是,在运行代码或在开始调试后尝试即时窗口时,代码将无法正常运行
以下是实际代码:
Dim strRandNum As String
Dim lgLastRow As Long
Dim intCounter As Integer
lgLastRow = WorksheetFunction.CountA(Worksheets("List").Range("B:B"))
intCounter = 0
TryAgain:
Worksheets("Generator").Activate
' Original: strRandNum = Evaluate(Worksheets("Generator").Range("C1").Value)
strRandNum = Worksheets("Generator").Evaluate(Range("C1").Value)
If WorksheetFunction.CountIf(Worksheets("List").Range("B:B"), strRandNum) > 0 Then
Calculate
intCounter = intCounter + 1
If intCounter = 5 Then
MsgBox ("An error has ocurred. Contact your developer.")
Exit Sub
Else
GoTo TryAgain
End If
Else
End If
Worksheets("List").Range("B" & lgLastRow + 1).Value = strRandNum
Worksheets("List").Range("B1").Select
我只需要创建您自己的UDF来创建一个随机字母数字…这似乎是一个X-Y问题。作为参考,我最近回答了一个。它甚至已经被硬编码为返回一个长度为8:-)的字符串不会
strRangNum=工作表(“生成器”)。范围(“C1”).Value
work?创建自定义项的另一个原因-不赞成在此处使用GoTo
循环。@BruceWayne否。C1中的所有内容都是作为文本的公式。请参见我的第三段底部,再上一段。需要对其进行评估。