我希望根据行和列号获取单元格的内容.行号和列号存储在单元格中(此处为B1,B2).我知道以下解决方案有效,但他们觉得有点hacky.
索尔1
=CELL("contents",INDIRECT(ADDRESS(B1,B2)))
Run Code Online (Sandbox Code Playgroud)
索尔2
=CELL("contents",OFFSET($A$1, B1-1,B2-1))
Run Code Online (Sandbox Code Playgroud)
有没有那么冗长的方法?(比如= CellValue(row,col)或者其他什么)?
编辑/澄清:我只想使用excel工作表公式.没有VBA.简而言之,我几乎将VBA Cells()方法视为excel公式.
赏金问题:
虽然有一个答案提供了合理的解释,但我想确定字符串的截断是否发生,因为Clean()是a WorksheetFunction和该问题背后的原因.做WorksheetFunctions时调用由VBA传递字符串为"细胞"可以这么说这在截断null Chr(0)?
原始问题:
为什么TestIt的Application.Clean方法删除所有字符后,Chr(0)即使它们是可打印? TestIt2在替换后正确返回8个字符null Chr(0).
编辑:
值得注意的是,某些版本的Excel将要求您编写 Application.WorksheetFunction.Clean()
以测试此错误.
码
Sub TestIt()
Dim TryIt As String
TryIt = "Test" & Chr(0) & "asdf"
MsgBox Len(TryIt) 'Prints 9
TryIt = Application.Clean(TryIt)
MsgBox Len(TryIt) 'Prints 4
End Sub
Run Code Online (Sandbox Code Playgroud)
和
Sub TestIt2()
Dim TryIt As String
TryIt = "Test" & Chr(0) & "asdf"
MsgBox Len(TryIt) 'Prints 9
TryIt = Replace(TryIt, Chr(0), "") …Run Code Online (Sandbox Code Playgroud) 我已经创建了一个包含多个工作表的Excel 2010工作簿.执行各种数据操作的VBA代码在几个模块中,并且还附加到几种形式.该工作簿正在分发给不同部门的几十个人使用.他们将使用自己的部门特定数据填充他们的工作簿.
如果我需要分发代码更新(错误修复或一些新功能),怎么办?我不希望用户必须重新输入或将所有数据复制/粘贴到"新"工作簿中 - 我实际上是在寻找一种方法来更新现有工作簿中的VBA项目.
我正在研究一个问题,我需要确定程序执行的总时间.第一行代码需要写入当前的"开始时间",最后一行代码需要写入当前的"结束时间".然后我减去"开始时间" - "结束时间"=总时间.
我很困惑如何使用VBA中的FORMAT()函数将C2的值转换为秒?还有其他功能比FORMAT更好吗?基本上我对Excel的Date Serial值及其代表的内容感到困惑.
代码如下
编辑:感谢大家的回复.以下两个答案都适用于我正在尝试做的事情.
sub ExecutionTime()
Worksheets("Table").Range("A2").Value = Now()
'All my executable code goes here. It's a relatively small program compiling a table so it
runs very quick.
Worksheets("Table").Range("B2").Value = Now()
Worksheets("Table").Range("C2").Value = Worksheets("Table").Range("A2").Value - Worksheets("Table").Range("B2").Value
end Sub
Run Code Online (Sandbox Code Playgroud) 我已经阅读了很多关于实现Sleep API的线程,但是大多数人都比我在某些指导的知识方面领先一步将非常感激.
我在VBA中有一个宏,我想在步骤之间添加暂停(纯粹是美学而不是功能)但是我正在努力进行基本的声明和调用.
我明白首先我必须声明api并且代码是......
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Run Code Online (Sandbox Code Playgroud)
但是,我对这应该去哪里感到困惑.它应该放在它自己的模块中还是可以在宏模块的顶部说明?
然后调用函数我只需在...的宏中添加一行...
Call Sleep (1000)
Run Code Online (Sandbox Code Playgroud)
如果有人能帮助解决这个问题并感谢你对我的基本把握的耐心,我将不胜感激.
这让我发疯!我喜欢 Word 2013 中的新布局选项,但是当标注达到特定大小时,它的图标会遮住箭头的末端,并且您无法移动箭头:

不要假设有人知道如何摆脱图标,如何单击并拖动箭头的黄色末端,或者首先如何阻止图标出现?
提前致谢。
我正在尝试选择过滤列标题正下方的第一个可见单元格。我得到的代码如下,但我对这段代码有问题。首先,第一行代码使用文件的当前活动范围。这个文件很可能会改变,这个范围也不会相同。我怎样才能使它适用于我将使用它的任何文件?其次,如果我使用具有相同列格式的完全不同的文件,则列 J 下的第一个可见单元格可能是 J210。我怎样才能使这适用于任何变量数组?
Sub Macro16()
'
' Macro16 Macro
'
'
ActiveSheet.Range("$A$1:$R$58418").AutoFilter Field:=12, Criteria1:= _
"Sheets"
Range("J2").Select
ActiveCell.FormulaR1C1 = "=RIGHT(RC[1],3)"
Selection.FillDown
End Sub
Run Code Online (Sandbox Code Playgroud) ' Display the names in C:\ that represent directories.
MyPath = "c:\" ' Set the path.
MyName = Dir(MyPath, vbDirectory) ' Retrieve the first entry.
Do While MyName <> "" ' Start the loop.
' Use bitwise comparison to make sure MyName is a directory.
If (GetAttr(MyPath & MyName) And vbDirectory) = vbDirectory Then
' Display entry only if it's a directory.
MsgBox(MyName)
End If
MyName = Dir() ' Get next entry.
Loop
Run Code Online (Sandbox Code Playgroud)
我正在查看上面的代码.我特别不明白"MyName = Dir()"的作用.它被评论它得到了下一个条目,但我不明白它是如何得到下一个条目 - 特别是Dir()做什么?
我正在使用此函数从已关闭的工作簿中检索值.在这段代码的第8行中,我不明白为什么使用"A1".整个第8行究竟发生了什么?我也对xlR1C1参数感到困惑.
Private Function GetValue(path, file, sheet, ref)
Dim arg As String
If Right(path, 1) <> "\" Then path = path & "\"
If Dir(path & file) = "" Then
GetValue = "File Not Found"
Exit Function
End If
arg = "'" & path & "[" & file & "]" & sheet & "'!" & _
Range(ref).Range("A1").Address(, , xlR1C1)
GetValue = ExecuteExcel4Macro(arg)
End Function
Run Code Online (Sandbox Code Playgroud) 我在 Excel 书中有一些用户定义的函数。我使用了它们一段时间,但过了一会儿,我从单元格中删除了对这些函数的调用,因为我找到了完成相同任务的更好方法(我没有在 VBA 编辑器中删除函数定义本身)。因此,这些函数不再在书中或任何 VBA 代码中被调用,我使用搜索进行了检查,百分百确定。
现在我正在对我的代码进行一些审查,我注意到一些奇怪的事情:在同一工作簿中的 Sub 过程中(与这些函数无关)我调用Application.CalculateFullRebuild. 当发生这种情况时,那些 UDF 被调用,我可以通过在 UDF 内设置断点来看到它。
我想知道为什么会发生这种情况以及可以采取什么措施来避免它,因为它不必要地减慢了 Sub 的速度。
谢谢!