我已经定义了一个包含两个变量的数组:工作表的名称和pagesetup.printarea。
varArray(i) = ThisWorkbook.Sheets(i).Name & " " & Worksheets(i).PageSetup.PrintArea
问题是工作表名称包含一个我不需要的数字(例如China2
)。如何单独提取sheetname和printarea的字符串部分?或者,有没有更好的方法来设置它开始?感谢。
答案 0 :(得分:3)
正如我在评论中提到的,有一种更好的方法来存储工作表名称和打印区域。它被称为Dictionary。例如:
'needs reference to Microsoft Scripting Runtime
Dim dic As Dictionary
Set dic = New Dictionary
dic.Add "SheetName", "PrintArea"
'get print area for sheet
Dim sPrintArea As String
sPrintArea = dic("SheetName")
如您所见,现在您可以通过工作表名称访问打印区域;)
如果要枚举所有键和值,请使用for...each
循环:
Dim oKey As Variant
For Each oKey In dic.Keys
MsgBox oKey & vbTab & dic(oKey)
Next
如果您只想获得China
,则可以使用Regex within Excel:
'needs reference to Microsoft VBScript Regular Expressions x.x
Dim oRegex As VBScript_RegExp_55.RegExp
Set oRegex = New VBScript_RegExp_55.RegExp
sPattern = "\d{1,}"
With oRegex
.Pattern = sPattern
.MultiLine = False
End With
sPureSheetName = oRegex.Replace(sSheetName, "")
答案 1 :(得分:0)
只需扩展您的方法并使用2D阵列。
哪个IMO更适合字典,因为你可以根据需要扩展元素的数量,并且不存在使用字典(多次出现)的关键原因。
还使用regexp
来清理,但取出所有数字。
Sub Test()
Dim x() As String
Dim ws As Worksheet
Dim lngCnt As Long
ReDim x(1 To ActiveWorkbook.Sheets.Count, 1 To 2)
For Each ws In ActiveWorkbook.Sheets
lngCnt = lngCnt + 1
x(lngCnt, 1) = CleanStr(ws.Name)
x(lngCnt, 2) = ws.PageSetup.PrintArea
Next
End Sub
可选的清洁功能
Function CleanStr(strIn As String) As String
Dim objRegex As Object
Set objRegex = CreateObject("vbscript.regexp")
With objRegex
.Pattern = "\d+"
.Global = True
CleanStr = .Replace(strIn, vbNullString)
End With
End Function