返回列表 上一主題 發帖

[發問] VBA 問題求教

[發問] VBA 問題求教

目標搜尋20130406有改.rar (22.75 KB)

請教VBA達人們

在附加檔案裡,excel檔,裡面是所寫程式的某部份
我在【Sheet台選】中增加了一個CommandButton1,名為【計算】,也寫好程式碼,按下就會計算【Sheet1台選】裡的程式。
程式碼如下:
Private Sub CommandButton1_Click()
   ' MsgBox Range("n5").Value
   Dim i As Integer
   For i = 5 To 14
        Call Macro1(i)
   Next
End Sub

但,我想在工作表1中也增加一個CommandButton1,也名為【計算】
如何寫程式碼,當我按下工作表1的CommandButton1時,也可以趨動【Sheet台選】裡的程式呢?

另外還有個問題

若是excel檔裡的履約價因連結而變動時,能不能寫程式碼,讓我不用【手動】的方式就能執行【計算】的功能呢?
目前有看到這個程式碼,如下:
Private Sub Worksheet_Change(ByVal Target As Range)
在其內編碼驅動程序(原按鍵指定程序)即可。
End Sub

請問這個要寫在哪裡?可行嗎?

我是自修的,所以想問問各位,麻煩幫個忙,謝謝。

回復 2# GBKEE


非常謝謝你,這個方法可行。

但又出現了新的問題
當我的工作表裡的值不是透過DDE的更新而變動時,這個方法就無法自動計算了

我的意思是說原本我在工作表1是用DDE連結現貨或履約價的數值,當這些數值更新時,就透過這個程式碼可以自動計算
後來我用工作表2來計算這些值,然後直接連結到工作表1的現貨或履約價的值裡,卻發現工作表1的自動計算不會動了
除非我直接用手動的方式按下計算的button才會計算
我想請問哪裡出錯了,不能用這個程式碼來改嗎?

麻煩了,謝謝。

TOP

不好意思,太久沒有上線查看,真的很謝謝GBKEE大大的回應
我有試過你po的方式,但還是沒有反應。

現在我重新想了方式   附件如旁: 目標搜尋20130..rar (22.57 KB)
若我在【台選】,寫好了以下的程式碼:
Private Sub CommandButton1_Click()
   ' MsgBox Range("n5").Value
   Dim i As Integer
   For i = 5 To 14
        Call Macro1(i)
  
   Next

   
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
   ' MsgBox Range("n5").Value
   Dim i As Integer
   For i = 5 To 14
        Call Macro1(i)
  
   Next

End Sub

然後,把在【台選】的儲存格L5和【工作表1】的儲存格B2做連結
即【台選】儲存格L5  = 【工作表1】儲存格B2
當我把【工作表1】的儲存格B2 換個數字時
能不能就讓【台選】的儲存格L5因為數字變動,而會自動運算以上所寫的程式碼呢?

麻煩大大幫個忙,想想看。是不是要多什麼程式碼才能做到?還是說不能這樣做呢?
不論如何,都非常感謝大大的幫忙。:loveliness:

TOP

真的非常謝謝GBKEE大大的幫忙
是可行的,終於能解決,真的好開心呢!!
原來模組那裡也要寫,難怪總是卡在那裡。
再次感謝GBKEE大大的幫忙。

TOP

不好意思,再麻煩GBKEE大大

若我不只有【台選】,我還有【台選2】,其內容和【台選】是一樣的,裡面的公式有些許不一樣而已,但大致相同。

所以我可以直接複製【台選】的程式碼貼在【台選2】裡嗎?如下:
Private Sub Worksheet_Change(ByVal Target As Range)
   ' MsgBox Range("n5").Value
   Dim i As Integer
   For i = 5 To 14
        Call Macro1(i)
        
   Next
End Sub


Private Sub Worksheet_Calculate()   '重算事件程式碼
  Dim i As Integer
  Application.EnableEvents = False  '停止 觸發事件
  For i = 5 To 14
        Call Macro1(i)
   Next
   Application.EnableEvents = True  '恢復 觸發事件
End Sub

而在模組裡的module2的程式碼可以這樣寫嗎?

Sub Macro1(r As Integer) 'r為參數代表列號.integer為整數型態
        With Sheets("台選")
            .Range("M" & r).GoalSeek Goal:=.Range("N" & r).Value, ChangingCell:=.Range("D" & r)
        End With
With Sheets("台選2")
            .Range("M" & r).GoalSeek Goal:=.Range("N" & r).Value, ChangingCell:=.Range("D" & r)
        End With

    End Sub

是不是這樣不行,因為我這樣寫時,EXCEL就會當掉,或是卡卡的。
可以麻煩殉GBKEE大大能再幫我看一下嗎?
謝謝你。

TOP

再次謝謝GBKEE大大
我試過,是可行的。

但,因為我用在主要的檔裡,像【台選】的工作表有六個之多
當我只先更新二個工作表的程式後,沒想到excel就當掉了。
重新打開也跑不動了
可能是我需要用的迴圈太多了,以致於excel跑不動而當掉。
我再想想有什麼方法好了
再次謝謝GBKEE大大

TOP

        靜思自在 : 地上種了菜,就不易長草;心中有善,就不易生惡。
返回列表 上一主題