我在 Excel 书中有一些用户定义的函数。我使用了它们一段时间,但过了一会儿,我从单元格中删除了对这些函数的调用,因为我找到了完成相同任务的更好方法(我没有在 VBA 编辑器中删除函数定义本身)。因此,这些函数不再在书中或任何 VBA 代码中被调用,我使用搜索进行了检查,百分百确定。
现在我正在对我的代码进行一些审查,我注意到一些奇怪的事情:在同一工作簿中的 Sub 过程中(与这些函数无关)我调用Application.CalculateFullRebuild. 当发生这种情况时,那些 UDF 被调用,我可以通过在 UDF 内设置断点来看到它。
我想知道为什么会发生这种情况以及可以采取什么措施来避免它,因为它不必要地减慢了 Sub 的速度。
谢谢!
在我的代码中的任何给定行上,我可以将Debug.Print()与其他命令一起使用,以找出如果我的代码在该行上遇到错误会发生什么?
我可以使用Debug.Print中的任何语句来查明当前的错误处理过程是转到0,恢复下一个还是转到某个标签?
我想象的是:
Debug.Print(OnErrorMode)
Run Code Online (Sandbox Code Playgroud)
我正在寻找一种方法来确定一个特定的代码行是否会出现错误GoTo 0(停止并显示错误),Resume Next(跳过该行)或者GoTo Label(跳转到Label),因为On Error我的代码中某处可能存在我无法找到的地方.那可能吗?
我有条件似乎不起作用.
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工作表中编写搜索宏.如何在编辑单元格时动态启动宏.在单元格中写入时,搜索宏应该在后台运行,每个字符都添加或删除,而不仅仅是在结尾处.
Worksheet_Change(ByVal Target As Range)仅在编辑完成时启动(返回被点击或其他单元格被选中).
谢谢.
这个问题:在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上进行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可以帮助我做到这一点但是它不会让我复制.粘贴到另一张纸也不起作用.
在我的代码中,我包含一个布尔变量,我想在其中分配一个范围的隐藏属性的值.即,如果隐藏范围,则变量的值应为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) 我有这个代码比较列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) 我正在进行自动化,我需要拼写检查单元格中的一个段落并突出显示红色的错误单词,并且我需要在具有动态范围的列中执行此拼写检查.
我正在使用以下代码
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中不同工作表上的两列.宏如下:
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)