小编Chr*_*007的帖子

执行CalculateFullRebuild时调用未使用的UDF

我在 Excel 书中有一些用户定义的函数。我使用了它们一段时间,但过了一会儿,我从单元格中删除了对这些函数的调用,因为我找到了完成相同任务的更好方法(我没有在 VBA 编辑器中删除函数定义本身)。因此,这些函数不再在书中或任何 VBA 代码中被调用,我使用搜索进行了检查,百分百确定。

现在我正在对我的代码进行一些审查,我注意到一些奇怪的事情:在同一工作簿中的 Sub 过程中(与这些函数无关)我调用Application.CalculateFullRebuild. 当发生这种情况时,那些 UDF 被调用,我可以通过在 UDF 内设置断点来看到它。

我想知道为什么会发生这种情况以及可以采取什么措施来避免它,因为它不必要地减慢了 Sub 的速度。

谢谢!

excel vba user-defined-functions

5
推荐指数
1
解决办法
340
查看次数

用于确定VBA中当前错误处理方法的语法

在我的代码中的任何给定行上,我可以将Debug.Print()与其他命令一起使用,以找出如果我的代码在该行上遇到错误会发生什么?

我可以使用Debug.Print中的任何语句来查明当前的错误处理过程是转到0,恢复下一个还是转到某个标签?

我想象的是:

Debug.Print(OnErrorMode)
Run Code Online (Sandbox Code Playgroud)

我正在寻找一种方法来确定一个特定的代码行是否会出现错误GoTo 0(停止并显示错误),Resume Next(跳过该行)或者GoTo Label(跳转到Label),因为On Error我的代码中某处可能存在我无法找到的地方.那可能吗?

vba

5
推荐指数
1
解决办法
1133
查看次数

InStr(1,cell.Value," - ")似乎不适用于Not

我有条件似乎不起作用.

If Not InStr(1, cell.Value, "-") Then
    'Do Something
Else
    'Do something else
End If
Run Code Online (Sandbox Code Playgroud)

cell.Value电子表格中带有短划线的数字在哪里:"6621-123",或没有短划线:"555321"

第一个If让我们通过和Else被忽略.任何想法为什么这不起作用?

excel vba excel-vba

5
推荐指数
1
解决办法
918
查看次数

编辑单元格时启动VBA宏

我只是尝试在Excel工作表中编写搜索宏.如何在编辑单元格时动态启动宏.在单元格中写入时,搜索宏应该在后台运行,每个字符都添加或删除,而不仅仅是在结尾处. Worksheet_Change(ByVal Target As Range)仅在编辑完成时启动(返回被点击或其他单元格被选中).

谢谢.

excel vba excel-vba

4
推荐指数
1
解决办法
3311
查看次数

循环虽然项目中的所有UDF名称

这个问题:在Excel VBA中搜索函数用法让我想到了一个自动搜索电子表格中使用的所有UDF的过程.有点像:

For Each UDF in Module1
    If Cells.Find(What:=UDF.Name, After:="A1", LookIn:=xlFormulas, _
        LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False) Then
        MsgBox UDF.Name & " is in use"
    End If
Next UDF
Run Code Online (Sandbox Code Playgroud)

这是可能的,如果是这样,循环遍历所有UDF的语法是什么?

excel vba excel-vba excel-udf

4
推荐指数
2
解决办法
265
查看次数

在VBA中按ctrl + shift + down的代码

我怎样才能在excel vba上进行ctrl + shift + down.我还想知道然后将其粘贴为特殊值.我目前的代码就是这个

Sub CopyCol()

    Sheets("Sheet1").Range("B2").End(xlDown).Select.Copy

    Sheets("Sheet2").Range("B14").PasteSpecial xlPasteValues

End Sub
Run Code Online (Sandbox Code Playgroud)

所以我要做的是复制B列中的所有内容,而不是整列本身.就像条目在第100行结束一样,它应该停在那里,就像ctrl + shift + end工作一样.然后复制那里的任何内容并将其粘贴在sheet14的b14中作为值,因为这是我需要的特定位置.我知道在(xldown)之后输入.select可以帮助我做到这一点但是它不会让我复制.粘贴到另一张纸也不起作用.

excel vba excel-vba

4
推荐指数
1
解决办法
3万
查看次数

如何确定是否隐藏了Excel范围?

在我的代码中,我包含一个布尔变量,我想在其中分配一个范围的隐藏属性的值.即,如果隐藏范围,则变量的值应为true,反之亦然.

在运行代码时,我得到一个'1004'运行时错误 - 无法获取Range类的Hidden属性.通过这个我假设在这种情况下隐藏属性是只写的(如果我错了,请纠正我).

有没有办法确定(在我的代码中,而不是通过观察)是否隐藏了范围/单元格?

我有一个名为"minas"的类,我正在尝试根据某些标准创建一个minas集合.

Public mines As Collection
Sub existing_months()
    Set mines = New Collection
    Dim min As minas
    Dim str As String
    Dim x As Range
    Dim y As Boolean
    For i = 1 To 12
        Set min = New minas
        Set x = Range("A1:A500").Find(i, LookIn:=xlValues, LookAt:=xlWhole)
        If x Is Nothing Then GoTo next_iteration:
        y = x.Hidden 'does not get the property
        Call min.initialize(x, y)
        str = min.minas & "/" & min.etos
        mines.Add min, str
        Debug.Print min.ref_range.Address …
Run Code Online (Sandbox Code Playgroud)

excel vba excel-vba

3
推荐指数
1
解决办法
8400
查看次数

在现有If块中添加新的If语句

我有这个代码比较列A和B,如果A更大,则将1加到B列:

Sub test07()

    With Sheets("Sheet1")

        Dim LastRow As Long, i As Long

        LastRow = Cells(Rows.Count, "A").End(xlUp).Row

        For i = 12 To LastRow

            If Range("A" & i).Value > Range("B" & i).Value Then

                Range("B" & i).Value = Range("B" & i).Value + 1

            End If

        Next i

    End With

End Sub
Run Code Online (Sandbox Code Playgroud)

我想再次添加相同的东西,但使用C和D列,但我得到语法错误,即:

Sub test07()

    With Sheets("Sheet1")

        Dim LastRow As Long, i As Long

        LastRow = Cells(Rows.Count, "A").End(xlUp).Row

        For i = 12 To LastRow

            If Range("A" & i).Value > Range("B" & i).Value Then

                Range("B" …
Run Code Online (Sandbox Code Playgroud)

excel vba excel-vba

3
推荐指数
1
解决办法
61
查看次数

单元格中的拼写检查并将拼写错误的单词的颜色更改为红色

我正在进行自动化,我需要拼写检查单元格中的一个段落并突出显示红色的错误单词,并且我需要在具有动态范围的列中执行此拼写检查.

我正在使用以下代码

Sub spellcheck()

    Dim intOffsetCol As Integer
    Dim intChrCnt As Integer
    Dim varTempString As Variant

    intOffsetCol = 1

        For intChrCnt = 1 To Trim(Len(ActiveCell.Value)) Step 1 'Left to right
            'A space character is represented by an ASCII code of 32.
            If Asc(Mid(ActiveCell.Value, intChrCnt, 1)) <> 32 Then
                varTempString = varTempString & Mid(ActiveCell.Value, intChrCnt, 1)
            Else


                If Not Application.CheckSpelling(Word:=varTempString) Then
                varTempString.Interior.ColorIndex = 52

                varTempString = ""
                intOffsetCol = intOffsetCol + 1
                End If
            End If
        Next intChrCnt

        If varTempString <> …
Run Code Online (Sandbox Code Playgroud)

excel vba excel-vba excel-2010

3
推荐指数
1
解决办法
3220
查看次数

VBA中的列比较错误

您好我正在编写一个宏来比较excel中不同工作表上的两列.宏如下:

Sub Main()
Application.ScreenUpdating = False

    Dim stNow As Date
    stNow = Now

    Dim arr As Variant
    arr = Worksheets("Sheet2").Range("W3:W" & Range("W" & Rows.Count).End(xlUp).Row).Value

    Dim varr As Variant
    varr = Worksheets("Sheet3").Range("P3:P" & Range("P" & Rows.Count).End(xlUp).Row).Value

    Dim x, y, match As Boolean
    For Each x In arr
        match = False
        For Each y In varr
            If x = y Then match = True
        Next y
        If Not match Then
            Worksheets("Sheet1").Range("L" & Range("L" & Rows.Count).End(xlUp).Row + 1) = x
        End If
    Next …
Run Code Online (Sandbox Code Playgroud)

excel vba excel-vba

3
推荐指数
2
解决办法
101
查看次数