相关疑难解决方法(0)

如何避免在Excel VBA中使用Select

我听说过很多关于.Select在Excel VBA 中使用的可理解的憎恶,但我不确定如何避免使用它.我发现如果我能够使用变量而不是Select函数,我的代码将更加可重用.但是,ActiveCell如果不使用,我不确定如何引用事物(如等)Select.

我发现这篇关于范围的文章这个例子关于不使用select的好处却找不到怎么样的东西?

excel vba

511
推荐指数
15
解决办法
26万
查看次数

"ThisWorksheet"相当于?

在Excel中,我有一些宏是Worksheet模块的一部分.

在代码中,我想确保引用的范围是该工作表的一部分.

例如,在我的Main Sheet工作表模块中,说我有:

Sub test()
Dim rng as Range
Set rng = Range("A1")
End Sub
Run Code Online (Sandbox Code Playgroud)

当然,我想明确给出工作表范围.通常情况下,我会这样做

Set rng = Worksheets("Main Sheet").Range("A1")
Run Code Online (Sandbox Code Playgroud)

但我很好奇,因为我在工作表模块中有我的代码,我怎么能参考那个工作表?我在考虑类似的东西,ThisWorksheet但这不是VBA中的一种方法(但是ThisWorkbook,这就是为什么我想尝试它).

我唯一的另一个想法是,由于我的宏在工作表模块中,"未分配"范围变量隐式引用Main Sheet并且不能引用任何其他工作表的单元格.

我是否理解正确,或者是否有某种方法可以参考运行代码的工作表?

vba excel-vba

10
推荐指数
1
解决办法
7713
查看次数

Excel VBA 中的“应用程序”作为默认对象怎么样?

我刚刚在 Excel VBA 中编写了这个简单的宏,用于合并一组选定的单元格:

Sub Macro_Merge()
Dim Temp As String
Dim S As Variant

Temp = ""
For Each S In Selection
  If Temp = "" Then
    Temp = CStr(S.Value)
  Else:
    Temp = Temp + "," + CStr(S.Value)
  End If
Next

Selection.Merge
Selection.Value = Temp
Selection.VerticalAlignment = xlTop
  
End Sub
Run Code Online (Sandbox Code Playgroud)

这工作正常,但我总是看到那个烦人的对话框,警告我在合并时丢失数据(这正是我在宏中试图避免的情况)。

我可以摆脱该对话框,配置ApplicationDisplayAlerts属性:

Application.DisplayAlerts = False
Selection.Merge
Selection.Value = Temp
Application.DisplayAlerts = True
Run Code Online (Sandbox Code Playgroud)

这工作正常。
因此,与Application默认对象一样,我尝试清理我的代码,如下所示:

DisplayAlerts = False
Selection.Merge
Selection.Value = Temp
DisplayAlerts = True …
Run Code Online (Sandbox Code Playgroud)

excel vba excel-365

3
推荐指数
2
解决办法
252
查看次数

标签 统计

vba ×3

excel ×2

excel-365 ×1

excel-vba ×1