VBA代码如何表示任意工作表

Private Sub CommandButton1_Click()
Application.ScreenUpdating = False
Dim rng1 As Range
For Each rng In Application.Intersect(Columns(1), Sheets(1).UsedRange)
If rng.Interior.ColorIndex <> xlNone Then
If rng1 Is Nothing Then
Set rng1 = rng
Else
Set rng1 = Union(rng, rng1)
End If
End If
Next rng
rng1.Select
Application.ScreenUpdating = True
End Sub

请教以上代码第四行,如何将sheet(1)表示为在任意工作表呢?换言之,希望代码在任意工作表都能运行,不是只在sheet1而已。

在VBA里有一个Application.Inputbox()的方法,基本上可以实现你提到的两个要求。

Set rng=Application.Inputbox()
这样返回的是一个你选择的单元格区域,至于你要提取选择的单元格区域还是其所在的工作表名称,都可以通过代码来完成的。

Application.Inputbox()方法的详细用法,请参考系统帮助。
给你个函数用:
---------------------
Function iExistsSheet(shNm) As Boolean
'检测当前工作薄中是否存在名字为 shNm 的工作表
On Error Resume Next
Dim sh As Worksheet
Set sh = Worksheets(shNm)
iExistsSheet = (Err.Number = 0)
Err.Clear
End Function
-----------------
下面是测试这个函数的程序:
Sub iTest()
Dim s As String, t As Boolean
s = "sheet1"
t = iExistsSheet(s)
MsgBox "工作表<" & s & ">" & IIf(t, "", "不") & "存在。"

'如果不存在,退出程序:
If Not t Then Exit Sub

'如果存在,并要使用这个工作表中的单元格 A1 的数据:
Dim ss
With Worksheets(s)
ss = .Range("A1")
MsgBox "工作表<" & s & ">中 单元格 A1 的值:" & ss
End With
End Sub
温馨提示:答案为网友推荐,仅供参考
第1个回答  2020-11-13
各位朋友好,在上一讲VBA代码解决方案之二十一中,我们讲了如何引用工作表的方法,今日我们讲如何选择工作工作表的方法,在选择工作表时有选择单个工作表和选择多个工作表两种方案,今日会分别讲解:

一 选择单个工作表的方法

在VBA中需要激活或者选择某个工作表时可以使用Select方法,如下面的代码所示。

代码一: Sub MySelectSh1()

Worksheets("Sheet1").Select

End Sub

上面的代码非常简单,却是非常有用的,在实际应用中应用的非常广泛。

在VBA中需要激活或者选择某个工作表时也可以使用Activate方法,如下面的代码所示。

代码二: Sub MyActivateSh2()

Worksheets("Sheet1").Activate

End Sub

Activate可以视为激活,激活后就可以在这个工作表中进行一些操作了。

代码解析:

a) MySelectSh过程使用Select方法选择“Sheet1”工作表,而MyActivateSh过程则使用Activate方法选择“Sheet1”工作表.

b) 从表面看两者的作用是相同的,但是如果“Sheet1”工作表是隐藏的,Activate方法可以正常运行,而Select方法将会出现错误,这一点要务必注意。

二 选择多个工作表的方法

如果需要同时选中工作簿中的多个工作表,则只能使用Select方法而不能使用Activate方法,如下面的代码所示。

代码三: Sub MySelectShs3()

Dim Shs As Worksheet

For Each Shs In Worksheets

Shs.Select False

Next

End Sub

代码四: Sub MySelectSheets4()

Worksheets.Select

End Sub

代码五: Sub MyArraySheets5()

Worksheets(Array(1, 2, 3)).Select

End Sub

代码解析:

a) MySelectShs过程遍历工作表并使用带参数的Select方法选中所有工作表。应用于Worksheet对象的Select方法的语法如下:Select(Replace)

参数Replace是可选的。如果该值为True,则用指定对象替代当前选定对象。如果该值为False,则延伸当前选定对象以包括任何以前选定的对象。

b) MySelectSheets过程使用Worksheets集合的Select方法选中集合中所有的对象。

c) MyArraySheets过程使用Array 函数返回工作簿中的前三张工作表并使用Worksheets集合的Select方法选中前三张工作表。

三:实例讲解

代码截图:

页面视图:

代码四的运行结果:

今日内容回向:

1 select 方法如何应用?

2 active 方法如何应用?

3 上述两种方有何不同?本回答被网友采纳
第2个回答  2018-11-23
我都忘了,你应该知道我的意思,不行再改改:
Private Sub CommandButton1_Click()
Application.ScreenUpdating = False
Dim rng1 As Range, st1 As Sheet
For Each st1 In Sheets
'For Each rng In Application.Intersect(Columns(1), Sheets(1).UsedRange)
For Each rng In Application.Intersect(Columns(1), st1.UsedRange)
If rng.Interior.ColorIndex <> xlNone Then
If rng1 Is Nothing Then
Set rng1 = rng
Else
Set rng1 = Union(rng, rng1)
End If
End If
Next rng
Next st1
rng1.Select
Application.ScreenUpdating = True
End Sub本回答被网友采纳
第3个回答  2018-11-23
Selection
上面就表示选中的单元格
相似回答