Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 使用错误的工作表和错误进行评估_Excel_Vba - Fatal编程技术网

Excel 使用错误的工作表和错误进行评估

Excel 使用错误的工作表和错误进行评估,excel,vba,Excel,Vba,首先,一点前言 我对VBA还是有点陌生。我试图为随机数生成器编写代码。8位,字母数字。我通过在一张纸上粘贴数字(列表)和在创建数字的地方隐藏另一张纸(生成器)来实现这一点。在B列的生成器表上,我把A-Z和0-9放在A1中,然后把这个公式连接在一起8次:INDEX(B:B,randtween(1,36)) 这很有效。然后,我编写了一个小代码来处理重复,然后将结果粘贴到列表中B:B中的第一个空单元格中 但是我想变得更有创意,如果我以后想添加小写或特殊字符,我不想把公式的索引部分更改8次。我希望能够在

首先,一点前言

我对VBA还是有点陌生。我试图为随机数生成器编写代码。8位,字母数字。我通过在一张纸上粘贴数字(列表)和在创建数字的地方隐藏另一张纸(生成器)来实现这一点。在B列的生成器表上,我把A-Z和0-9放在A1中,然后把这个公式连接在一起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中的所有内容都是作为文本的公式。请参见我的第三段底部,再上一段。需要对其进行评估。