返回列表 上一主題 發帖

[發問] 資料的複製、貼上,語法問題

[發問] 資料的複製、貼上,語法問題

各位好  想請問一些語法上的錯誤

一、同一個檔案,不同sheet之間的複製 貼上
With Sheets("工作表1")
a = .UsedRange.Rows.com
  1. Sheets("工作表1").Range("A1:B" & a).Copy

  2. Sheets("結果區").Range("A1").Select

  3. Selection.PasteSpecial Paste:=xlPasteAllUsingSourceTheme, Operation:=xlNone _
  4. , SkipBlanks:=False, Transpose:=False

  5. Application.CutCopyMode = False
複製代碼
End with

我想把Sheet工作表1的  已使用列數 的資料,複製貼上到 Sheet結果區的 A1
可是在這一行跟我說出錯  Sheets("結果區").Range("A1").Select
為什麼呢?


二、不同檔案之間的複製、貼上

假使有兩個檔案   一個叫  資料.xlsx   一個叫   檔案.xlsx
我現在是用
Windows("資料.xlsx").Activate
.Range("A1:B3").copy

Windows("檔案.xlsx").Activate
.Range("A1").select
Selection.PasteSpecial Paste:=xlPasteAllUsingSourceTheme, Operation:=xlNone _
, SkipBlanks:=False, Transpose:=False

就是要用誰,誰就先Active
或是要寫很長
e=Workbooks("資料.xlsx").Sheets("工作表1").Range("A1:B3").Value
Workbooks("檔案.xlsx").Sheets("工作表1").Range("A1:B3").Value = e

如果直接接在一起好像也會錯
例如:
Workbooks("檔案.xlsx").Sheets("工作表1").Range("A1:B3").Value = Workbooks("資料.xlsx").Sheets("工作表1").Range("A1:B3").Value

因為我是新手
有時候對於這個就很困擾
明明我已經告訴電腦  哪個檔案的哪個sheets的哪個Range了
我就只是想要B檔案的這個位置 = A檔案的某個位置的值 而已
但是常常出錯

或是就要先用一個 e = 某某某   然後圈圈圈再 = e

搞得我很混亂
再麻煩各位大大解答
謝謝
哈囉~大家好呀

本帖最後由 n7822123 於 2019-6-20 01:26 編輯

回復 1# iceandy6150

可是在這一行跟我說出錯  Sheets("結果區").Range("A1").Select
為什麼呢?

a = .UsedRange.Rows.com
應該是
a = .UsedRange.Rows.count


二、不同檔案之間的複製、貼上

你的題目實在太廣了.......寫法千百種
只能說新手只能多看別人怎麼寫的
最後才能找到自己習慣的寫法


原程式:
Windows("資料.xlsx").Activate
.Range("A1:B3").copy

Windows("檔案.xlsx").Activate
.Range("A1").select
Selection.PasteSpecial Paste:=xlPasteAllUsingSourceTheme, Operation:=xlNone _
, SkipBlanks:=False, Transpose:=False

(1)可以設物件來簡短長度 如下:

Set 資料表=workbooks("資料.xlsx").sheets("工作表1")
Set 檔案表=workbooks("檔案.xlsx").sheets("工作表1")
資料表.[A1:B3].copy
檔案表.[A1].PasteSpecial Paste:=xlPasteAllUsingSourceTheme, Operation:=xlNone _
, SkipBlanks:=False, Transpose:=False



(2)如果啟用的工作表在"資料.xlsx"的"工作表1",
     基本上以後用這個工作表,前面的"地址"就可以省略了
     用Activate+With...End With 來簡短長度 如下


workbooks("資料.xlsx").sheets("工作表1").Activate

with workbooks("檔案.xlsx").sheets("工作表1")
    [A1:B3].copy  
    .[A1].PasteSpecial Paste:=xlPasteAllUsingSourceTheme, Operation:=xlNone _
    , SkipBlanks:=False, Transpose:=False  
end with



[A1:B3].copy  這裡是copy "資料.xlsx"的"工作表1"的[A1:B3],因為是啟用的工作表,前面直接省略!
注意[A1]前面多了.,所以是在"檔案.xlsx"的"工作表1"的[A1]貼上
程式是依需求寫的,需求表達不清楚
或者沒有上傳附件,愛莫能助

TOP

回復 2# n7822123


    感謝大大講解,原來規則是這樣

回到我第一題
  1. With Sheets("工作表1")

  2. a = .UsedRange.Rows.Count
  3. Sheets("結果區").Range("A1:Z200").Delete Shift:=xlShiftUp    '清除所有資料
  4. Sheets("工作表1").Range("A1:B" & a).Copy
  5. Sheets("結果區").Range("A1").Select
  6. Selection.PasteSpecial Paste:=xlPasteAllUsingSourceTheme, Operation:=xlNone _
  7. , SkipBlanks:=False, Transpose:=False

  8. Application.CutCopyMode = False
  9. End with
複製代碼
說錯在那一行
擷取.JPG
2019-6-20 01:52


是因為用了 With Sheets("工作表1")
所以我Sheets("結果區").Range("A1").Select 這樣就會錯嗎?
還是另有原因
謝謝
哈囉~大家好呀

TOP

本帖最後由 n7822123 於 2019-6-20 03:02 編輯

回復 3# iceandy6150


非啟用的工作表做選取,會發生錯誤

所以盡量不要用 Select,下面程式同理,試試看

Sheets("工作表1").Activate
Sheets("結果區").Range("A1").Select


選取之前,要先改啟用的工作表
改成下面這樣就可以了

Sheets("工作表1").Activate
Sheets("結果區").Activate
Sheets("結果區").Range("A1").Select
程式是依需求寫的,需求表達不清楚
或者沒有上傳附件,愛莫能助

TOP

本帖最後由 n7822123 於 2019-6-20 03:14 編輯

回復 4# n7822123

亦或者用Application.Goto取代Select

Sheets("工作表1").Activate
Application.Goto Sheets("結果區").Range("A1")
程式是依需求寫的,需求表達不清楚
或者沒有上傳附件,愛莫能助

TOP

回復 5# n7822123


    感謝您的教學

如果是以這種寫法
************************************
選取之前,要先改啟用的工作表,
改成下面這樣就可以了

Sheets("工作表1").Activate
Sheets("結果區").Activate
Sheets("結果區").Range("A1").Select
************************************

如果有很多資料要判斷,就會兩個檔案一直Active
第一檔Active,複製,第二檔Active,選取,貼上 (這是判斷一筆而已)
如果有100筆要判斷的話,符合條件就複製過去,不符合就不動作
就會一直Active
畫面就跳啊跳啊,呵呵
不過能成功完成要做的事就好

GOTO可能就比較不會跳來跳去

再次感謝
哈囉~大家好呀

TOP

本帖最後由 n7822123 於 2019-6-20 13:07 編輯

回復 6# iceandy6150

所以不要用select,可參考我2樓的第2個寫法
固定一個工作表activate,其他的用with……end with
for回圈在with之內 你要處理1000個也沒問題
程式是依需求寫的,需求表達不清楚
或者沒有上傳附件,愛莫能助

TOP

回復 3# iceandy6150

With Sheets("工作表1")
       a = .UsedRange.Rows.Count
       Sheets("結果區").Range("A1:Z200").Delete Shift:=xlShiftUp    '清除所有資料
           .Range("A1:B" & a).Copy
       Sheets("結果區").Range("A1").PasteSpecial Paste:=xlPasteAllUsingSourceTheme, Operation:=xlNone _
      , SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
End with
EXCEL參考資料:
http://blog.xuite.net/smile1000mile/blog

TOP

回復 8# 准提部林


    我今天遇到一個新問題
一個檔案,兩個sheet: 1.工作表1    2. PPT
我要把資料從【工作表1】,複製到【PPT】

但是程式結果有誤,可能又是我語法有問題了
  1. Private Sub CommandButton6_Click()

  2. If Sheets("PPT").Range("A1").Value <> "" Then
  3.   Sheets("PPT").Range("A1:Z200").Delete Shift:=xlShiftUp    '清除所有資料
  4. End If

  5. Sheets("工作表1").Range("A1").CurrentRegion.Copy

  6. Sheets("PPT").Activate

  7. ActiveSheet.[A1].Select
  8. Selection.PasteSpecial Paste:=xlPasteAllUsingSourceTheme, Operation:=xlNone _
  9. , SkipBlanks:=False, Transpose:=False

  10. Application.CutCopyMode = False

  11. a = UsedRange.Rows.Count

  12. For i = 2 To a
  13.   Range("U" & i).Value = Range("G" & i).Value + 1
  14. Next i
  15. End sub
複製代碼
我中間已經把【PPT】Activate了
a去計算已經使用列數,是計算【PPT】的嗎   還是計算 【工作表1 】的?
因為下面做迴圈的時候,結果居然是放在 【工作表1】 的U欄,而不是放在【PPT】的U欄
Range("U" & i).Value = Range("G" & i).Value + 1  這行 如果寫 .Range 又跟我警告錯誤

後來只好改成
For i = 2 To a
  Sheets("PPT").Range("U" & i).Value = Sheets("PPT").Range("G" & i).Value + 1
Next i
這樣才能放在PPT的U欄中


Sheets("工作表1").Range("A1").CurrentRegion.Copy
這一行我本來是寫[A1].CurrentRegion.Copy
但是我發現,如果我把畫面點在【PPT】,再按F8逐步測試程式
結果就會去複製【PPT】的A1,而不會去複製【工作表1】的A1

這個"地址"該省不該省,還有"目前啟用"的對象是誰
我還是有點模糊
再請各位大大解答了
謝謝
註:這個按鈕是寫在 工作表1
哈囉~大家好呀

TOP

回復 9# iceandy6150


為保無誤,
RANGE或USEDRANGE前面最好冠上SHEETS("???")
EXCEL參考資料:
http://blog.xuite.net/smile1000mile/blog

TOP

        靜思自在 : 稻穗結得越飽滿,越會往下垂,一個人越有成就,就要越有謙沖的胸襟。
返回列表 上一主題