2017-07-31 17 views
1

ボタンクリックでテンプレートに基づいて新しいシートを作成し、最後のシートとして配置し、メインシート( "Lista")のActiveCell値で名前を付けるマクロを作成しました(会社名)。新しいシートでは、セルB2:B5のメインシートから値(企業情報):列BからEにコピーしたいが、行は選択した会社に依存しています。コードは以下である:2枚のシート間のセル参照(変数名付き)

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 

おそらく、私は新しく作成したシートを間違って参照しています。または、コード行を間違えて配置します。手伝ってくれませんか?

+0

をたまたまどこがベストプラクティスをお読みください見つけるために

MsgBox activeWB.Sheets(ShtName).Range("B2").Value 

MsgBox ThisWorkbook.Sheets("Lista").ActiveCell.Range.Offset(0, 1).Value 

をしようと動作しない場合。アクティブセルは揮発性のため使用しないでください。また、selectとactivateを使用せず、明示的にワークシートを参照してください。 – Luuklag

答えて

0

私はこのようなものを試してみるでしょう。

ThisWorkbook.Sheets("Lista").Select 
activeWB.Sheets(ShtName).Range("B2").Value = ActiveCell.Offset(0, 1).Value 

これはエラーが