vba - 工作表中的公式和 VBA 的工作方式不同

标签 vba excel excel-formula

单元格 A1 包含数字 25,它是右对齐的,暗示它是一个数字,而不是文本。

D1 包含公式:

="" & A1

D1 中的 25 是左对齐的,暗示它是文本。下面的公式证实了这一点,该公式返回 1:

=IF(D1="25",1,0)

以下 VBA 代码将 25 放入 F1,但 25 是右对齐的,IF 测试返回 0:

Range("F1") = "" & Range("A1")

对差异有什么解释吗?

E1 包含以下公式,它给出左对齐的 25 并且 IF 测试返回 1:

TEXT(A1,"0")

但是,下面的代码给出了一个右对齐的 25 而 IF 测试返回 0:

Range("F1") = Application.WorksheetFunction.Text(Range("A1"), "0")

并不是说我必须使用 TEXT 函数。我只是想知道为什么它的工作方式与在工作表中时不同。

任何告诉何时或哪些工作表函数在 VBA 代码中不起作用的规则,或者更准确地说,会给出与在工作表中时不同的结果?

最佳答案

当 vba 将数据写入单元格时,如果需要,即如果数据类型与单元格的数字格式属性不同,则会调用内部类型转换函数。

您不希望调用该转换函数。

为避免调用此转换函数,请在写入数据之前为单元格选择适当的 Numberformat 属性。

Range("b4").NumberFormat = "@"
Range("b4") = Application.WorksheetFunction.Text(Range("A1"), "0")

关于vba - 工作表中的公式和 VBA 的工作方式不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44981380/

相关文章:

excel - 如何每第n行插入函数的值

vba - Excel UDF 筛选范围

excel - 在代码执行期间保留剪贴板内容

excel - 如何轻松更改 Excel 中文件的硬编码链接?

python - reshape 表以创建按前缀聚合的时间序列

excel - 如何在 VBA 中引用动态创建的控件?

vb.net - Excel 公式中基于数组的数学运算

excel - VBA文件集合只需要添加特定文件

vba - 使用带有时间序列的 excel 查找

excel - 如何获取当前工作簿窗口的句柄?