返回列表 上一主題 發帖

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

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

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

一、同一個檔案,不同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

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

回復 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

回復 5# n7822123


    感謝您的教學

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

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

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

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

再次感謝
哈囉~大家好呀

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

回復 10# 准提部林


    好的,非常感謝

只是因為有時候很長一串
我都想省一下,呵呵
哈囉~大家好呀

TOP

UsedRange是計算某個工作表的使用範圍~~~所以前面最好指定是哪個Sheet
你的按鈕在工作表1,所以工作表1一開始就是Activate了~~~~
盡量不要一直切換工作表.........把自己弄混亂了~~~我光看你的說明...我自己也混亂了XD
依照你的寫法,我認為你還是直接指定哪個工作表比較安全^.^
你在ppt工作表的操作比較多,按鈕卻設在工作表1的確容易出問題

如果是我,就這樣寫摟~~~

With Sheets("PPT")
  If .[A1].Value <> "" Then .[A1:Z200].Delete Shift:=xlShiftUp    '清除所有資料
  [A1].CurrentRegion.Copy
  .[A1].PasteSpecial Paste:=xlPasteAllUsingSourceTheme, Operation:=xlNone _
  , SkipBlanks:=False, Transpose:=False
  Application.CutCopyMode = False
  A = .UsedRange.Rows.Count
  For i = 2 To A
    .Range("U" & i).Value = .Range("G" & i).Value + 1
  Next i
End With
回復 11# n7822123

喔~ 那我知道了  按鈕在哪一頁,按下按鈕的時候,那一頁就是Activate了
任何指令或是省了 "前面地址" 的寫法,都是針對這一頁面在動作

所以如果三個SHEET,分別是【功能區】、【結果區】、【輸出區】
很多按鈕功能都是寫在【功能區】的話

我只要寫
Range("A1:B5").select  ==>> 【功能區】的A1~B5會被選取

如果想要針對另外兩個頁面去做處理
我就必須先寫WITH

With Sheets("結果區")
.Range("A1:B5").select    ==>>  【結果區】的A1~B5會被選取    前面要加"點",才是針對With的Sheet來動作

那來個測試
如果程式如下的話
Range("A1:B5").select

With Sheets("結果區")
.Range("A1:B5").select
End with

With Sheets("輸出區")
.Range("A1:B5").select
End with

果然就會乖乖的去選取各Sheet選取該對應的區塊
【功能區】的A1~B5會被選取
再來是
【結果區】的A1~B5會被選取
再來是
【輸出區】的A1~B5會被選取

原來有點 跟沒有點  還有WITH  是這樣用得喔
我會了  YA~ 感謝大大教學~
哈囉~大家好呀

TOP

        靜思自在 : 有時當思無時苦,好天要積雨來糧。
返回列表 上一主題