簡體   English   中英

VBA Excel代碼用於復制工作表錯誤

[英]VBA excel code for copying sheets error

我想讓復印機多次復印一張紙。 因此,我已經為第1周制定了一個星期的計划。現在,我希望該工作表再增加51次。 因此,該名稱必須以2開頭,並以52結尾。為了使此功能適用於x To y,我編寫了以下代碼:

   Sub Copier()
   Dim a As Integer
   Dim b As Integer

   a = InputBox("Enter begin number for making copy's")
   b = InputBox("Enter end number for making copy's")

   For x = a To b
      'Loop to make x number copies.
      ActiveWorkbook.ActiveSheet.Copy _
         Before:=ActiveWorkbook.Sheets("x")
         'The name of every copied sheet is a number.
   Next
End Sub

當我執行此操作時,它給出一個錯誤:“執行期間錯誤9。下標超出范圍。” (我翻譯是因為我有荷蘭語Excel。)

我看不到有什么問題,因為此代碼是從Microsoft頁面復制的。 有人知道嗎?

Before:=ActiveWorkbook.Sheets("x")

這正在尋找名為“ x”的工作表。 您可能打算使用Sheets(x) ,它通過其索引號引用工作表。 但是,這不會命名工作表-您還沒有此代碼。

Before:=ActiveWorkbook.Sheets(CStr(x))替換Before:=ActiveWorkbook.Sheets("x") Before:=ActiveWorkbook.Sheets(CStr(x))

Sheets("x")尋找確切命名為“ x”的工作表

Sheets(x) ,如果x不是字符串類型,誰將尋找索引為x的表

Sheets(CStr(x)) ,確保您尋找名為x的圖紙。

在您的代碼中,您使用了字符串“ x”。 如果要將x用作索引,則需要使用不帶引號的x。

編輯

使用x作為工作表索引:

ActiveWorkbook.ActiveSheet.Copy Before:=ActiveWorkbook.Sheets(x)

使用工作表名稱獲取其索引:

ActiveWorkbook.ActiveSheet.Copy Before:=ActiveWorkbook.Sheets(Sheets("Sheet1").Index)

使用頁數作為索引:

ActiveWorkbook.ActiveSheet.Copy Before:=ActiveWorkbook.Sheets(Sheets.Count)

如果要在復制后更改工作表的名稱,則需要添加執行此操作的代碼。

例:

ActiveWorkbook.ActiveSheet.Copy Before:=ActiveWorkbook.Sheets(Sheets.Count)
ActiveSheet.Name = x

我想要完成的是:

Sub Copier()
   Dim a As Integer
   Dim b As Integer
   Dim c As String

   c = InputBox("Name of Sheet")
   a = InputBox("Enter begin number for making copy's")
   b = InputBox("Enter end number for making copy's")


   For x = a To b
      'Loop to make x number copies.
      ActiveWorkbook.ActiveSheet.Copy _
         Before:=ActiveWorkbook.Sheets(c)


   Next
End Sub

我現在唯一想要的就是復制的工作表的名稱變為x。

此宏會將工作表“ 1”復制到工作表“ 2”至任何內容。

Option Explicit

Sub MakeExtraWeeks()
Dim q As Long
Dim i As Long

q = InputBox("How Many extra weeks?")

For i = 2 To q
    Worksheets("1").Copy After:=Worksheets(Worksheets.Count)
    Worksheets(Worksheets.Count).Name = CStr(i)
Next i
End Sub

我復制After:=最后一張紙,所以我確切地知道在哪里可以找到它,所以我可以在下一行將其重命名(請記住,張紙數將增加1,因此.Name將重命名最后一張紙)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM