【发布时间】:2017-07-31 08:48:57
【问题描述】:
我创建了一个宏,在按钮单击时会根据模板创建新工作表,将其放置为最后一个工作表,并在主工作表(“Lista”)(公司名称)中使用 ActiveCell 值命名它。在新工作表的单元格 B2:B5 中,我想从主工作表复制值(公司信息):B 列到 E 列,但是行取决于所选公司。代码如下:
Sub HistoriaDostaw()
Dim wb As Workbook
Dim ws As Worksheet
Dim activeWB As Workbook
Dim FilePath As String
Dim ShtName As String
Dim CopyInfo As String
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Set activeWB = Application.ActiveWorkbook
FilePath = "C:\Users\DELL\AppData\Roaming\Microsoft\Szablony\HistoriaDostaw1.xltm"
On Error Resume Next
ShtName = ActiveCell.Value2
If Not WorkSheetExists(ShtName) Then
Set wb = Application.Workbooks.Open(FilePath)
wb.Worksheets(1).Copy After:=activeWB.Sheets(activeWB.Sheets.Count)
activeWB.Activate
activeWB.Sheets(activeWB.Sheets.Count).Name = ShtName
wb.Close False
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End If
End Sub
Function WorkSheetExists(ByVal strName As String) As Boolean
On Error Resume Next
WorkSheetExists = Not ActiveWorkbook.Worksheets(strName) Is Nothing
End Function
我尝试使用复制/粘贴方法(放置在子部分中)从单个单元格开始但不起作用:
ThisWorkbook.Sheets("Lista").ActiveCell.Offset(0, 1).Select
Selection.Copy
Sheets(activeWB.Sheets.Count).Range("B2").Select
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
False
还有这个方法:
activeWB.Sheets(activeWB.Sheets.Count).Range("B2").Value = ThisWorkbook.Sheets("Lista").ActiveCell.Range.Offset(0, 1).Value
也许我错误地引用了新创建的工作表。或者代码行放错了。你能帮我么?
【问题讨论】:
-
您应该阅读最佳实践。不要使用activecell,因为它是易变的。也不要使用选择和激活,而是明确引用工作表。