返回列表 上一主題 發帖

VBA 物件選取寫法問題

VBA 物件選取寫法問題

請問各位大大
  1. Sub test()

  2. Dim a As Worksheet
  3. Dim b As Worksheet

  4. Set a = Sheets("工作表1")
  5. Set b = Sheets("工作表2")

  6. For i = 0 To 2

  7. a.Select
  8. Range(Cells(i + 2, 2), Cells(i + 2, 6)).Copy

  9. b.Select
  10. Cells(i * 9 + 2, 2).Select
  11. Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=True
  12. Next

  13. End Sub
複製代碼
我把
a.Select
Range(Cells(i + 2, 2), Cells(i + 2, 6)).Copy 這段縮寫
a.Range(Cells(i + 2, 2), Cells(i + 2, 6)).Copy 為什麼他會跳出錯誤?
活頁簿1.rar (17.18 KB)

本帖最後由 n7822123 於 2020-6-19 23:22 編輯

回復 1# mash071896

Set a = Sheets("工作表1")
Set b = Sheets("工作表2")

我把
a.Select
Range(Cells(i + 2, 2), Cells(i + 2, 6)).Copy 這段縮寫
a.Range(Cells(i + 2, 2), Cells(i + 2, 6)).Copy 為什麼他會跳出錯誤?   

如果你現在當前的表格是 "工作表2",你執行下面這行,本來就是有問題
Sheets("工作表1").Range(Cells(i + 2, 2), Cells(i + 2, 6)).Copy

這就要說明 ,在當前物件下,可以省略前面父物件的敘述
今天你在"工作表2"當下,寫了這一行程式

Range("A1")="123"

系統會在當前活頁簿當前工作表的[A1]欄位填值,也就相當於下面這行
Workbooks("你的活頁簿.xlsx").Sheets("工作表2").Range("A1")="123"

也就是說你只寫了 Range("A1")="123",但是系統自動幫你把"父物件" 填上了
回頭來看你的程式,如果你當前畫面在"工作表2",系統會幫你把父物件填好如下
Sheets("工作表1").Range(Sheets("工作表2").Cells(i + 2, 2), Sheets("工作表2").Cells(i + 2, 6)).Copy

這下你知道問題在哪了吧!? 你想讓電腦在工作表1找工作表2的儲存格,當然找不到!

寫成下面就沒問題了

a.Range(a.Cells(i + 2, 2), a.Cells(i + 2, 6)).Copy
或者
Sheets("工作表1").Range(Sheets("工作表1").Cells(i + 2, 2), Sheets("工作表1").Cells(i + 2, 6)).Copy


覺得很長嗎? 你可以用原本的方式 a.Select 切換當前工作表,或者你應該要學學用 With(正常VBA熟手的用法)
With Sheets("工作表1")
    .Range(.Cells(i + 2, 2), .Cells(i + 2, 6)).Copy
End With
程式是依需求寫的,需求表達不清楚
或者沒有上傳附件,愛莫能助

TOP

本帖最後由 n7822123 於 2020-6-20 14:10 編輯

回復 1# mash071896


用With 結合你的其他程式可以略做簡化 如下

Sub test2()
Sheets("工作表2").Activate   '設當前工作表為 工作表2
For i = 0 To 2
  With Sheets("工作表1")
      .Range(.Cells(i + 2, 2), .Cells(i + 2, 6)).Copy                                      ' 工作表1 複製
      Cells(i * 9 + 2, 2).PasteSpecial xlPasteValues, xlNone, False, True  ' 工作表2(被省略)  貼上
  End With
Next
End Sub
程式是依需求寫的,需求表達不清楚
或者沒有上傳附件,愛莫能助

TOP

回復 3# n7822123

感謝大大 原來是cell部分出錯
學到了with

TOP

回復 2# n7822123
感謝詳細說明父代 與子代的關係

TOP

        靜思自在 : 口說一句好話,如口出蓮花;口說一句壞話如口吐毒蛇。
返回列表 上一主題