Board logo

標題: 一個變色問題 [打印本頁]

作者: hong912    時間: 2016-9-14 10:48     標題: 一個變色問題

大大們, 安好
有一個儲存格變色問題請教, 圖片有明細說明, 先行謝過各大大們,
[attach]25243[/attach]
作者: Hsieh    時間: 2016-9-14 22:57

回復 1# hong912

工作表右鍵事件,選取範圍後按下滑鼠右鍵
  1. Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
  2. With Selection
  3.   .Interior.ColorIndex = 6
  4.   .Merge
  5. End With
  6. End Sub
複製代碼

作者: hong912    時間: 2016-9-15 08:44

回復 2# Hsieh
尊敬的版大, 早晨
感謝協助, 謝謝!!
作者: hong912    時間: 2016-9-19 19:09

回復 2# Hsieh

Hsieh 版大好,
小弟再有問題請教, 程式中按滑鼠左健變色, 現想變多一色, 假設當用家選定儲存格按左健變藍色, 再按左健, 儲存再變成紅色, 這是否可做到, 煩勞版大教導..
謝謝!!
作者: 周大偉    時間: 2016-9-21 19:03

小弟也想知道這似簡單實是複雜的雙重變色問題, 在vba中是否可做到,
作者: zyzzyva    時間: 2016-9-21 22:16

加個if 判斷?
  1. Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)

  2. With Selection
  3.     If .Interior.ColorIndex = 5 Then
  4.         .Interior.ColorIndex = 3

  5.     Else
  6.         .Interior.ColorIndex = 5
  7.         .Merge
  8.         
  9.     End If
  10. End With
  11. End Sub
複製代碼

作者: hong912    時間: 2016-9-21 22:42

本帖最後由 hong912 於 2016-9-21 22:44 編輯

回復 6# zyzzyva
感謝大大,
我也曾用錄制巨集方式研究,但功力太淺,沒成功,衷心感謝!
作者: 周大偉    時間: 2016-9-25 13:50

回復 6# zyzzyva                                                                                                                                                                                                 
前輩好,小弟想請問若在程式中加入強制性自動換列,自否可以,感恩,謝謝!
作者: zyzzyva    時間: 2016-9-28 14:25

回復 8# 周大偉
自動換列是什麼意思?變色後換到下一列嗎?
作者: 周大偉    時間: 2016-9-28 18:41

回復 9# zyzzyva
謝謝回應,
自動換列是指一般輸入文字於儲存格過長時沒法全部顯示, 用家便會設定儲存格格式,在對齊方式中勾選自動換列, 這情況下輸入文字幾長都會自動調整列高,
在程式中可否加入自動換列, 是指用家輸入過長文字, 儲存格自行調整列高,
多謝回應..
作者: zyzzyva    時間: 2016-9-29 09:00

回復 10# 周大偉
不好意思,不是很了解這跟變色問題的關聯。如果只是要在vba中設定自動換列,使用.WrapText = True就可以了。
作者: 周大偉    時間: 2016-9-29 19:06

回復 11# zyzzyva
明確說, 樓上樓主發問一個變色問題, 我把程式套入小弟工作表中, 而我在工作表儲存格格式>對齊方式中>勾選自動換列, 這情況下, 輸入文字過長列高便自行調整, 但現時文字過長,儲存格沒有調整列高, 因而沒法把全部輸入的文字顯示, 心想我己勾選了自動換列, 為何有此情況, 故想如果加入vba程式是否可以做到文字過長列高自行調整,  以便把輸入文字全部顯示, 謝,
[attach]25401[/attach]
作者: zyzzyva    時間: 2016-9-29 20:20

回復 12# 周大偉
那是合併儲存格的問題,excel合併儲存格有很多問題,用vba設定wraptext也沒用(可以手動在目標列的下緣按兩下,會發現一樣無效),詳細可以參考:
http://blog.contextures.com/archives/2015/12/03/autofit-merged-cells-row-height-update-20151203/
我想您應該是合併、變色完儲存格要在裡頭輸入文字?把下面的code加到同一個worksheet裡試試看。
  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2. Dim Vhight As Single
  3. If Target.WrapText = True Then
  4. With Target
  5. .Select
  6. .RowHeight = 1
  7. .WrapText = True
  8. .UnMerge
  9. .EntireRow.AutoFit
  10. Selection.Merge
  11. Vhight = .Width * .Height / Selection.Width
  12. If Vhight < 16 Then Vhight = 16
  13. .RowHeight = Vhight
  14. .VerticalAlignment = xlCenter
  15. End With
  16. End If
  17. End Sub
複製代碼

作者: 周大偉    時間: 2016-9-29 20:54

回復 13# zyzzyva
感謝大大,
我會鑽研, 若有不問處, 再請教, 謝謝,
作者: hong912    時間: 2016-10-11 19:53

本帖最後由 hong912 於 2016-10-11 19:55 編輯

回復 13# zyzzyva
大大好,
癹問了一個變色問題, 帶出另一個換列問題, 若能把兩個程式融合, 就是否可以, 謝謝!!
作者: zyzzyva    時間: 2016-10-12 10:00

回復 15# hong912
儲存格合併後不太好操作,請參考13F的回覆。
作者: hong912    時間: 2016-10-12 19:52

回復 16# zyzzyva
前輩, 你好,
可否明確說明, 如何放於同一程式區內, 受教了, 感恩賜!
作者: zyzzyva    時間: 2016-10-12 20:09

回復 17# hong912
是2個事件,要放在同一個worksheet。按右鍵後會變色同時合併儲存格,如果在裡頭輸入,會有換列的效果(但不是很漂亮)。
個人覺得,如果會需要操作公式或程式,非必要盡量避免使用合併儲存格,儲存格合併之後,容易有很多奇奇怪怪的問題。
  1. Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)

  2. With Selection
  3.     If .Interior.ColorIndex = 5 Then
  4.         .Interior.ColorIndex = 3

  5.     Else
  6.         .Interior.ColorIndex = 5
  7.         .Merge
  8.         .WrapText = True
  9.         
  10.     End If
  11. End With
  12. End Sub


  13. Private Sub Worksheet_Change(ByVal Target As Range)
  14. Dim Vhight As Single
  15. If Target.WrapText = True Then
  16. With Target
  17. .Select
  18. .RowHeight = 1
  19. .WrapText = True
  20. .UnMerge
  21. .EntireRow.AutoFit
  22. Selection.Merge
  23. Vhight = .Width * .Height / Selection.Width
  24. If Vhight < 16 Then Vhight = 16
  25. .RowHeight = Vhight
  26. .VerticalAlignment = xlCenter
  27. End With
  28. End If
  29. End Sub
複製代碼

作者: hong912    時間: 2016-10-12 22:38

回復 18# zyzzyva
謝謝前輩, 衷心感謝!
作者: zyzzyva    時間: 2016-10-13 12:36

回復 20# hong912
可以試著理解一下code,執行合併儲存格的是merge,只要把它刪除就可以了。
沒有合併的話,wraptext可以正常作用,另一個change事件也可以刪掉。
  1. Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
  2.     With Selection
  3.         If .Interior.ColorIndex = 5 Then
  4.             .Interior.ColorIndex = 3
  5.         Else
  6.             .Interior.ColorIndex = 5
  7.             .WrapText = True
  8.         End If
  9.     End With
  10. End Sub
複製代碼

作者: hong912    時間: 2016-10-13 13:51

回復 21# zyzzyva
謝謝前輩無私教導,現時正工作中,待今晚放工後試用,但真心感謝,祝願健康。




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