EDWARD
Lv 7
EDWARD asked in 電腦與網際網路軟體 · 8 years ago

請問EXCEL 工作表巨集的疑問 謝謝

請問EXCEL 工作表巨集的疑問 謝謝

就是執行巨集時會使用到『A名稱工作表』,

但如使用者沒有一開始沒有把『原本XXX的工作表名稱 更改為 A名稱工作表』希望會出現提示請新增『A名稱的工作表』

請問如何寫呢

謝謝

Update:

補充一下

原本xxx工作表,xxx名稱是不固定名稱(就是xxx工作表名稱都不一樣)

執行時,如有A名稱工作此巨集會執行,

如沒有A名稱工作表希望會出現提示請新增『請將xxx工作表 改為 A名稱的工作表』

謝謝您們

Update 2:

謝謝我試用您方法成功,我也自己試寫一個但一直無法成功可幫我看一下嗎

Update 3:

Sub tests()

If Sheets.Name = "A" Then

Sheets("A").Select

Range("A1").Select

ActiveCell.FormulaR1C1 = "1"

Range("A2").Select

ActiveCell.FormulaR1C1 = "2"

Else

MsgBox "※請將xxx工作表 改為 A名稱的工作表!"

End If

End Sub

Update 4:

很謝謝准提部林,不知方便也可以解釋一下程式碼1 意思嗎? 謝謝

■程式碼1:

 Sub TEST0805()

 Dim xSht As Worksheet, K&

 For Each xSht In ThisWorkbook.Sheets

   If xSht.Name = "A" Then K = 1: Exit For

 Next

 If K = 0 Then

   MsgBox "※請將xxx工作表 改為〔A名稱的工作表〕! "

   Exit Sub

 End If  

Update 5:

真的很謝謝您

再請問一下

1. For Each ... Next 和 For ....NEXT 主要差異在那

2.為何此題會想到用for each … next 呢

謝謝熱心教導

3 Answers

Rating
  • 8 years ago
    Favorite Answer

    在程式碼前端加入:

    Dim xSht As Worksheet, Km

    For Each xSht In ThisWorkbook.Sheets

    If xSht.Name = "A工作表" Then Km = 1: Exit For

    Next

    If Km = 0 Then MsgBox "※請先新增〔A工作表〕! ": Exit Sub

    若原本〔XXX的工作表〕名稱是固定的,

    則可直接將其更改名稱或複製

    2011-08-04 22:20:55 補充:

    If Km = 0 Then MsgBox "※請先新增〔A工作表〕! ": Exit Sub

    改為

    If Km = 0 Then MsgBox "※請將xxx工作表 改為 A名稱的工作表〕! ": Exit Sub

    因為xxx名稱不固定,只能用這方式!

    又,〔A名稱〕的工作表是什麼名稱?

    2011-08-05 10:00:37 補充:

    先試試:

    <2-1>

    Sub TEST0805()

    Dim xSht As Worksheet, K&

    For Each xSht In ThisWorkbook.Sheets

    If xSht.Name = "A" Then K = 1: Exit For

    Next

    If K = 0 Then

    MsgBox "※請將xxx工作表 改為〔A名稱的工作表〕! "

    Exit Sub

    End If

    2011-08-05 10:01:31 補充:

    <2-2>

    With Sheets("A")

      .Select

      .Range("A1").Value = 1

      .Range("A2").Value = 2

    End With

    End Sub

    2011-08-07 13:58:59 補充:

    修改碼:

    Sub tests()

    On Error GoTo 1

    Sheets("A").Select

    Range("A1").FormulaR1C1 = "1"

    Range("A2").FormulaR1C1 = "2"

    Exit Sub

    1: MsgBox "※請將xxx工作表 改為 A名稱的工作表!"

    End Sub

    2011-08-08 09:36:09 補充:

    On Error GoTo 1 當執行遇到錯誤時,跳至標籤 "1" 的程式碼,

    1: MsgBox "※請將xxx工作表 改為 A名稱的工作表!"

    "1:" 是這一行程式碼的〔標籤〕--- 也可用英文.中文,或英數字

    On Error GoTo PP_01

    ~~

    PP_01: MsgBox "※請將xxx工作表 改為 A名稱的工作表!"

    這個方法須〔慎用〕

    --- 能掌握錯誤判斷為前題,這個方法即可〔善用〕

    2011-08-08 19:54:16 補充:

    EXCEL VBA.

    寫入資料前,預先檢測目標工作表是否存在?

                           <.准提部林.>

    -------------------------------

    ■程式碼1:

     Sub TEST0805()

     Dim xSht As Worksheet, K&

     For Each xSht In ThisWorkbook.Sheets

       If xSht.Name = "A" Then K = 1: Exit For

     Next

     If K = 0 Then

       MsgBox "※請將xxx工作表 改為〔A名稱的工作表〕! "

       Exit Sub

     End If

     With Sheets("A")

        .Select

        .Range("A1").Value = 1

        .Range("A2").Value = 2

     End With

     End Sub

    ■程式碼2:依版主後來寫的程式碼修改

     Sub tests()

     On Error GoTo 1

     Sheets("A").Select

     Range("A1").FormulaR1C1 = "1"

     Range("A2").FormulaR1C1 = "2"

     Exit Sub

     1: MsgBox "※請將xxx工作表 改為 A名稱的工作表!"

     End Sub

    ■程式碼1是以〔檢測錯誤〕方式處理,

     而程式碼2則是以〔略過錯誤〕處理,各有其應用處,

     但程式應優先以〔防錯〕為前提,

     若要使用 On Error,當應〔慎用〕而後才能〔善用〕。

    -------------------------------

    2011-08-09 09:28:09 補充:

    For Each xSht In ThisWorkbook.Sheets

    逐一檢測工作表

    If xSht.Name = "A" Then K = 1: Exit For

    如果〔遇〕到有工作表名稱為〔A〕者,標示 K =1,跳出迴圈

    If K = 0 Then ~~

    若 K=0 代表檢測不到A工作表

    2011-08-09 21:45:18 補充:

    For 版大:

    已在回答區補充〔程式碼1〕的說明,請看一下!

    2011-08-10 09:37:42 補充:

    問1:For Each ... Next 和 For ....NEXT 主要差異在那?

       For Each ... Next 大多用於以〔物件〕迴圈。

       For ....NEXT  大多用於以〔數〕迴圈。

       多看程式碼範例可更加了解其差異,

       也可進入〔EXCEL VBA 內建說明檔〕參考其內容。

    問2:為何此題會想到用for each … next 呢?

       是基本通用法,並非〔故意〕想用,一般人都用的。

    2011-08-11 09:49:56 補充:

    >>For ....NEXT 的用法:

    For i = 1 To Sheets.Count

    If Sheets(i).Name = "A" Then K = 1: Exit For

    Next

    還有 ON ERROR 用法,

    在〔EXCEL VBA 內建說明檔〕也有說明,

    一般在說明檔中輸入關鍵字,大都可找到基本說明,

    初學VBA,我用這方法學到很多,現在還用的。

    2011-08-11 18:07:58 補充:

    1、就是用if …then 為何結束沒有end if

    >單一條件不用也可,標準是要有End If

    2、還有k=1 代表條件式是true就離開迴圈對嗎?這個是內建函數的意思嗎?

    3、K=0 代表檢測不到A工作表,這個是內建函數的意思嗎?

    >K 是自訂〔變數〕,用 P 也可,可隨意設定只要不衝突。

    這些都是VBA基本應用,

    請自行參閱說明檔或多看別人的程式碼,可取得更多的資訊,

    限於時間,實在只能說明至此!

  • EDWARD
    Lv 7
    8 years ago

    補充一下

    原本xxx工作表,xxx名稱是不固定名稱(就是xxx工作表名稱都不一樣)

    執行時,如有A名稱工作此巨集會執行,

    如沒有A名稱工作表希望會出現提示請新增『請將xxx工作表 改為 A名稱的工作表』

    謝謝您們

    2011-08-05 01:52:36 補充:

    謝謝我試用您方法成功,我也自己試寫一個但一直無法成功可幫我看一下嗎

    Sub tests()

    If Sheets.Name = "A" Then

    Sheets("A").Select

    Range("A1").Select

    ActiveCell.FormulaR1C1 = "1"

    Range("A2").Select

    ActiveCell.FormulaR1C1 = "2"

    Else

    MsgBox "※請將xxx工作表 改為 A名稱的工作表!"

    End If

    End Sub

    2011-08-08 01:46:20 補充:

    這個真的好用,可以稍微解釋一下On Error GoTo 1是什麼意思呢?

    謝謝您熱心教導^_^

    Sub tests()

    On Error GoTo 1

    Sheets("A").Select

    Range("A1").FormulaR1C1 = "1"

    Range("A2").FormulaR1C1 = "2"

    Exit Sub

    1: MsgBox "※請將xxx工作表 改為 A名稱的工作表!"

    End Sub

    2011-08-09 23:39:29 補充:

    真的很謝謝您

    再請問一下

    1. For Each ... Next 和 For ....NEXT 主要差異在那

    2.為何此題會想到用for each … next 呢

    謝謝熱心教導

    2011-08-11 03:37:48 補充:

    謝謝您的熱心教導,讓小弟學習滿多^_^,我會慢慢吸收^_^

    2011-08-11 14:48:57 補充:

    真的受益良多遇到您這麼熱心人^_^

    可以再請問大師一下

    1、就是用if …then 為何結束沒有end if

    2.、還有k=1 代表條件式是true就離開迴圈對嗎?這個是內建函數的意思嗎?

    3、K=0 代表檢測不到A工作表,這個是內建函數的意思嗎?

    For Each xSht In ThisWorkbook.Sheets

    逐一檢測工作表

    If xSht.Name = "A" Then K = 1: Exit For

    如果〔遇〕到有工作表名稱為〔A〕者,標示 K =1,跳出迴圈

    If K = 0 Then ~~

    若 K=0 代表檢測不到A工作表

    2011-08-12 13:56:19 補充:

    心中謝謝還是謝謝准提部林

    2011-08-16 05:25:31 補充:

    還是對為何K = 1 會離開廻圈 (標示 K =1,跳出迴圈)

    另一個為何 K = 0 (K=0 代表檢測不到A工作表)

    此想法有點疑問就是k 和 工作表A有關連嗎?此部份我在慢慢想一下

    謝謝您

  • Daniel
    Lv 7
    8 years ago

    換個方式, 會用到A名稱的工作表的話, 則可以在執行巨集時, 偵測是否存在A工作表, 若不存在時, 則自動新增A名稱的工作表

    不知這樣可否接受?

Still have questions? Get your answers by asking now.