在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)
通过使用单元格引用?
如果我想在工作表中添加一组单元格,我可以使用以下公式:
=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()用于此计算,还是应该坚持循环?
我有一个从A1到A10的简短列表:
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文件,如:
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开始菜单中的命令,两个文件都打开正常.我怎样才能克服这个问题?
我有一个短宏,使用以下命令将单元格置于编辑模式:
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) 我使用以下短宏将数据验证指定为字符列表:
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)
宏工作.
我想修改宏以在列表中包含逗号字符.我不知道如何做到这一点,因为逗号是列表分隔符.
我不得不使用工作表单元格来构建列表吗?
我可以在VBA中评估正常的Excel公式,例如:
Sub dural()
MsgBox Evaluate("SUM(A1:A10)")
End Sub
Run Code Online (Sandbox Code Playgroud)
如何评估数组公式?
我可以将多个工作表中的特定单元格设置为相同的值,而不使用类似以下内容的循环:
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中,我可以将整个列定义为范围,并在该范围内处理单个单元格,如:
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)
我不敢相信这是制作范围最简单的方法...........任何建议?
我想在这个论坛帮助其他用户(参考).目标是使用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! (常规输入键仍然正常运行)
我不知道我错过了什么.
我看过的内容:
SelectionSelectionApplication.MoveAfterReturn和Application.MoveAfterReturnDirection看起来也很好.