小编Chr*_*007的帖子

根据行号和列号获取单元格的内容

我希望根据行和列号获取单元格的内容.行号和列号存储在单元格中(此处为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公式.

excel excel-formula

95
推荐指数
2
解决办法
55万
查看次数

为什么Application.Clean()会删除可打印的字符?

赏金问题:

虽然有一个答案提供了合理的解释,但我想确定字符串的截断是否发生,因为Clean()是a WorksheetFunction和该问题背后的原因.做WorksheetFunctions时调用由VBA传递字符串为"细胞"可以这么说这在截断null Chr(0)

原始问题:

为什么TestItApplication.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 vba excel-vba

8
推荐指数
1
解决办法
1649
查看次数

将更新的Excel VBA代码分发给多个最终用户

我已经创建了一个包含多个工作表的Excel 2010工作簿.执行各种数据操作的VBA代码在几个模块中,并且还附加到几种形式.该工作簿正在分发给不同部门的几十个人使用.他们将使用自己的部门特定数据填充他们的工作簿.

如果我需要分发代码更新(错误修复或一些新功能),怎么办?我不希望用户必须重新输入或将所有数据复制/粘贴到"新"工作簿中 - 我实际上是在寻找一种方法来更新现有工作簿中的VBA项目.

excel vba excel-vba

8
推荐指数
1
解决办法
2434
查看次数

如何将VBA Now()转换为秒以确定总程序运行时间

我正在研究一个问题,我需要确定程序执行的总时间.第一行代码需要写入当前的"开始时间",最后一行代码需要写入当前的"结束时间".然后我减去"开始时间" - "结束时间"=总时间.

我很困惑如何使用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)

excel datetime vba runtime excel-vba

7
推荐指数
2
解决办法
2万
查看次数

声明和调用Sleep API

我已经阅读了很多关于实现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)

如果有人能帮助解决这个问题并感谢你对我的基本把握的耐心,我将不胜感激.

ms-access vba access-vba ms-access-2010

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

默认情况下,Word 2013 中的标注上显示“停止布局选项”图标

这让我发疯!我喜欢 Word 2013 中的新布局选项,但是当标注达到特定大小时,它的图标会遮住箭头的末端,并且您无法移动箭头:

在此处输入图片说明

不要假设有人知道如何摆脱图标,如何单击并拖动箭头的黄色末端,或者首先如何阻止图标出现?

提前致谢。

ms-word word-2013

6
推荐指数
1
解决办法
9495
查看次数

选择过滤列标题正下方的第一个可见单元格

我正在尝试选择过滤列标题正下方的第一个可见单元格。我得到的代码如下,但我对这段代码有问题。首先,第一行代码使用文件的当前活动范围。这个文件很可能会改变,这个范围也不会相同。我怎样才能使它适用于我将使用它的任何文件?其次,如果我使用具有相同列格式的完全不同的文件,则列 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)

excel vba

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

Dir()函数理解

' 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()做什么?

directory excel vba excel-vba

6
推荐指数
1
解决办法
328
查看次数

为什么在VBA中的GetValue函数中使用单元格"A1"?

我正在使用此函数从已关闭的工作簿中检索值.在这段代码的第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 excel-vba

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

执行CalculateFullRebuild时调用未使用的UDF

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

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

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

谢谢!

excel vba user-defined-functions

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