返回列表 上一主題 發帖

[發問] 物件省略的加"."與不加問題

[發問] 物件省略的加"."與不加問題

本帖最後由 thps51134 於 2011-12-7 09:26 編輯

想請教我的觀念哪裡搞錯了

在With...End With 中, 將Cells(), Range()等前面加上"."時
發現出現"錯誤438...不支援此屬性或方法"或"錯誤1004, class range select失敗"等的錯誤訊息

是 Workbook.add的關係嗎?
=====
目前可以正確執行的版本:
  1. With Workbooks.add
  2.     With Sheet1
  3.         Range("A1").select
  4.     End with
  5. End with
複製代碼
但之前學到了
With...End With
其中做動作時
前面物件雖可省略, 但需加個"."
所以原本是這樣:
  1. With Workbooks.add
  2.     With .Sheet1
  3.         .Range("A1").select
  4.     End with
  5. End with
複製代碼
&這樣寫的:
  1. With Workbooks.add
  2.     With Sheet1
  3.         .Range("A1").select
  4.     End with
  5. End with
複製代碼
但就會出現錯誤訊息

請指點我哪裡搞錯了,謝謝大家!

本帖最後由 thps51134 於 2011-12-7 12:44 編輯

回復 2# Hsieh

    Dear Hsieh大, 老實說
 讓我相當困惑的其中一點就在於
 我的Code是寫在下面所寫的"Test.xls"的Module中
  1.     Windows("Test.xls").Activate
  2.     Range(Cells(1, 1), Cells(4, 72)).Copy
  3.    
  4.     With Workbooks.Add
  5.         With Sheets1
  6.             Cells(1, 1).Select '也改為' Cells(1,1).value= "OH" '過, 確認過動作真的是會作用在此'
  7.             ActiveSheet.Paste
  8.         End With
  9.     End With
複製代碼
這樣寫下來,竟然可以執行出
讓在test 中Copy的資料於新開的workbook中的Sheet1中貼上  
(我的目的就是要copy舊檔案中的部分資料, paste於開的檔案中)

Hsieh大的回覆也讓我驚覺我的錯誤訊息問題...
應該與語法不熟大有關係= =a
因為將
With Sheet1 改為 With .Sheets(1)後
加"."的就順利執行了!
感謝!

TOP

本帖最後由 thps51134 於 2011-12-7 15:23 編輯

回復 4# Hsieh
  1. Sub NewMethod()
  2.     With Workbooks.Add
  3.       Set A = .Sheets(1).Cells(1, 1) '指定新活頁簿的第一個工作表A1
  4.        With Windows("test.xls").Sheets(1)
  5.           .Range(.Cells(1, 1), .Cells(4, 72)).Copy A '複製TEST.XLS的第一張工作表部分範圍到新活頁簿中
  6.        End With
  7.     End With
  8. End Sub
複製代碼
偵錯時highlight說在第4行發現問題
還是說, 會不會我改到了什麼設定?
===
其實用.select是因為
使用錄製巨集時跑出的Code 為需要用到Activate的
改來改去就成了現在的樣子

真的很想省掉
Hsieh大給了我一個很棒的方向~

TOP

回復 6# GBKEE

    抱歉未及時回覆
    感謝兩位... (羞愧掩面)
 竟然眼花當錯誤

想繼續向諸位請教
1. 在第四行中的" .Range(.Cells(1, 1), .Cells(4, 72)).Copy A "的意義為何?
  1. With Workbooks.Add
  2.       Set A = .Sheets(1).Cells(1, 1) '指定新活頁簿的第一個工作表A1
  3.        With Workbooks("Test.xls").Sheets(1)
  4.           .Range(.Cells(1, 1), .Cells(4, 72)).Copy A '複製TEST.XLS的第一張工作表部分範圍到新活頁簿中
  5.        End With
  6. End With
複製代碼
若設" .Range(.Cells(1, 1), .Cells(4, 72))" 為B
B.Copy A 是 "copy B to A"嗎?

2. 若想另外在"Test.xls"作逐行判斷
令結果= true的該列copy to 新開的Workbook
自己腦袋裡的概念像這樣...
  1. With Workbook("Test.xls").Sheets(1)
  2.     for i = 1 to RowEnd 'RowEnd為整個Sheet(1)中的最後一列'
  3.         If true then
  4.             Rows(i).copy
  5.             With  剛剛新開的workbook
  6.                 '將於Workbook("Test.xls").Sheets(1)中copy的Row
  7.                 'paste在 New Workbook的最後一列之後
  8.             End With
  9.         End if
  10.     Next i
  11. End With
複製代碼
還是說建議強制先替使用者將新add 的 workbook存檔
再將它叫出來?

感謝!

TOP

回復 8# GBKEE

想用VBA做的事:
   1. 將Test.xls表格檔頭複製到新開的檔案
  2. 回到舊檔案(Test.xls), 對Row data作逐列判斷
    符合=> Copy該row到 新檔案最後一列後
    不符=> 到下一列判斷
這邊不知道該如何在兩個Workbook中切換才好
=====

    其實很想知道如何做完所有copy動作再存檔
 可是不知道該如何寫For loop中的
        with "剛剛新增的workbook" 
    如果直接 with workbook.add怕一次loop就新開一個workbook ...@@

謝謝!

TOP

本帖最後由 thps51134 於 2011-12-20 10:47 編輯

回復 10# GBKEE

 想請教您code中兩列的意義
1. 第一列 "Option Explicit"

2. 第11列 "NewSh.Cells(Rows.Count, "A").End(xlUp).Offset(1)"
  迴圈執行到這裡時,似乎最後一列的資訊無法更新? (也怕我改寫錯了)
  每次於新檔案貼上都是貼在同一列Q_Q
  1. '自己改寫的迴圈內; 第九列執行有問題'
  2. For i = 22 To RowEnd      'RowEnd為整個Sheet(1)中的最後一列'
  3.     If Cells(i, 3).Value = "BU5" Then
  4.         If NewSh.Cells(2, 1) = "" Then  '因為Cells(1,1)都為空, 所以換了別格
  5.             Range(Cells(i, 1), Cells(i + 1, 2)).EntireRow.Copy NewSh.Rows(1)
  6.                  '新檔案最後一列後
  7.                  '因為前面沒看到newbo所以換成NewSh...不知道有沒有誤會'
  8.         Else
  9.             Range(Cells(i, 1), Cells(i + 1, 3)).EntireRow.Copy NewSh.Cells(Rows.count, "A").End(xlUp).Offset(1) '新檔案最後一列
  10.         End If
  11.     End If
  12. Next i
複製代碼
謝謝!

TOP

        靜思自在 : 君子如水,隨方就圓,無處不自在。
返回列表 上一主題