EXCEL VBA 參照值複製貼上指令 求救高手大大幫忙

peter3057 wrote:
測試檔為了執行連續複(恕刪)


Range("F36:M36").Copy 這一行的複製範圍改成你要的

另外,如果系數表的數量如果是固定的,其實也可以增加個讀取系數表的循環圈,
這樣就可以做到按個鍵,把所有工作一次完成. 如果不固定,就自己動手改數字.

for i = 1 to X (系數表的個數)
for j = 1 to Y (工作表的個數)
........................
........................
........................
next j
next i

你可以自己嘗試去修改程式看看,不會的先去看EXCEL說明檔或相關書籍,慢慢的就會順手.
EDILUO
其實我不是時常一整串連動 因為有時候B1-B15有些是不需要完全更動的 舊資料須植續留存 至下次需要修改時 我才會複製貼上
EDILUO
當然 有時候需要單一係數表內連動作業 大大給的文法已經幫了大忙 但是上述能做到是為最好 我就能開始完善我要的 再拜託大大費心

所以。我每個係數表。都需要”觸發按鈕”(按鈕我會用。我只需要文法..)


已經有一個初步想法,讓樓主可以不需要在每個係數表都放觸發按鈕(因為樓主表示係數表會有超過100以上....)。

大概提一下樓主需求,樓主看是不是:

1.選定一個已經完成綠色數值(36列)內容修改好的的係數表,準備執行該係數表的貼上工作。

2.選定要貼上的B對象,選定要貼36列的範圍(是選F36、G36....4格,或8格....不一定)

3.執行貼上(按鈕),讓程式依據對象,把選取資料貼到對應列(從該列A欄開始)

是這樣嗎?那新的問題是:
1.如果是這樣,100多個係數表,也要做很多次(甚至要超過百次)?可是如果是每個係數表要一次就全部[依序]自動跑完,那我上面提的:重複貼上問題是?

2.如果係數表的綠色36列位置是不會變動的,那B1.....排下來,超過36列的問題??(還是每個係數表出現的B,數量不會超過B20.....蓋到36列?).........還是這個36列是舉例,實際可能是第x列?

3.B1.....BN,每5列就會有一空格?是固定的嗎?....

附圖....


等樓主回覆囉
Der,misser1
EDILUO
觸發鈕您說的對。要按照各係數表作“各個係數表修改” 如係數表一 B1 B3 B5 B7需要修改我只要點擊其設置出來的按鈕點下去作複製貼上即可 所以。我才希望能在各係數表內針對參數複製貼上作“各別按鈕”
EDILUO
綠色格子的部份沒錯 有時要8格全部複製貼上。有時需要前四格。或。後四格去作對應貼上
misser wrote:
至於B15以後。我可以自行去完善


我重點是要確認,下面綠色的列數36(f36:m36),是否是固定位置?如果實際上B15下面還有其他B,那這個綠底色的位置(f36:m36)36列,就可能只是
舉例而非真實位置?那貼上的語法中,抓f36:m36就應該改成可變動?

當然樓主現在想要的,可能就是單純的貼上語法而已,但我想的卻是,後續要為超過百張的係數表,每張都一一加上N個按鈕(對應到B1:B.....N),這種繁瑣的工作,不應該也濃縮成簡易的步驟嗎?(做成可變動的參數)

........所以囉哩囉嗦問了一堆,單純是希望可以讓樓主享受到更方便一點的作業。
(不然其實上面回答的大大已經有幫忙提供貼上做法了)

再囉嗦問一下樓主,
1.要貼上的綠底色,固定是F欄到M欄,8欄位置不動?
2.貼上的選擇固定只有3種(前四,後四,全部)?
3.目標(B?)的貼上位置欄固定是從A欄開始?
4.係數表的命名有規則?規則是?(名稱開頭都有「係數」2字?或開頭絕不是「B」......)~~(怕這個名稱:係數,也是樓主的虛擬,而目前心中的想法,最好是能確定係數表和目標B?的差別)
5.上面再次提的,綠色底的列位置是固定36,還是會變?

以上,如果樓主能明確提供資料的話,我準備找時間來動手實作一個範例,給樓主參考囉。(當然,若有其他大大出手,貼出更完整的範例,那就更好囉)
Der,misser1
EDILUO
補充第3點 假如我僅需複製J36-M36 則對應B+的列 欄僅複製到E-H 則B+的 列 欄 A-D原有資料不動
EDILUO
以上
我完全看不懂…
但自動新增按鈕、指定巨集的部份還算簡單,提供一個簡易範例

'程式碼放在ThisWrokbook
Private Sub Workbook_SheetActivate(ByVal Sh As Object)

Dim temp As String
On Error Resume Next
temp = ActiveSheet.Shapes.Range("我是按鈕").Name
If temp = "" Then
Debug.Print "no button"

With ActiveSheet.Buttons.Add(200, 50, 100, 50)
.Characters.Text = "測試(" & ActiveSheet.Name & ")"
.Name = "我是按鈕"
.OnAction = "放在module1要用的副程式"
End With

Else

Debug.Print "button OK"
Exit Sub

End If

End Sub




'程式碼放在module1模組
Sub 放在module1要用的副程式()

ActiveSheet.Cells(1, 1) = Format(Now(), "hh:mm:ss")

End Sub


snare
“我每個係數表。都需要”觸發按鈕”,我知道這不是您要的貼上功能,很單純只是自動新增按鈕(巨集),讓您不用在每個工作表都要人工新增按鈕、指定巨集,可以省點時間。
EDILUO
原來是這樣 感謝您 我學起來備用了 萬分感激
snare wrote:
我完全看不懂…但自動(恕刪)


果然,S大看不下去,還是出手了........

看樓主囉~~(如果需要我後續「開工」動手,就說一下,並麻煩給足幾個問題的「答案」囉)
Der,misser1
EDILUO
大大 已回復了 在上方留言內
EDILUO
還是我有那裡沒有回答完整 請您提示
有囉,樓主的回覆有看見了........。

我大概有個想法了,這就找時間來做(明早得6點吃早餐,然後出門,大概整個上午就會在外面,不過沒意外的話,下午~~最慢晚上,會回到家,有電腦可用。再來動手)

至於觸發按鈕的部分,既然樓主還有其他參數要做選擇(複製模式:前四、後四或全部),而且看來是得人工選擇(不知道規律是啥),所以也不大能「一步到位」,用一個按鈕就能完成整個貼上步驟(總得讓樓主有機會做模式選擇....再不然就是把按鈕數再x3.....如[前四貼到B1]、[後四貼到B1]、[全部貼到B1]......[前四貼到B2]、[後四貼到B2]、[全部貼到B2])......是否真的要這麼多按鈕,就由樓主後續修改時自行舉一反三(或套用S大的自動產生按鈕....)

所以我應該會捨棄按鈕,做成:快速鍵呼叫表單,這樣複製模式、目標指定....通通在表單內解決,係數表完全不用放按鈕。(若之後樓主不滿意,再擷取語法,自己改成N個按鈕囉)
......................
不過整個下來,我還沒搞懂的是:
1.這真是一個活頁簿內的事?(一個活頁簿裡面,放了超過100個的工作表?)
2.既然B也可能有上百個(B1....B100),那綠色底F36:M36勢必不可能維持在36列(光在係數表裡,B1、B2...排下來,綠底列早就被擠到F10x:M10x.....超過100列去了)....;.還是每個係數表裡面的B1、B2.....都只是局部的B,其實不會把所有B都列出來?(比如係數表一裡面放的,是B1....B15;係數二表裡的,可能是B3、B5、B10、.....,所以排不到36列,這樣綠底才能維持在36列?)

關於2,我有問過,但好像沒看到樓主確切回覆??.....不過其實也沒差,因為樓主也說了,這個綠底F36:M36,最終位置可能會再調過,所以也會留下讓樓主可手動調整綠底位置參數的的空間......

原則上是希望讓樓主可以拿到檔案後,不修改也可以直接用。當然,程式碼都不會鎖住,樓主可以選擇直接用,或擷取自己的程式碼後,改成你自己要的方式用(包括改成按鈕觸發、綠底新的固定位置),或移植到其他檔案去用。.......

抱歉,看來得先休息囉....至於熬夜寫程式,這是以前年輕時可以做的;動過幾次手術,接近退休的現在就沒本錢這樣做囉,呵。(希望完成的結果樓主還能接受,哈)
Der,misser1
EDILUO
因為表達能力不盡完善 讓大大費心思 深感抱歉 我只是想盡量"簡單"表達
EDILUO
若可以 在勞煩大大 作數個範例文法 我在依照範例 去自行完善
peter3057 wrote:
Range("F36...(恕刪)


我將你系數工作表改成系數0 的格式, 這樣就可以彈性的選擇工作表及複製內容.
test2

我寫的程式不是很嚴謹沒有偵錯功能.,通常是自己用,可以應付工作為原則, 所以系數工作表的工作表名稱如果不存在,會發生錯誤哦
EDILUO
大大 無法存取檔案觀看@@
peter3057 wrote:
我將你系數工作表改成(恕刪)


sorry! 我發現檔案有誤重傳,請重新下載
EDILUO
比如 係數1 內的 B1-B7 目標 列 欄 做修改 綠色儲存格 8格資料全部填上 到目標B1僅修改列 欄 A-D 至於E-H原資料不動 係數一 B1 列 欄 顯示A-D 資料已修改 E-H不動
peter3057
程式有錯, If Cells(1, I) "N" Then 要改成 If Cells(I, 1) "N" Then
TEST2 內容如下
Sub test2()
Set S = ActiveSheet
Application.ScreenUpdating = False
RowCount = Application.WorksheetFunction.CountA(Range("B:B")) '計算工作表有幾列
Range("D2:K" & RowCount).ClearContents '清空藍色區域
For I = 2 To RowCount
If Cells(I, 1) <> "N" Then ' A欄是N就不處理
shtname = Cells(I, 2) ' 取得工作表名稱
shtrow = Cells(I, 3) ' 取得列號
For J = 4 To 11 ' 複製綠色區域資料到相關工作表
If Cells(1, J) <> "" Then ' 如果綠色儲存格不是空白就複製過去
Sheets(shtname).Cells(shtrow, J - 3) = Cells(1, J)
End If
Cells(I, J) = Sheets(shtname).Cells(shtrow, J - 3) '將複製資料回寫回來,用來取代 inderect 公式的值
Next J
End If
Next I
Application.ScreenUpdating = True
'Range("F36:M36").ClearContents '清除綠色區域資料
End Sub
EDILUO
這樣我會很多不便 還是感謝大大費心
EDILUO
還是下方 您發的文法 比較貼近需求
Sub test1()
Set S = ActiveSheet
Application.ScreenUpdating = False
For i = 1 To 15
X = ActiveSheet.Cells(13, 4).Offset(i, 0).Value
Range("F36:M36").Copy
Sheets("B" & i & "").Activate
Range("A" & X & "").Select
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
S.Activate
Next i
Application.ScreenUpdating = True
Range("F36:M36").ClearContents
End Sub


請問大大 這兩筆是否為綠色儲存格清空保留底色的文法 若是 我再自行分開
Application.ScreenUpdating = True
Range("F36:M36").ClearContents

在請問大大 若我要比照綠色儲存格的 "前四格" 或 "後四格" 列 欄 去對B+任一 列 欄 做修改 下方該如何填入文法
(綠色儲存格 內 資料都會填上 僅針對 前四格 或 後四格做修改 未針對的地方B+ 列 欄 保持原先資料不變)

Sub test1()
Set S = ActiveSheet
Application.ScreenUpdating = False
For i = 1 To 15
X = ActiveSheet.Cells(13, 4).Offset(i, 0).Value
Range("F36:M36").Copy
Sheets("B" & i & "").Activate
Range("A" & X & "").Select
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
S.Activate
Next i
peter3057
不過test1有個很大的問題, 工作表超過23個時, 會覆蓋到綠色區域,這就是為何會改成test2的原因.
EDILUO
我好像 按照大大的方式找到方法了 我好好研究一下 感謝大大
關閉廣告
文章分享
評分
評分
複製連結

今日熱門文章 網友點擊推薦!