|
个人理解,ActiveX控件默认其所在表格为激活状态,故对其所在表格的单元格可以用方括号([])直接引用,表单控件依靠指定宏来运行,宏过程当中,添加工作簿时,激活状态或者说焦点自然转移到新增工作簿上,这时候如果仍然用中括号引用原来工作簿的单元格肯定会出现下标越界之类的报错,所以引用单元格的形式必须要完整,避免出现代码太长的情况,可以在新增工作簿前定义变量并将相关单元格的内容赋值给变量备用即可,以下是借鉴楼上思路修改后的代码
Sub 用表单控件按钮导出()
Dim Arr, wb As Workbook, shtname, wbname
Sheets("客户价格等级").Activate
shtname = [a1]
wbname = [b1]
Arr = Sheets("客户价格等级").Range("A1:E7").Copy
Set wb = Workbooks.Add '新建工作簿
With wb
wb.Sheets(1).Name = shtname
With .Sheets(1)
.Range("A1:E7").PasteSpecial (xlPasteValues)
.Range("A1:E7").PasteSpecial (xlPasteFormats)
.Range("A1:E7").PasteSpecial Paste:=xlPasteColumnWidths
.Range("A1:B1").Clear
End With
Application.CutCopyMode = False
.SaveAs "D:\测试\" & wbname & ".xlsx"
.Close False
End With
End Sub |
|