Board logo

標題: [發問] scrollbar 的問題 [打印本頁]

作者: t8899    時間: 2014-3-25 14:32     標題: scrollbar 的問題

Private Sub ScrollBar1_Change()
With ScrollBar1
Sheets("sheet1").Range("H1").Value = Sheets("sheet1").Range("M2").Value
   .Max = Sheets("sheet1").Range("H1") + 5
   .Min = Sheets("sheet1").Range("H1") - 5
Sheets("sheet1").Range("H1") = .Value
   End With
end sub
初始值不是 +5就-5
如何讓scrollbar h1初始值 ==> 等於 M2 的值,MAX 跟MIN 仍然有作用
作者: luhpro    時間: 2014-3-25 22:32

本帖最後由 luhpro 於 2014-3-25 22:35 編輯
Private Sub ScrollBar1_Change()
With ScrollBar1
Sheets("sheet1").Range("H1").Value = Sheets("sheet ...
t8899 發表於 2014-3-25 14:32

你的程式放錯地方了.

設定 ScrollBar 的最大值與最小值,
應該是要放在  Worksheet_Change 裡面.

在程式跑到 Range H1 = M1 之後,
接著就依據 H1 的值去設定 ScrollBar 的最大值與最小值.

ScrollBar1_Change這個程序
一般是用在當 程式去變更 或 User 用滑鼠去點選 ScrollBar,
進而造成其值異動時使用.
作者: t8899    時間: 2014-3-26 06:57

你的程式放錯地方了.

設定 ScrollBar 的最大值與最小值,
應該是要放在  Worksheet_Change 裡面.

在 ...
luhpro 發表於 2014-3-25 22:32


事件程序宣告與同名事件描述不相符??
Private Sub ScrollBar1_Change()
Sheets("sheet1").Range("H1").Value = Sheets("sheet1").Range("M2").Value
End Sub

Private Sub Worksheet_Change()
With ScrollBar1
.Max = Sheets("sheet1").Range("H1") + 5
.Min = Sheets("sheet1").Range("H1") - 5
  Sheets("sheet1").Range("H1") = .Value
     End With
End Sub
作者: luhpro    時間: 2014-3-27 02:54

事件程序宣告與同名事件描述不相符??
Private Sub ScrollBar1_Change()
Sheets("sheet1").Range("H1" ...
t8899 發表於 2014-3-26 06:57

從程式看不出來 ScrollBar 與哪個儲存格有連動,
這裡假設它的 LinkedCell 值為 M2. (即其值與 Range("M2") 連動)

那麼建議你把 Worksheet_Change 裡的 Sheets("sheet1").Range("H1") = .Value 拿掉, (ScrollBar1_Change 已經有達成此目的了)
這樣點擊 ScrollBar 的上下鈕,
M2 與 H1 都會跟著連動,
ScrollBar 的 Max 與 Min 兩個值也會跟著變動,
不過這樣看起來怪怪的. (感覺這樣的程式動作可能不是你想要的)

建議你把需求詳細描述一下,
或是提供相關程式碼,
這樣做出來的程式較能符合你的需求.
作者: t8899    時間: 2014-3-27 06:42

本帖最後由 t8899 於 2014-3-27 06:46 編輯
從程式看不出來 ScrollBar 與哪個儲存格有連動,
這裡假設它的 LinkedCell 值為 M2. (即其值與 Range("M2 ...
luhpro 發表於 2014-3-27 02:54

我想要的...........
H1儲存格===> 一開始點擊 ScrollBar 的上下鈕為100(h1的值等於m2) 滑動拉捍應在中間
,往左盡頭為95, 往右盡頭為105 (附檔)[attach]17874[/attach]
點擊其他儲存格後,h1的值又回到m2的值,拉捍回到中間
作者: luhpro    時間: 2014-3-27 23:02

本帖最後由 luhpro 於 2014-3-27 23:04 編輯
事件程序宣告與同名事件描述不相符??
Private Sub ScrollBar1_Change()
Sheets("sheet1").Range("H1" ...
t8899 發表於 2014-3-26 06:57

這是因為你的程式中是用 Private Sub Worksheet_Change()
但實際上應該要長這樣: Private Sub Worksheet_Change(ByVal Target As Range)
這個事件最低限度必須要提供觸發變更事件的主體 :Target 這個物件以供程式運用,(不能直接清掉)
所以會發生這個錯誤.

我想要的...........
t8899 發表於 2014-3-27 06:42
H1儲存格===> 一開始點擊 ScrollBar 的上下鈕為100(h1的值等於m2) 滑動拉捍應在中間
,往左盡頭為95, 往右盡頭為105
點擊其他儲存格後,h1的值又回到m2的值,拉捍回到中間

看到 "點擊" 就要想到 SelectionChange (變更正被選擇<Activate>的儲存格)
  1. Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  2.   With Target
  3.     Select Case "R" & .Row & "C" & .Column
  4.       Case "R1C8" ' H1
  5.         .Offset(1, 5) = 100
  6.         .Value = .Offset(1, 5)
  7.         With .Parent.ScrollBar1
  8.           .Max = 105
  9.           .Min = 95
  10.           .Value = 100
  11.         End With
  12.       
  13.       Case Else
  14.         With .Parent
  15.           .[H1] = .[M2]
  16.           With .ScrollBar1
  17.             .Max = .Parent.[H1] + 5
  18.             .Min = .Parent.[H1] - 5
  19.             .Value = .Parent.[H1]
  20.           End With
  21.         End With
  22.     End Select
  23.   End With
  24. End Sub
複製代碼
至於其他的程序以上述的需求來看,
應該暫時還不需要用到.
作者: t8899    時間: 2014-3-28 07:15

這是因為你的程式中是用 Private Sub Worksheet_Change()
但實際上應該要長這樣: Private Sub Worksheet ...
luhpro 發表於 2014-3-27 23:02

剛點 左右 h1 會等於 m2 ,但增減值+-5 沒作用??
[attach]17892[/attach]
作者: luhpro    時間: 2014-4-8 21:36

剛點 左右 h1 會等於 m2 ,但增減值+-5 沒作用??
t8899 發表於 2014-3-28 07:15

看不懂你的意思.
.Max = .Parent.[H1] + 5
.Min = .Parent.[H1] - 5
就是在變增減值的啊.

或許妳還需要確認 ScrollBar 要與哪個儲存格做連結, (H1? 還是 M2?)
也就是說點了 ScrollBar 的左右鍵後,
哪個儲存格的內容要跟著變?
這點只要設定 ScrollBar 的 LinkedCell 屬性為該儲存格即可.

另外,因此使那個儲存格值變了後,
是否又有儲存格的內容要跟著變?
作者: t8899    時間: 2014-4-9 05:52

看不懂你的意思.
.Max = .Parent.[H1] + 5
.Min = .Parent.[H1] - 5
就是在變增減值的啊.

或許妳還 ...
luhpro 發表於 2014-4-8 21:36

謝謝,我的問題已解決是要用GotFocus
Private Sub ComboBox1_Click()
       [h1].Value = Sheet1.ComboBox1.Text
End Sub
Private Sub ComboBox1_GotFocus()
Sheet1.Range("H1").Value = Sheet1.Range("M2").Value
ComboBox1.List = Sheet1.Range("y30:y38").Value
End Sub




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