Board logo

標題: 如何避免儲存格公式,因『剪下』『貼上』而被修改? [打印本頁]

作者: eigen    時間: 2017-6-11 17:27     標題: 如何避免儲存格公式,因『剪下』『貼上』而被修改?

如何避免儲存格公式,因『剪下』『貼上』而被修改?

sheet2 a1= Sheet1!a1
sheet2 b1= Sheet1!b1
sheet2 c1= Sheet1!c1

sheet2 a2= Sheet1!a2
sheet2 b2= Sheet1!b2
sheet2 c2= Sheet1!c2

以此類推

我要固定 sheet2 的公式,不能因為 sheet1 的儲存格 『剪下』『貼上』而被修改


一、我試了將 sheet2 工具->保護->保護工作表

結果『剪下』『貼上』 公式還是變了


二、我試著用indirect("Sheet1!a1",1)的方式來取代,公式是不會變了,

相關公式共有 15453個, 程式容量卻大了30%,多了750k ,整個檔案的開啟速度也變慢了

為了產生15453個公式,我還刻意用 vba 來產生。



三、目前我還能想到的就是在寫個巨集,在程式開啟動,主動更新整個 sheet2的公式,

這樣的方式,不能確保開啟後公式不被使用者修改

使用者下次重新開啟才能確保sheet2 公式正確。


還有更好的做法嗎?
作者: ikboy    時間: 2017-6-12 10:47

回復 1# eigen


   Try this:
  1. Private Sub Worksheet_Activate()
  2. Application.ScreenUpdating = 0
  3.     With Sheets(1)
  4.         [a1:c1] = .[a1:c1].Value
  5.     End With
  6. Application.ScreenUpdating = 1
  7. End Sub
複製代碼

作者: eigen    時間: 2017-6-14 08:45

回復 2# ikboy


    謝謝,不能直接填值,只能公式

我試了 indirect offset index

目前看來 index 最省空間~~  index < offset < indirect

而且直接填寫 1 2 3 4 會比用 row() column() 省空間

我還是做一個被動方式來處理,也許就像上面的 worksheet_activate 時才更新一次所有公式~~
作者: linyancheng    時間: 2018-6-9 23:22

回復 3# eigen


    若儲存格是相連續的,可以使用陣列公式。
譬如:
{=Sheet1!A1:B10}
作者: 准提部林    時間: 2018-6-13 09:52

如果公式就這麼簡單的單一儲存格取值,
可試試"定義名稱"!!
作者: handsometrowa    時間: 2020-4-7 15:15

回復 4# linyancheng


    那請問如果儲存格不是連續的

A2:O2 這一排資料要貼到 A10:O10   當中有沒有存在的資料格

但是資料(數值)要貼過去,但是公式也要過去呢....@@"




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)