gpt4 book ai didi

Excel VBA 引用变量工作表名称

转载 作者:行者123 更新时间:2023-12-04 22:30:06 28 4
gpt4 key购买 nike

我想引用工作簿中的多个工作表,然后使用 vba 将它们复制到另一个工作簿。这是我构建的更大宏的所有进展。
我遇到的问题是,我不能用他们的名字引用 for 循环的工作表。可能你们能帮上忙。
这是我的代码的摘录,所有名称都在我的文件顶部引用(如 sh 作为工作表,wb 作为工作簿)
我的宏应该做的是检查工作表是否应该发送给收件人,其中一些工作表(如下面的代码)合并到一个工作簿中,然后发送这个工作簿。但我遇到的问题是,如何删除/覆盖目标工作簿中的特定工作表。 (第 5 行)

For Each sh In ThisWorkbook.Worksheets
If sh.Range("A1").Value Like "?*@?*.?*" And sh.Name <> "A" Or sh.Name <> "B" Or sh.Name <> "C" Then
Workbooks.Open Filename:= _
"Path" & "Name" & ".xlsx", UpdateLinks:=0
Sheets(chr(34)&sh.name&chr(34)).Delete
Set wb = ActiveWorkbook
sh.Copy Before:=wb.Worksheets(1)
Set wb = ActiveWorkbook
sh.Copy Before:=wb.Worksheets(1)
Set sc = wb.Worksheets(chr(34)&sh.name&chr(34))
With sc.UsedRange
.Value = .Value
Rows("244:310").Select
Selection.EntireRow.Hidden = True
ActiveSheet.Outline.ShowLevels RowLevels:=1, ColumnLevels:=1
Cells("B1").Select
ActiveWindow.ScrollRow = 1
End With

Filename = "Name"

Set wb = ActiveWorkbook
Set OutMail = OutApp.CreateItem(0)
Set OMail = OutApp.CreateItem(0)

With wb
.SaveAs FilePath & Filename & FileExtStr, FileFormat:=FileFormatNum
On Error Resume Next
With OMail
.Display
End With
signature = OMail.HTMLbody
With OMail
.to = sh.Range("A1").Value
.CC = sh.Range("A3").Value
.BCC = ""
.Subject = Text
.Attachments.Add.wb.FullName

End With

On Error GoTo 0

最佳答案

由于工作表固有地具有数字表示,因此您可以使用循环在单个工作簿的工作表之间切换,例如:

Dim i as long
For i = 1 to sheets.count
'do something using Sheets(i)
Next i

关于删除工作表,您可以使用上述内容,包括 .delete:
Dim i as long
For i = 1 to sheets.count
If Sheets(i).Range("A1").Value Like "?*@?*.?*" And Sheets(i).Name <> "A" Or Sheets(i).Name <> "B" Or Sheets(i).Name <> "C" Then Sheets(i).Delete 'note that this is in-line
Next i

此外,如果您不想使用循环,或者只是想查看当前工作表,则可以使用以下内容进行删除:
ActiveSheet.Delete

我建议在 if 语句中使用之前将工作表名称记录为字符串,纯粹是为了速度/效率(对于少量代码可能不明显,但体面的做法),类似于:
Dim shName as String
shName = ActiveSheet.Name
If Sheets(shName).Range("A1").Value Like "?*@?*.?*" And shName <> "A" Or shName <> "B" Or shName <> "C" Then

这应该允许 VBA 使用已经存储的字符串(分配的内存),而不是每次调用 .name 以找到该名称时返回该名称。

关于Excel VBA 引用变量工作表名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53834436/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com