2016-09-17 11 views
2

を参照してExcelでシートの名前を変更する別のシートにあるセルの値を参照して、新しく追加したシートの名前を変更します。シンプルに見えますが、うまくいきません。別のシートVBA

Sheets("TABLAK").Select 
Sheets.Add 
Dim ujfulneve As String 
ujfulneve = Sheets("MENU").Range("B2").Value 
Sheets(ActiveSheet).Name = ufjulneve 

最後の行にタイプミスマッチエラーが書き込まれます。手伝ってくれますか?

+1

'ActiveSheet.Name =あなたは最初の 'Sheets(" TABLAK ")は必要ありません。Select at at – user3598756

+0

ありがとうございます。私は新しいシートの配置のために、その行を書きました。 –

答えて

3

他の答えは正解で効率的ですが、私はあなたのコードに何が間違っているのか、そのコードがどうして行くのかについて少し説明を加えたいと思います。 1ライナーはしばしば、彼らが自分の利益のためにあまりにも巧みであるかのように不思議で不思議に思えることがあります。したがって、それらを効果的に使用するのに十分理解すれば、良いコーディングに不可欠です。

型の不一致エラーがSheets()機能がString(シートの名前を)期待しているが、あなたはそれをSheetオブジェクトであるActiveSheetを渡しているという事実によるものです。それはすでにSheetあるので、あなたはちょうどそれを使用することができますし、直接そのNameプロパティを変更します。

ActiveSheet.Name = ufjulneve 

しかし、それよりもさらに良いが、それはあなたがやって取ると、一般的なユーザーとの対話を模倣しなければならないとき、Excelが非常に遅いです参照する前に手動でワークシートを選択するのと同じことです。あなたはとにかくそれを選択した後、あなたがそのワークシートを使用していないので、あなたは完全に

Sheets("TABLAK").Select 

を次の行を削除する必要があります。さらに、後でコードをスキミングするときに、Sheets.Addが新しく作成されたワークシートを自動的に選択することがわからない場合は、Sheets("TABLAK")ActiveSheetであるという誤った印象を受ける可能性があります。あなたは再び別の場所Sheets("MENU").Range("B2").Valueの値を参照する必要がない限り、追加の2行を保存し、他の人によって提案されたよう

最後に、あなたにも、これはまだActiveSheetを指しているので

Worksheets.Add 
ActiveSheet.Name = Worksheets("MENU").Range("B2").Value 

を残し、それを除去することがあります、後で変更の顔にfagileそれを作る(?誤って用紙選択を変更し、それらの2の間に別の行を追加した場合に何が後に起こる)をワンライナーははるかに行くための最善の方法である:

Worksheets.Add.Name = Worksheets("MENU").Range("B2").Value 
4

コードがWithブロックを使用して多くのことを簡素化することができます。

With Sheets.Add 
    .Name = Sheets("MENU").Range("B2").Value 
End With 

さらに読書のためのこの記事を参照して、新しいワークシートを追加するいくつかのより多くの方法:についてSocii挑戦を受け入れるHow to Add a Named Sheet at the end of all excel sheets

+0

これは、1)質問に答える、2)簡潔である、3)独立している、4)**重複する**、この場合は関連する投稿へのリンクを提供するため、これは_Excel_Lentの回答です。 – ElderDelp

6

最短コードsemplification最大コードは次のとおり

Worksheets.add.Name = Worksheets("MENU").Range("B2").value 
+0

私は良いライナーが好きです。 Worksheets.Add関数で直接Nameを設定することはできませんでした。 – Socii

+1

最短は 'Sheets.Add.Name = [MENU!B2]' – Slai

+0

@Slai +1です。これは、多くの人が理解することが難しい場合があることを私が指摘したときに、私が答えて考えていた珍しい表記のタイプの素晴らしい例です。 – Jaquez

関連する問題