小编Gar*_*ent的帖子

如何在MS Excel中使用新行连接单元格值?

在excel中,我可以在一个单元格中引入一个新行 [alt enter]

Boo[alt enter]Far
Run Code Online (Sandbox Code Playgroud)

结果是:

Boo
Far
Run Code Online (Sandbox Code Playgroud)

现在A1包含Boo,A2包含Far.如何A3以新行分隔显示这些值?

A3=A1[alt enter]&B1
Run Code Online (Sandbox Code Playgroud)

导致BooFar

A3=A1&[alt enter]B1
Run Code Online (Sandbox Code Playgroud)

导致BooFar

我怎样才能得到

Boo
Far
Run Code Online (Sandbox Code Playgroud)

通过使用单元格引用?

excel newline concatenation

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

在VBA中使用SUM()

如果我想在工作表中添加一组单元格,我可以使用以下公式:

=SUM(Sheet1!A1:A10)
Run Code Online (Sandbox Code Playgroud)

要在sub中执行此操作,我会使用:

Sub example1()
    Dim r As Range, v As Variant

    Set r = Sheets("Sheet1").Range("A1:A10")
    v = Application.WorksheetFunction.Sum(r)
End Sub
Run Code Online (Sandbox Code Playgroud)

但是,如果我想在多个工作表中添加单个单元格,我使用以下公式:

=SUM(Sheet1:Sheet38!B2)
Run Code Online (Sandbox Code Playgroud)

在VBA中,此行失败,如在VBA中指定跨表的Excel范围中所述:

Sub dural()
    v = Application.WorksheetFunction.Sum("Sheet1:Sheet3!B2")
End Sub
Run Code Online (Sandbox Code Playgroud)

我有两个解决方法.我可以通过编程循环来得到总和:

Sub example2()
    Dim i As Long
    Dim v As Variant

    v = 0
    For i = 1 To 38
        v = v + Sheets(i).Range("B2")
    Next i
End Sub
Run Code Online (Sandbox Code Playgroud)

或使用Evaluate():

v = Evaluate("Sum(Sheet1:Sheet3!B2)")
Run Code Online (Sandbox Code Playgroud)

是否可以Application.WorksheetFunction.Sum()用于此计算,还是应该坚持循环?

excel vba worksheet-function excel-vba

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

在公式单元格上使用Range.Replace

我有一个从A1A10的简短列表:

在此输入图像描述

A4包含字符串ab,A5包含公式:

="a" & "b"
Run Code Online (Sandbox Code Playgroud)

如果我跑:

Sub Test1()
    Dim r As Range

    Set r = Range("A1:A10")
    r.Replace What:="ab", Replacement:="x"
End Sub
Run Code Online (Sandbox Code Playgroud)

只有A4被修改.

如何让替换方法适用于这两种情况?

编辑#1:

我总是可以使用循环来检查/替换逐项,但.Replace速度要快得多.我想我可以构建和使用临时AutoFilter,但这看起来很极端.

excel vba excel-vba

10
推荐指数
2
解决办法
4613
查看次数

打开名称包含空格的文件

我有一些简单的Excel VBA代码,可以打开非Excel文件,如:

Sub scriptTest()
    Set objshell = CreateObject("Wscript.Shell")
    objshell.Run ("C:\TestFolder\Book1.pdf")
    Set objshell = Nothing
End Sub
Run Code Online (Sandbox Code Playgroud)

运行此命令会在Acrobat Reader中打开该文件.但是,如果我尝试打开一个名称包含空格字符的文件,例如:

Sub scriptTest()
    Set objshell = CreateObject("Wscript.Shell")
    objshell.Run ("C:\TestFolder\Bo ok1.pdf")
    Set objshell = Nothing
End Sub
Run Code Online (Sandbox Code Playgroud)

我明白了:

在此输入图像描述

如果我使用RunWindows开始菜单中的命令,两个文件都打开正常.我怎样才能克服这个问题?

excel vba wsh excel-vba

7
推荐指数
1
解决办法
4194
查看次数

哪个窗口有效

我有一个短宏,使用以下命令将单元格置于编辑模式:

Application.SendKeys "{F2}"
Run Code Online (Sandbox Code Playgroud)

如果使用正常的Ribbon接口从工作表运行宏,那么代码行将正常运行(这是因为F2将活动单元格置于编辑模式)

如果我从VBE窗口运行宏,宏将失败,因为VBE解释F2为启动对象浏览器的命令.

我想在宏中包含一个测试来检查:

如果工作表是活动窗口,请继续运行.
如果VBE是活动窗口,则发出警告MsgBox并中止.

我不知道如何确定哪个窗口是活动的. ActiveWindow.Caption总是显示如下:

Book1.xlsm
Run Code Online (Sandbox Code Playgroud)

excel vba excel-vba

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

数据验证包括逗号字符

我使用以下短宏将数据验证指定为字符列表:

Sub DVList()
    With ActiveCell.Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:="a,b,c,d"
        .IgnoreBlank = True
    End With
End Sub
Run Code Online (Sandbox Code Playgroud)

宏工作.

我想修改宏以在列表中包含逗号字符.我不知道如何做到这一点,因为逗号是列表分隔符.

我不得不使用工作表单元格来构建列表吗?

excel vba excel-vba

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

评估数组公式

我可以在VBA中评估正常的Excel公式,例如:

Sub dural()
    MsgBox Evaluate("SUM(A1:A10)")
End Sub
Run Code Online (Sandbox Code Playgroud)

如何评估数组公式?

excel vba excel-vba

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

在各种工作表中设置单元格中避免循环

我可以将多个工作表中的特定单元格设置为相同的值,而不使用类似以下内容的循环:

Sub ThisWorks()
    Sheets(Array("Sheet1", "Sheet3")).Select
    Sheets("Sheet1").Activate
    Range("B9").Select
    ActiveCell.FormulaR1C1 = "=""x"""
End Sub
Run Code Online (Sandbox Code Playgroud)

运行上面的宏在Array()中包含的工作表中的所有B9中放置相同的值

我试图通过创建和使用与上述代码等效的Object来做同样的事情:

Sub ThisPartiallyWorks()
    Dim obj As Object
    Set obj = Sheets(Array("Sheet1", "Sheet3"))
    obj.Select
    Range("A2").Formula = "=""x"""
End Sub
Run Code Online (Sandbox Code Playgroud)

这样运行没有错误,但只有一个工作表在所需的单元格中获得="x".

我究竟做错了什么??

编辑#1

瓦西里的帖子给了我线索................这个版本似乎工作:

Sub Finally()
    Dim obj As Object
    Set obj = Sheets(Array("Sheet1", "Sheet3"))
    obj.Select
    obj(1).Activate
    Range("B9").Select
    ActiveCell.FormulaR1C1 = "=""x"""
End Sub
Run Code Online (Sandbox Code Playgroud)

虽然这似乎违反了Select可以避免的概念.

excel vba excel-vba

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

将整行定义为范围的语法

在Excel中,我可以将整个列定义为范围,并在该范围内处理单个单元格,如:

Sub headache()
   Dim r As Range
   Set r = Range("A:A")
   MsgBox r(1).Address & vbCrLf & r(2).Address
End Sub
Run Code Online (Sandbox Code Playgroud)

如果我尝试对整行执行相同的操作:

Sub headache2()
   Dim r As Range
   Set r = Rows(1)
   MsgBox r(1).Address & vbCrLf & r(2).Address
End Sub
Run Code Online (Sandbox Code Playgroud)

我没有获得该范围内的单个细胞.我的解决方法是:

Set r = Range(Cells(1, 1), Cells(1, Columns.Count))
Run Code Online (Sandbox Code Playgroud)

我不敢相信这是制作范围最简单的方法...........任何建议?

excel vba excel-vba

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

Application.OnKey无法正常重置

我想在这个论坛帮助其他用户(参考).目标是使用Enter数字小键盘上的键来触发宏,而不是使用Worksheet_Change事件宏来实现相同的目的.

在运行任何操作之前,两个Enter键的工作方式相同.您输入内容,触摸任一键,材料放入单元格并向下Selection移动.如果您只需按下任一键,Selection只需向下移动即可.

在标准模块中,我把:

Sub NumericEnter()
    Application.OnKey "{ENTER}", "InsertIntoTables"
End Sub
Run Code Online (Sandbox Code Playgroud)

Sub InsertIntoTables()
    MsgBox "Inserting"
End Sub
Run Code Online (Sandbox Code Playgroud)

运行后NumericEnter(),Enter每次触摸时,数字键盘上的键都会调用正确的宏.普通Enter键不受影响.

然后我尝试Enter通过运行来恢复数字键:

Sub ClearEnter()
    Application.OnKey "{ENTER}", ""
End Sub
Run Code Online (Sandbox Code Playgroud)

数字Enter键部分恢复其原始行为.它不再调用宏; 它允许数据进入单元格,但它根本不移动Selection! (常规输入键仍然正常运行)

我不知道我错过了什么.

我看过的内容:

  • 正常输入键,箭头键和TAB键在更改时工作正常 Selection
  • 鼠标点击在更改时工作正常 Selection
  • 价值Application.MoveAfterReturnApplication.MoveAfterReturnDirection看起来也很好.

excel vba excel-vba

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

标签 统计

excel ×10

excel-vba ×9

vba ×9

concatenation ×1

newline ×1

worksheet-function ×1

wsh ×1